Ansible Ad-Hoc与常用模块

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/

Ansible 配置清单Inventory

之后文章都是如下主机配置清单

[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执行返回 => 颜色信息说明

黄色:成功执行并且伴随着状态的改变

ansible proxyservers -m command -a 'cat /etc/hosts' -i hosts_key

Ansible Ad-Hoc与常用模块_第1张图片

绿色:成功执行并且没有发生状态的改变,或者只是对远程节点状态信息进行查看

ansible proxyservers -m ping -i hosts_key

Ansible Ad-Hoc与常用模块_第2张图片

红色:操作执行命令有异常

ansible proxyservers -m command -a 'll /tmp' -i hosts_key

Ansible Ad-Hoc与常用模块_第3张图片

紫色:表示对命令执行发出警告信息(可能存在的问题,给你一下建议)

# 其中 hosts_kkk 文件不存在
ansible proxyservers -m command -a 'll /tmp' -i hosts_kkk

Ansible Ad-Hoc与常用模块_第4张图片

Ansible 之 Ad-Hoc

Ansible中有两种模式, 分别是 Ad-Hoc 模式和 Playbooks 模式。

ad-hoc简而言之,就是“临时命令”,不会保存。

ad-hoc模式的使用场景

场景一,在多台机器上,查看某个进程是否启动

场景二,在多台机器上,拷贝指定日志文件到本地,等等

ad-hoc模式的命令使用

在这里插入图片描述

Ansible查看帮助方法

[yun@ansi-manager ~]$ ansible-doc -l       # 查看所有模块与简要说明
[yun@ansi-manager ~]$ ansible-doc copy     # 查看指定模块方法「可优先查看 EXAMPLES 信息」★★★★★
[yun@ansi-manager ~]$ ansible-doc -s copy  # 查看指定模块的 Playbooks 代码段

Ansible常用模块

工作目录与主机清单

当前所在的工作目录和主机清单

[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

command 命令模块

默认模块, 用于执行命令。但不支持管道或重定向。

正常示例

[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

shell 命令模块

功能和 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 

script 脚本模块

在本地运行模块,等同于在远程执行。且不需要将脚本文件推送到目标主机进行执行。

示例

脚本中有 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 安装软件

# 查看 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:只下载包,不安装

copy 文件拷贝模块「本地到远端」

将控制机的文件或目录拷贝到受控机,并且可以指定目标文件/目录的属性信息。

控制机操作

# 查看 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 校验」,且目标文件属性前后未发生改变,那么就不会进行拷贝。由于目标文件属性未发生改变,所以返回数据颜色为绿色。如下图所示。

Ansible Ad-Hoc与常用模块_第5张图片

Ansible Ad-Hoc与常用模块_第6张图片

2、同一个源文件,如果源文件内容没有任何修改,那么进行第二次相同的操作时,如果源文件和目标文件内容相同「通过 checksum 校验」,但目标文件属性前后要求发生改变「属主、属组、权限」,那样也不会进行拷贝。但由于目标文件属性发生改变,所以返回数据颜色为黄色。

fetch 文件拷贝模块「远端到本地」

该模块功能类似于 copy 模块,但是是反向的。将远端的文件拷贝到本地。备注:当前仅支持文件,暂不支持递归拷贝。

由于ansible使用的是 yun 用户,因此从远端拷贝过来的文件属主、属组都是 yun。

控制机操作

# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例,知晓如何使用」
[yun@ansi-manager ansible_info]$ ansible-doc fetch 
# 由于我们使用的是 yun 普通用户
# 因此有时需要使用 -b 选择进行提权

被控端文件准备1

[test1@ansi-hapr

你可能感兴趣的:(自动化,ansible,linux,linux,centos,运维,ansible,自动化)