Ansible 技巧

概述

用ansible开启基础设施自动化

设定步骤

1:ansible客户端和服务器都需要执行以下操作。
$ sudo apt-get update
$ sudo apt-get install -y python-dev python-pip
$ sudo pip install ansible

在ansible服务器上进行ssh配置。客户端在创建Azure虚拟机时已经设置了公钥。通过ssh IP地址可以登录。

Host プライベートIPアドレス
    HostName プライベートIPアドレス
    User ログインユーザ名
    IdentityFile 秘密鍵のpath

若要实现第三点,请在Ansible服务器端的ansible.cfg文件中设置秘钥路径(private_key_file)。若进行第三点操作,则第二点就不再需要。

4:在ansible服务器的/etc/hosts文件中设置vnc和xrdp的IP地址。

5:将 hosts 的设置应用于 inventory。在 inventory 中,应该设置 hosts 的名称,不应该写入 IP 地址。

汇聚不实事实
成为用户

如何在Qiita上撰写文章

https://qiita.com/hiroyuki_hon/items/f2a779bb295fd12646ab ->
https://qiita.com/hiroyuki_hon/items/f2a779bb295fd12646ab

https://qiita.com/Qiita/items/c686397e4a0f4f11683d ->
https://qiita.com/Qiita/items/c686397e4a0f4f11683d

因为总结得很清楚,所以我过会再看。

模块

标签

如果有一个庞大的playbook,并且想要部分执行它,可以提前指定标签来实现。只要指定了标签,就可以像这样做。

$ ansible-playbook example.yml –标签 “配置,软件包”

tasks:

    - yum:
        name: "{{ item }}"
        state: installed
      loop:
         - httpd
         - memcached
      tags:
         - packages

    - template:
        src: templates/src.j2
        dest: /etc/foo.conf
      tags:
         - configuration

用于创建条件和执行控制的参数。
http://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#the-when-statement

- name: send channel setting for restapi
  become: false
  synchronize:
    src: channel/
    dest: ~/fabric-performance-verification.git/fabricRestTool/artifacts/channel/
    delete: yes
  when: "'web1' in inventory_hostname"

命令

在远程主机上执行命令。
http://docs.ansible.com/ansible/latest/modules/command_module.html?highlight=command

- name: install n
  command: make -C /tmp/n

远程主机执行Shell命令。我不知道它与command之间的区别。我认为两者都可以做同样的事情。包括become在内,这是一个模块吗?我有一个疑问,但是如果指定如下内容,它应该会运行。关于chdir,它是执行目录。

- name: build cryptogen/configtxgen script
  become: true
  shell: ./bootstrap-1.0.5.sh
  args:
    chdir: "{{ ansible_env.PWD }}/fabric/scripts"

忽略错误

当playbook失败时会终止,但如果希望即使失败也不停止,可以使用哪个参数来指定呢?

- name: mode old data
  shell: mv /root/sar.data.{{ inventory_hostname }} /root/sar.data.{{ inventory_hostname }}.`date '+%Y%m%d-%H%M%S'`
  ignore_errors: true

档案

设置文件、目录和符号链接的参数。似乎也可以通过复制等方式完成。

- name: change owner/group ~/fabric/scripts/bin
  become: true
  file:
    path: "{{ ansible_env.PWD }}/fabric/scripts/bin"
    state: directory
    owner: "{{ ansible_env.USER }}"
    group: "{{ ansible_env.USER }}"

复制

将文件传输到远程主机。要复制的文件应放置在“files”目录中。
http://docs.ansible.com/ansible/latest/modules/copy_module.html?highlight=copy

    - copy:
        src: /etc/hosts
        dest: /etc/hosts
        owner: root
        group: root
        mode: 0644

变量

在playbook中,可以直接内联定义变量,如下所示。

- hosts: webservers
  vars:
    http_port: 80

指定变量。

模板

将展开的Jinja2模板文件传输到远程主机。使用主机中templates目录中的src文件作为模板,在远程主机的dest位置生成文件。
http://docs.ansible.com/ansible/latest/modules/template_module.html?highlight=templat

- name: send docker-compose.yml
  template:
    src: docker-compose.yml
    dest: ~/docker-compose.yml

同步

以下是一个rsync的包装器。它不如rsync命令那样功能强大,但可以在一定程度上使用。不太清楚与复制的区别。它是否会影响后续处理?
http://docs.ansible.com/ansible/latest/modules/synchronize_module.html?highlight=synchronize

- name: send channel settings
  synchronize:
    src: channel/
    dest: /root/channel/
    delete: yes

包括任务

目前执行的任务列表,可以在 http://docs.ansible.com/ansible/latest/modules/include_tasks_module.html?highlight=include_tasks 查看。

- include_tasks: install.yml
  tags:
    - install

服务

管理远程主机的服务。
http://docs.ansible.com/ansible/latest/modules/service_module.html?highlight=service

- name: restart docker
  service:
    name: docker
    state: restarted

systemd系统

远程主机的systemd服务进行管理。貌似也可以用service来做。

- name: service disabled
  systemd:
    name: sysstat
    state: stopped
    enabled: false

公寓

执行APT包的管理。

- name: Install apt docker
  apt:
    name: "{{ item }}"
    update_cache: yes
    force: yes
  with_items:
    - docker-engine 
    - python-setuptools
    - apt-utils
    - python-pip

使用`with items`,会将 “{{ item }}” 的值代入到apt中并进行循环安装。

apt_repository 可以被 paraphrase 成「赞助库」

在Ubuntu和Debian上添加或删除APT(高级包管理工具)的软件仓库。
http://docs.ansible.com/ansible/latest/modules/apt_repository_module.html?highlight=apt_repository

- name: Add apt-repogitory for docker
  apt_repository:
    repo: "deb https://apt.dockerproject.org/repo ubuntu-xenial main"
    update_cache: yes

一种选择: 管道

管理与Python库的依赖关系。您可以在此链接查阅Ansible有关pip模块的文档。

- name: pip install
  pip:
    name: "{{ item }}"
  with_items:
    - docker-compose
    - docker
    - dockerpty
    - PyYAML
  ignore_errors: yes

git

git存储库管理。repo模块中指定的文件将放入dest目录的内容。
http://docs.ansible.com/ansible/latest/modules/git_module.html?highlight=git

- name: download n
  git: 
    repo: "{{ n_repo }}"
    dest: /tmp/n

Docker镜像 (Docker

使用Docker的image,可以进行构建、加载或拉取。
http://docs.ansible.com/ansible/latest/modules/docker_image_module.html?highlight=docker_image

- name: pull an image
  docker_image:
    name: hyperledger/fabric-ca:x86_64-1.0.5

可能的中文释义:

名称应该是直接指定在DockerHub上的镜像名称。
关于用标签进行版本管理的说明,也可以在DockerHub上hyperledger/fabric-ca页面的“tags”部分找到。

指定主机上compose-yml模板文件的名称和目录位置,并将其发送给被控制的一方。

Docker服务

使用Docker Compose文件可以启动、关闭或扩展服务。简单来说,通过指定目录并执行docker-compose.yml文件可以实现这些功能。详细参见http://docs.ansible.com/ansible/latest/modules/docker_service_module.html?highlight=docker_service。

- name: Deploy the CA using docker compose
  docker_service:
    project_src: ~/
    files: docker-compose.yml
广告
将在 10 秒后关闭
bannerAds