共计 1611 个字符,预计需要花费 5 分钟才能阅读完成。
ansible 是用来对批量机器执行命令的工具;
筹备环境:
管制机器:192.168.182.102
业务主机:192.168.182.100,192.168.182.101
ansible 装置与配置
- yum install epel-release ansible -y
- 配置须要执行命令的主机,vim /etc/ansible/hosts
默认是没有任何主机的,能够按标签增加主机,如图所示,我增加了 test1 标签和 test2 标签 -
接下来须要配置主机的明码
ssh-keygen -t rsa
默认密钥是会生成明码的,为了记住明码,须要执行以下命令,~/.ssh/id_rsa 是你生成密钥时的默认文件门路;
ssh-agent bash ssh-add ~/.ssh/id_rsa
-
将公钥复制到业务主机上,执行如下命令
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.182.100 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.182.101
能够在业务主机的~/.ssh/authorized_keys 下看到增加的公钥
-
ansible 的配置寄存于 /etc/ansible/ansible.cfg,介绍两个比拟罕用的配置
# 每次执行 ansible 命令是否校验 ssh host key host_key_checking = False # 开启日志记录 log_path = /var/log/ansible.log
- 执行 ansible 命令,格局为:
ansible 主机或者主机组 -m 模式 -a 参数
例如执行一个 ping 命令
主机组就是在 /etc/ansible/hosts 文件的配置, 例如指定 test1 的主机组
ansible test1 -m ping
貌似只反对单个 tag 或者 all,all 就是蕴含所有的 tag
ansible all -m ping
罕用的 module
具体的 module 有哪些, 这里只会介绍命令的用法,不会介绍他们的区别,如果想要理解真正的原理,倡议查看文档或者源码,文档能够通过 ansible-doc module-name 查看,源码在 /usr/lib/python2.7/site-packages/ansible/modules
- shell(win_shell)
执行一条 shell 命令,具体是调用了 /bin/sh - command(win_command),看文档貌似不反对局部字符, 用法与 shell 相似,因为不反对“|”字符,所以不反对管道操作
- copy,复制文件到业务主机上
- file,与文件相干的操作,删除刚刚复制的文件
- script,相当于将脚本复制到业务机上,执行该脚本,而后删除该脚本,即便该脚本没有执行权限,依然会执行该脚本
ansible-playbook
将工作写入到 yml 文件中,进行批量工作操作;实例如下
- hosts: all
tasks:
- name: create test3 file
file: path=/opt/test3.txt state=touch
when: GO111MODULE == "on"
- name: create test2 file
file: path=/opt/test2.txt state=touch
when: GO111MODULE == "off"
notify:
- create test3 file
hosts:是须要执行的工作的主机组
tasks:执行的工作列表
每个工作有如下参数:
name:工作的名称
上图中的 file: path=/opt/test3.txt state=touch 示意 module name 为 file,参数为 path=/opt/test3.txt state=touch 的工作,能够替换为任何其余的 module name 和参数
when:if 判断,只有返回 false 的才会执行该工作,然而貌似只反对 ansible 本人有的变量
notify: 当工作状态为 change 时会触发 notify,并执行相应的 task