ansible 执行结果信息–各颜色说明;ansible Ad-Hoc 说明;ansible 如何查看帮助文档与常用模块详解
主机名称 | 操作系统版本 | 内网IP | 外网IP(模拟) | 安装软件 |
---|---|---|---|---|
ansi-manager | CentOS7.5 | 172.16.1.180 | 10.0.0.180 | ansible |
ansi-haproxy01 | CentOS7.5 | 172.16.1.181 | 10.0.0.181 | |
ansi-haproxy02 | CentOS7.5 | 172.16.1.182 | 10.0.0.182 | |
ansi-web01 | CentOS7.5 | 172.16.1.183 | 10.0.0.183 | |
ansi-web02 | CentOS7.5 | 172.16.1.184 | 10.0.0.184 | |
ansi-web03 | CentOS7.5 | 172.16.1.185 | 10.0.0.185 |
说明:
1、 运维人员使用的登录账号;
2、 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放;
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。
# 使用一个专门的用户,避免直接使用root用户
# 添加用户、指定家目录并指定用户密码
# sudo提权
# 让其它普通用户可以进入该目录查看信息
useradd -u 1050 -d /app yun && echo '123456' | /usr/bin/passwd --stdin yun
echo "yun ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chmod 755 /app/
之后文章都是如下主机配置清单
[yun@ansi-manager ansible_info]$ pwd
/app/ansible_info
[yun@ansi-manager ansible_info]$ cat hosts_key
# 方式1、主机 + 端口 + 密钥
[manageservers]
172.16.1.180:22
[proxyservers]
172.16.1.18[1:2]:22
# 方式2:别名 + 主机 + 端口 + 密码
[webservers]
web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=22
web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=22
web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22
黄色:成功执行并且伴随着状态的改变
ansible proxyservers -m command -a 'cat /etc/hosts' -i hosts_key
绿色:成功执行并且没有发生状态的改变,或者只是对远程节点状态信息进行查看
ansible proxyservers -m ping -i hosts_key
红色:操作执行命令有异常
ansible proxyservers -m command -a 'll /tmp' -i hosts_key
紫色:表示对命令执行发出警告信息(可能存在的问题,给你一下建议)
# 其中 hosts_kkk 文件不存在
ansible proxyservers -m command -a 'll /tmp' -i hosts_kkk
Ansible中有两种模式, 分别是 Ad-Hoc 模式和 Playbooks 模式。
ad-hoc简而言之,就是“临时命令”,不会保存。
场景一,在多台机器上,查看某个进程是否启动
场景二,在多台机器上,拷贝指定日志文件到本地,等等
[yun@ansi-manager ~]$ ansible-doc -l # 查看所有模块与简要说明
[yun@ansi-manager ~]$ ansible-doc copy # 查看指定模块方法「可优先查看 EXAMPLES 信息」★★★★★
[yun@ansi-manager ~]$ ansible-doc -s copy # 查看指定模块的 Playbooks 代码段
工作目录与主机清单
当前所在的工作目录和主机清单
[yun@ansi-manager ansible_info]$ pwd
/app/ansible_info
[yun@ansi-manager ansible_info]$ ll
total 4
-rw-rw-r-- 1 yun yun 226 Oct 8 16:07 hosts_key
[yun@ansi-manager ansible_info]$ cat hosts_key
# 方式1、主机 + 端口 + 密钥
[manageservers]
172.16.1.180:22
[proxyservers]
172.16.1.18[1:2]:22
# 方式2:别名 + 主机 + 端口 + 密码
[webservers]
web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=22
web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=22
web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22
默认模块, 用于执行命令。但不支持管道或重定向。
正常示例
[yun@ansi-manager ansible_info]$ ansible proxyservers -a 'df -h' -i hosts_key
# 或者
[yun@ansi-manager ansible_info]$ ansible proxyservers -m command -a 'df -h' -i hosts_key
异常示例
# 重定向不支持
ansible proxyservers -m command -a 'df -h > /tmp/df.info' -i hosts_key
# 管道不支持
ansible proxyservers -m command -a "df -h | grep 'boot'" -i hosts_key
功能和 command 相同,且支持管道和重定向。与 command 相比,优先使用该模块。
示例
ansible proxyservers -m shell -a "df -h | grep 'boot'" -i hosts_key
ansible proxyservers -m shell -a "df -h > /tmp/df.info" -i hosts_key
在本地运行模块,等同于在远程执行。且不需要将脚本文件推送到目标主机进行执行。
示例
脚本中有 sudo 提权
# 在 ansible 管理机操作
[yun@ansi-manager ansible_info]$ cat /app/yunwei/yum_test.sh
#!/bin/sh
# 由于使用的是 yun 用户,而不是 root 用户,因此需要 sudo 提权
sudo yum install -y iftop
[yun@ansi-manager ansible_info]$ ansible proxyservers -m script -a "/app/yunwei/yum_test.sh" -i hosts_key
脚本中无 sudo 提权
# 在 ansible 管理机操作
[yun@ansi-manager ansible_info]$ cat /app/yunwei/yum_test.sh
#!/bin/sh
yum install -y iftop
#######################################
# 由于我们使用的是 yun 普通用户
# 因此这里需要使用 -b 选择进行提权,这样在远程会以 root 用户执行
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m script -a "/app/yunwei/yum_test.sh" -i hosts_key
在目标机器查看是否在 yum 安装 iftop
[root@ansi-haproxy01 ~]# ps -ef | grep 'iftop'
root 3867 3866 0 23:25 pts/1 00:00:00 sudo yum install -y iftop
root 3868 3867 48 23:25 pts/1 00:00:12 /usr/bin/python /bin/yum install -y iftop
root 4144 3155 0 23:25 pts/0 00:00:00 grep --color=auto iftop
在目标机器实现 yum 安装软件
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例,知晓如何使用」
[yun@ansi-manager ansible_info]$ ansible-doc yum
# 由于我们使用的是 yun 普通用户
# 因此必须使用 -b 选择进行提权
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m yum -a 'name=httpd state=present' -i ./hosts_key
相关选项说明:
name:要安装软件包的名称
state:状态说明
‘present’ 和 ‘installed’ 简单地确保安装了所需的包。「优先使用 present」
‘latest’ 将更新指定的软件包,如果它不是最新可用的版本。
‘absent’ and ‘removed’ 将删除指定的包【慎用!!!】。「如要使用优先使用 absent」
download_only:只下载包,不安装
将控制机的文件或目录拷贝到受控机,并且可以指定目标文件/目录的属性信息。
控制机操作
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例,知晓如何使用」
[yun@ansi-manager ansible_info]$ ansible-doc copy
# 由于我们使用的是 yun 普通用户
# 因此有时需要使用 -b 选择进行提权
# 将 content 中的内容直接写入目标文件中
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m copy -a "content='123\n' dest=/tmp/copy_test2 owner=root group=root mode=0644 backup=yes" -i ./hosts_key
## 拷贝文件
[yun@ansi-manager ansible_info]$ cat /tmp/copy_test
111111
222222
333333
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m copy -a "src=/tmp/copy_test dest=/tmp/ owner=root group=root mode=0644 backup=yes" -i ./hosts_key
## 拷贝目录
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m copy -a "src=/app/yunwei dest=/tmp/ owner=root group=root mode=0644 backup=yes" -i ./hosts_key
被控端查看
[yun@ansi-haproxy01 tmp]$ cat copy_test2
123
[yun@ansi-haproxy01 tmp]$ cat /tmp/copy_test
111111
222222
333333
相关选项说明:
src:源文件「可以是绝对路径或相对路径」
remote_src:为 False「默认」,则源文件在本地;为 True ,则源文件在远端「了解」
dest:推送数据的目标路径或目标文件
owner:指定远端文件的属主
group:指定远端文件的属组
mode:指定远端文件的权限
backup:如果推送的目标文件存在且与源文件内容不同,那么会对目标文件进行备份「通过 checksum 校验」
content:将 content 中的内容直接写入目标文件中
注意事项:
1、同一个源文件,如果源文件内容没有任何修改,那么进行第二次相同的操作时,检测到要拷贝的文件和目标文件内容相同「通过 checksum 校验」,且目标文件属性前后未发生改变,那么就不会进行拷贝。由于目标文件属性未发生改变,所以返回数据颜色为绿色。如下图所示。
2、同一个源文件,如果源文件内容没有任何修改,那么进行第二次相同的操作时,如果源文件和目标文件内容相同「通过 checksum 校验」,但目标文件属性前后要求发生改变「属主、属组、权限」,那样也不会进行拷贝。但由于目标文件属性发生改变,所以返回数据颜色为黄色。
该模块功能类似于 copy 模块,但是是反向的。将远端的文件拷贝到本地。备注:当前仅支持文件,暂不支持递归拷贝。
由于ansible使用的是 yun 用户,因此从远端拷贝过来的文件属主、属组都是 yun。
控制机操作
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例,知晓如何使用」
[yun@ansi-manager ansible_info]$ ansible-doc fetch
# 由于我们使用的是 yun 普通用户
# 因此有时需要使用 -b 选择进行提权
被控端文件准备1
[test1@ansi-hapr