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