ansible 执行结果信息 - 各颜色说明; ansible Ad-Hoc 说明; ansible 如何查看帮助文档与常用模块详解
主机规划
添加用户账号
说明:
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 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
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 校验」, 且目标文件属性前后未发生改变, 那么就不会进行拷贝. 由于目标文件属性未发生改变, 所以返回数据颜色为绿色. 如下图所示.
2, 同一个源文件, 如果源文件内容没有任何修改, 那么进行第二次相同的操作时, 如果源文件和目标文件内容相同「通过 checksum 校验」, 但目标文件属性前后要求发生改变「属主, 属组, 权限」, 那样也不会进行拷贝. 但由于目标文件属性发生改变, 所以返回数据颜色为黄色.
fetch 文件拷贝模块「远端到本地」
该模块功能类似于 copy 模块, 但是是反向的. 将远端的文件拷贝到本地. 备注: 当前仅支持文件, 暂不支持递归拷贝.
由于 ansible 使用的是 yun 用户, 因此从远端拷贝过来的文件属主, 属组都是 yun.
控制机操作
- # 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」
- [yun@ansi-manager ansible_info]$ ansible-doc fetch
- # 由于我们使用的是 yun 普通用户
- # 因此有时需要使用 -b 选择进行提权
被控端文件准备 1
- [test1@ansi-haproxy01 tmp]$ ll /tmp/test1
- -rw-rw-r-- 1 test1 test1 20 Nov 2 11:04 /tmp/test1
- [test1@ansi-haproxy01 tmp]$ cat /tmp/test1
- 111
- 222
- 333
- aaa
- bbb
被控端文件准备 2
- [test1@ansi-haproxy02 tmp]$ ll /tmp/test1
- -rw-rw-r-- 1 test1 test1 20 Nov 2 11:04 /tmp/test1
- [test1@ansi-haproxy02 tmp]$ cat /tmp/test1
- 1111
拷贝方式 1
[yun@ansi-manager ansible_info]$ ansible 172.16.1.181 -b -m fetch -a "src=/tmp/test1 dest=/tmp/" -i ./hosts_key # 拷贝 172.16.1.181 主机的
或者
- [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m fetch -a "src=/tmp/test1 dest=/tmp/" -i ./hosts_key # 拷贝 proxyservers 主机组的
- ## 查看拷贝结果「注意目录层次」
- [yun@ansi-manager ansible_info]$ ll /tmp/
- total 4
- drwxrwxr-x 3 yun yun 17 Nov 2 11:21 172.16.1.181
- drwxrwxr-x 3 yun yun 17 Nov 2 11:23 172.16.1.182
- [yun@ansi-manager ansible_info]$ tree /tmp/172.16.1.18*
- /tmp/172.16.1.181
└── tmp
└── test1
/tmp/172.16.1.182
└── tmp
└── test1
- 2 directories, 2 files
拷贝方式 2
- # 如果使用 flat=yes, 那么最好只拷贝一台远端主机的文件, 如果是多台那么后面执行的结果, 会把前面的覆盖掉.
- # dest 路径有 / 结尾
- [yun@ansi-manager ansible_info]$ ansible 172.16.1.181 -b -m fetch -a "src=/tmp/test1 dest=/tmp/kkk2/ flat=yes" -i ./hosts_key # 推荐, 只拷贝一台
- # dest 路径无 / 结尾
- [yun@ansi-manager ansible_info]$ ansible 172.16.1.181 -b -m fetch -a "src=/tmp/test1 dest=/tmp/kkk flat=yes" -i ./hosts_key # 推荐, 只拷贝一台
- [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m fetch -a "src=/tmp/test1 dest=/tmp/kkk flat=yes" -i ./hosts_key # 不推荐, 会产生覆盖
- ## 查看拷贝结果
- [yun@ansi-manager ansible_info]$ cat /tmp/kkk2/test1
- 111
- 222
- 333
- aaa
- bbb
- [yun@ansi-manager ansible_info]$ ll /tmp/kkk
- -rw-rw-r-- 1 yun yun 20 Nov 2 11:25 /tmp/kkk
- [yun@ansi-manager ansible_info]$ cat /tmp/kkk # 该文件没有 "11111" 信息; 产生了覆盖效应
- 111
- 222
- 333
- aaa
- bbb
相关选项说明:
src: 源文件, 当前仅支持文件, 不支持目录
dest: 推送数据的目标路径, 默认为: dest[路径]/hostname/src[路径]. 参见上面示例
flat: 默认 False. 当为 yes/True 时, 那么拷贝效果类似于本地的 copy.
template 模板使用
该模块功能类似于 copy 模块, 但 copy 模块不支持变量, 不支持模板.
template 模块支持变量, 支持 Jinja 模板. 因此如果生成中的配置文件涉及变量, 那么请使用 template 模块.
涉及到 playbook, 变量和 Jinja , 这些在后面的文章会有详解.
- # 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」
- [yun@ansi-manager ansible_info]$ ansible-doc template
- # 由于我们使用的是 yun 普通用户
- # 因此有时需要使用 -b 选择进行提权
- # palybook
- [yun@ansi-manager ansible_info]$ pwd
- /App/ansible_info
- [yun@ansi-manager ansible_info]$ ll
- total 16
- drwxrwxr-x 2 yun yun 35 Oct 11 11:23 file
- -rw-rw-r-- 1 yun yun 226 Oct 8 16:07 hosts_key
- -rw-rw-r-- 1 yun yun 304 Oct 11 11:40 test_template.YAML
- [yun@ansi-manager ansible_info]$ ll file/ # 涉及的文件
- total 4
- -rw-rw-r-- 1 yun yun 175 Oct 11 11:23 test_template.conf.j2
- [yun@ansi-manager ansible_info]$ cat file/test_template.conf.j2
- # facts 变量
- dns_info={{ ansible_dns['nameservers'][0] }}
- mem_total={{ ansible_memtotal_mb }}
- # 自定义变量
- listen_port={{ listen_port }}
- access_addr={{ access_addr }}
- [yun@ansi-manager ansible_info]$
- [yun@ansi-manager ansible_info]$ cat test_template.YAML # 涉及的 playbook
- ---
- # template 示例
- - hosts: proxyservers
- vars:
- - listen_port: 8080
- - access_addr: zhangblog.com
- tasks:
- - name: "template conf"
- template:
- src: ./file/test_template.conf.j2
- dest: /tmp/test_template.conf
- owner: root
- group: yun
- mode: '0600'
- [yun@ansi-manager ansible_info]$ ansible-playbook -b -i ./hosts_key test_template.YAML # 执行
目标机器查看
- [root@ansi-haproxy01 tmp]# pwd
- /tmp
- [root@ansi-haproxy01 tmp]# cat test_template.conf
- # facts 变量
- dns_info=223.5.5.5
- mem_total=1821
- # 自定义变量
- listen_port=8080
- access_addr=zhangblog.com
相关选项说明:
src: 源文件「可以是绝对路径或相对路径」
dest: 推送数据的目标路径或目标文件
owner: 指定远端文件的属主
group: 指定远端文件的属组
mode: 指定远端文件的权限
backup: 如果推送的目标文件存在且与源文件内容不同, 那么会对目标文件进行备份
file 文件配置模块
在受控机创建文件或目录, 或修改属性信息「如: 属主, 属组, 权限」
- # 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」
- [yun@ansi-manager ansible_info]$ ansible-doc file
- # 由于我们使用的是 yun 普通用户
- # 因此有时需要使用 -b 选择进行提权
- ## 在受控机改变目标文件的属性[该文件是已存在的]
- [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/yum_test.sh owner=yun group=yun mode=0600" -i ./hosts_key
- ## 在受控机创建软连接
- [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "src=/tmp/yum_test.sh dest=/tmp/yum_link.sh owner=yun group=yun state=link" -i ./hosts_key
- ## 在受控机创建硬链接
- [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "src=/tmp/yum_test.sh dest=/tmp/yum_hard.sh owner=yun group=root state=hard" -i ./hosts_key
- ## 在受控机, 如果目标文件不存在则创建
- [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/dest_file owner=yun group=yun state=touch" -i ./hosts_key
- ## 在控制机, 如果目标目录不存在则创建「可创建多级目录」
- [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/desc_dir/aaa/bbb owner=yun group=root mode=700 state=directory" -i ./hosts_key
- ## 在控制机, 改变目标目录和目录下所有目录或文件的属性信息「递归修改」
- [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/desc_dir owner=yun group=zhang mode=766 state=directory recurse=yes" -i ./hosts_key
- ## 在受控机, 如果目标文件或目录存在, 则删除「慎用!!!」
- [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/desc_dir state=absent" -i ./hosts_key
相关选项说明:
path: 指定目标文件或目录
owner: 指定目标文件的属主
group: 指定目标文件的属组
mode: 指定目标文件的权限
state: 状态说明
file: 默认值, 指定文件
link: 创建软连接
hard: 创建硬链接
touch: 如果文件不存在则创建
directory: 如果目录不存在则创建
absent: 如果目标文件或目录存在, 则删除「慎用!!!」
recurse: 递归授权
lineinfile 行编辑模块
此模块确保文件中有特定的行, 或者使用反向引用的正则表达式替换现有的行. 当您只想更改文件中的一行时, 这非常有用.
如果您想要更改多个相似的行, 请查看 [replace] 模块. 如果你想要插入 / 更新 / 删除文件中的一个行块, 请查看 [blockinfile] 模块. 对于其他情况, 请参见 [copy] 或[template]模块.
数据文件准备
- [yun@ansi-manager tmp]$ cat /tmp/lineinfile_test
- # disabled - No SELinux policy is loaded.
- SELINUX=disabled1
- # disabled - No SELinux policy is loaded.
- SELINUX=disabled2
- # disabled - No SELinux policy is loaded.
- SELINUX=disabled3
- # SELINUXTYPE= can take one of three two values:
- # httpd listen port
- Listen 80
- # 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」
- [yun@ansi-manager ansible_info]$ ansible-doc lineinfile
- # 由于我们使用的是 yun 普通用户
- # 因此有时需要使用 -b 选择进行提权
行插入
- # 如果文件中没有 line 中的字符串, 那么就追加在文件末尾; 有则不作任何操作.
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test line='# who are you?'" -i ./hosts_key
- # 首先保证 line 中的字符串在文件中没有, 如果有则不会添加
- # 其次会使用 insertafter 中的正则规则进行正则匹配, 匹配成功则在最后一次匹配行后面插入 line, 如果没匹配成功则在文件末尾插入
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertafter='SELINUX'line='insertafter test1'" -i ./hosts_key
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertafter='SELINUXXX'line='insertafter test2'" -i ./hosts_key
- # 首先保证 line 中的字符串在文件中没有, 如果有则不会添加
- # 其次会使用 insertbefore 中的正则规则进行正则匹配, 匹配成功则在最后一次匹配行前面插入 line, 如果没匹配成功则在文件末尾插入
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertbefore='SELINUX'line='insertbefore test1'" -i ./hosts_key
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertbefore='SELINUXXX'line='insertbefore test2'" -i ./hosts_key
行替换
- # state=present 时, 如果多次匹配, 那么最后一次匹配会被修改; 如果没有匹配成功则在文件末尾追加, 不管 line 是否存在.
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test regexp='^SELINUX='line='SELINUX=enforcing'" -i ./hosts_key
- # state=present 时, 如果多次匹配, 那么最后一次匹配会被修改; 如果没有匹配成功则文件保持不变, 使用 backrefs=yes.
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test regexp='^ELINUX='line='SELINUX=enforcing'backrefs=yes" -i ./hosts_key
行删除
- # state=absent 时, 如果多次匹配, 那么每一次匹配都会删除匹配行
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test regexp='^SELINUX='state=absent" -i ./hosts_key
- # 根据 line 匹配, 如果匹配则删除匹配行
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test line='# httpd listen port'state=absent" -i ./hosts_key
相关选项说明:
path: 要修改的文件.
line: 与 state=present 配合使用; 在文件中要插入或者替换的行.
state: 状态说明
present: 添加或修改, 默认值
absent: 删除
backrefs: 与 state=present 配合使用; 如果设置了 line 可以包含反向引用(位置和命名), 当'regexp'匹配, 就会填充反向引用.
这个参数稍微改变了模块的操作;'insertbefore' 和'insertafter' 将被忽略, 如果'regexp' 与文件中的任何地方不匹配, 文件将保持不变.
regexp: 对文件的每行进行正则匹配; 对于 state=present 只有最后的一次行匹配会被替换; 对于 state=absent 只要匹配就会删除该行.
backup: 对源文件备份. 默认: False
create: 与 state=present 配合使用; 如果不存在则创建文件. 默认: False
insertafter: 与 state=present 配合使用; 在匹配行后插入. 使用正则表达式, 在指定正则表达式的最后一次匹配之后插入该行. 如果需要第一个匹配, 则使用(firstmatch=yes).
如果没有匹配成功, 那么会在文件末尾处插入. 优先级低于 regexp.
insertbefore: 与 state=present 配合使用; 在匹配行前插入. 使用正则表达式, 在指定正则表达式的最后一次匹配之前插入该行. 如果需要第一个匹配, 则使用(firstmatch=yes).
如果没有匹配成功, 那么会在文件末尾处插入. 优先级低于 regexp.
firstmatch: 与 insertafter 或 insertbefore 配合使用; 在 insertafter 或 insertbefore 的首次正则匹配. 默认: False
owner: 指定远端文件的属主
group: 指定远端文件的属组
mode: 指定远端文件的权限
blockinfile 多行编辑模块
该模块可以帮助我们在指定的文件中插入 "一段文本", 这段文本是被标记过的.
换句话说就是, 我们在这段文本上做了记号, 以便在以后的操作中可以通过 "标记" 找到这段文本, 然后修改或者删除它
- # 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」
- [yun@ansi-manager ansible_info]$ ansible-doc blockinfile
- # 由于我们使用的是 yun 普通用户
- # 因此有时需要使用 -b 选择进行提权
对不存在的文件进行 -- 多行插入与修改
- # /tmp/blockinfile_test 文件是不存在的, 因此使用了 create 选项
- # 插入 / 修改 如果没有则插入, 如果之前有信息则修改
- ##### 这里之前没有, 则是创建文件并[插入] 信息
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m blockinfile -a 'path=/tmp/blockinfile_test block="Match User ansible-agent\nPasswordAuthentication no"create=yes' -i ./hosts_key
- [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test # 查看文件信息
- # BEGIN ANSIBLE MANAGED BLOCK
- Match User ansible-agent
- PasswordAuthentication no
- # END ANSIBLE MANAGED BLOCK
- ##### 文件已存在, mark 标记已存在, 这里是[修改]
- [yun@ansi-manager ansible_info]$ ansible manageservers -b -m blockinfile -a 'path=/tmp/blockinfile_test block="iface eth0 inet static\n address 192.0.2.23\n netmask 255.255.255.0"create=yes' -i ./hosts_key
- [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test # 查看文件信息
- # BEGIN ANSIBLE MANAGED BLOCK
- iface eth0 .NET static
- address 192.0.2.23
- netmask 255.255.255.0
- # END ANSIBLE MANAGED BLOCK
对已存在的文件进行 -- 多行插入与修改
[root@ansi-manager ansible_info]# cat /tmp/blockinfile_test2 # 查看文件信息
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
- <HTML>
- <head>
- <title>
- blockinfile info
- </title>
- </head>
- <body>
- <h1>
- welcome to here.
- </h1>
- </body>
- </HTML>
- ##### 插入多行标记块信息 这里也使用了 insertafter 选项 [yun@ansi-manager ansible_info]$
- ansible manageservers -b -m blockinfile -a 'path=/tmp/blockinfile_test2
- marker="
- <!-- {mark} ANSIBLE MANAGED BLOCK -->
- "insertafter="
- <body>
- "block="
- <h1>
- Welcome to blockinfile
- </h1>
- \n
- <p>
- Last Login By you!
- </p>
- "' -i ./hosts_key [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test2
- # 查看文件信息
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML> <head> <title> blockinfile info </title> </head> <body> <!-- BEGIN ANSIBLE MANAGED BLOCK --> <h1> Welcome to blockinfile </h1> <p> Last Login By you! </p> <!-- END ANSIBLE MANAGED BLOCK --> <h1> welcome to here. </h1> </body> </HTML> ##### 删除标记块信息 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m blockinfile -a 'path=/tmp/blockinfile_test2 marker=" <!-- {mark} ANSIBLE MANAGED BLOCK --> "block=""' -i ./hosts_key [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test2 # 查看文件信息
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML> <head> <title> blockinfile info </title> </head> <body> <h1> welcome to here. </h1> </body> </HTML>
相关选项说明:
path: 要修改的文件.
block: 要插入标记行内的文本. 如果该选项缺失或是一个空字符串, 该块将被删除, 就像 "state" 被指定为 "absent" .(别名: content)
state: 状态说明
present: 添加或修改, 默认值
absent: 删除
create: 文件不存在则创建. 默认: False
backup: 对源文件备份. 默认: False
insertafter: 在匹配行后插入. 使用正则表达式, 在指定正则表达式的最后一次匹配之后插入该 block.
如果没有匹配成功, 那么会在文件末尾处插入.
insertbefore: 在匹配行前插入. 使用正则表达式, 在指定正则表达式的最后一次匹配之前插入该 block.
如果没有匹配成功, 那么会在文件末尾处插入.
marker: 标记线模板.'{mark}' 将被替换为'in marker_begin' 的值[默认: BEGIN] 和'marker_end' 的值[默认: END]
marker_begin: 开始的标记变量信息. 默认: BEGIN
marker_end: 结尾的标记变量信息. 默认: END
owner: 指定远端文件 / 目录的属主
group: 指定远端文件 / 目录的属组
mode: 指定远端文件 / 目录的权限
ini_file INI 格式配置模块
在一个 INI 的文件中管理 (添加, 删除, 更改) 单独的配置, 而不必使用 [template] 或[assemble]来管理整个文件. 添加不存在的 section.
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc ini_file # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权
添加与修改
# 第一次执行, 如果文件不存在, 默认会创建 添加 section 和 option 信息 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks option=username value=bobe mode='0644'" -i ./hosts_key # 修改 option 信息 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks option=username value=alice" -i ./hosts_key # 添加另外一个 section 信息 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=base_info option=address value='BeiJing'" -i ./hosts_key # 添加一个 option 信息, 还是放在 drinks 这个 section 下 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks option=password value=123456" -i ./hosts_key
删除
# 删除整个 section, 删除 drinks 这个 section [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks state=absent" -i ./hosts_key # 删除指定 section 下的 option [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=base_info option=address state=absent" -i ./hosts_key
相关选项说明:
path:INI 格式文件路径. 如果没有则默认会创建.
section:INI 文件中的 section 名. 当设置单个值时, 如果是'state=present' 则会自动添加这个值. 如果留空或设置为'null','option' 将放在第一个'section' 之前.
如果配置格式不支持 section, 也需要使用 "null".
option: 如果设置(需要更改的 value), 这是选项的名称. 如果添加 / 删除整个 "section", 可以省略. 默认: null
value:option 的值. 删除 "option" 时可以省略.
state: 状态说明
present: 添加或修改, 默认值
absent: 删除
backup: 对源文件备份. 默认: False
create: 如果不存在则创建文件. 默认: True
owner: 指定远端文件的属主
group: 指定远端文件的属组
mode: 指定远端文件的权限
no_extra_spaces: 在 = 符号前后不插入空格. 默认: False
replace 多行替换模块
对文件所匹配的内容进行替换 / 删除.
数据文件准备
[yun@ansi-manager ~]$ cat /tmp/replace_test 172.16.1.181 test1.zhangblog.com 172.16.1.182 test2.zhangblog.org 172.16.1.183 test3.zhangblog.NET # httpd listen port Listen 80 ServerRoot "/etc/httpd" User apache Group apache # 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc replace # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权 # 将 regexp 正则匹配到的行, 替换为 replace 的内容; 且这里使用了反向引用. [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test regexp='(\s+)test\d+\.zhangblog\.(\w+)?$'replace='\1new.host.name.\2'" -i ./hosts_key # 将 after 之后的每行都替换为 replace 中的内容 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test after='# httpd listen port'regexp='^(.+)$'replace='after replace'" -i ./hosts_key # 如果 after 没有匹配完一行, 那么 after 匹配之后未匹配的该行内容也会替换为 replace 中的内容 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test after='# httpd listen'regexp='^(.+)$'replace='# after replace'" -i ./hosts_key # 将 before 之前的每行都替换为 replace 中的内容 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test before='listen port'regexp='^(.+)$'replace='before replace'" -i ./hosts_key # 如果 before 没有匹配完一行, 那么 before 匹配之前未匹配的该行内容也会替换为 replace 中的内容 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test before='listen port'regexp='^(.+)$'replace='before replace'" -i ./hosts_key # 删除匹配内容, 行数不会改变. 如果整行匹配, 则最终为空行. [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test regexp='zhangblog'" -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test regexp='.*test.*'" -i ./hosts_key
相关选项说明:
path: 要操作的文件路径.
after: 如果指定, 只有 after 匹配之后的内容将被替换 / 删除. 可以与 before 组合使用. after 可能匹配一行也可能匹配一行的部分; 且不支持正则匹配.
before: 如果指定, 只有 before 匹配之前的内容将被替换 / 删除. 可以与 after 组合使用. before 可能匹配一行也可能匹配一行的部分; 不支持正则匹配.
regexp: 要在文件内容中查找的正则表达式.
replace: 替换 regexp 匹配项的字符串. 可能包含反向引用, 如果 regexp 匹配, 将使用 regexp 捕获组展开这些反向引用. 如果没有设置, 则完全删除匹配项.
反向引用可以像 '\1' 那样含糊地使用, 也可以像 '\g<1>' 那样显式地使用.
backup: 对源文件备份. 默认: False
encoding: 用于读写文件的字符编码. 默认: utf-8
owner: 指定远端文件的属主
group: 指定远端文件的属组
mode: 指定远端文件的权限
sysctl 修改内核参数模块
这个模块操作 sysctl 条目, 并在更改它们之后可选地执行 /sbin/sysctl -p .
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc sysctl # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权 # 会修改 /etc/sysctl.conf 文件并执行 /sbin/sysctl -p 使其生效 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m sysctl -a 'name=net.ipv4.ip_forward value=1' -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible manageservers -b -m sysctl -a 'name=vm.swappiness value=5' -i ./hosts_key
相关选项说明:
name: 内核参数变量名.(别名: key)
value:sysctl 键的期望值.(别名: val)
reload: 当为 yes 时, 如果 sysctl_file 文件被修改, 那么会执行 /sbin/sysctl -p, 使修改的参数生效. 当为 no 时, 则不重载 sysctl , 尽管 sysctl_file 已被修改.
state: 状态说明
present: 添加或修改, 默认值
absent: 删除
sysctl_file: 指定 sysctl.conf 文件的绝对路径. 默认:/etc/sysctl.conf
sysctl_set: 使用 sysctl 命令验证令牌值, 必要时使用 -w 进行设置. 默认: no
ignoreerrors: 使用此选项可忽略关于未知键的错误. 默认: no
get_url 文件下载模块
通过 HTTP,HTTPS 或 FTP 下载一个文件.
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc get_url ## 下载一个文件 [yun@ansi-manager ansible_info]$ ansible proxyservers -m get_url -a "url='http://www.zhangblog.com/uploads/jvm/jvm-01-01.png'dest=/tmp/ mode=0640" -i ./hosts_key ## 下载前会比对校验和, 如果不匹配则不下载 [yun@ansi-manager ansible_info]$ ansible proxyservers -m get_url -a "url='http://www.zhangblog.com/uploads/jvm/jvm-01-01.png'dest=/tmp/jvm-001.png checksum='md5:9af3f6066ea46ea81c0b3c9d719dbce0'" -i ./hosts_key
相关选项说明:
mode: 指定目标文件的权限
url: 指定文件来源「支持 HTTP,HTTPS 和 FTP」
dest: 指定目标存放的目录或文件
checksum: 校验和「支持 sha256 和 md5」
timeout: 请求超时时间, 默认 10 秒.
owner: 指定远端文件的属主
group: 指定远端文件的属组
mode: 指定远端文件的权限
backup: 源文件备份
service,systemd 服务管理模块
如果在 CentOS 6 及以下版本, 优先使用 service .
如果在 CentOS 7 及以上版本, 优先使用 systemd .
这里考虑到我们使用的 CentOS 7, 因此使用的是 systemd . 至于 service 请自行查看文档.
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc service [yun@ansi-manager ansible_info]$ ansible-doc systemd # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权 ## 启动 httpd 服务, 并且加入开机自启动 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=httpd state=started enabled=yes" -i ./hosts_key ## 重启 httpd 服务, 并且重新加载 /usr/lib/systemd/system/httpd.service 服务配置文件, 且加入开机自启动 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=httpd state=restarted daemon_reload=yes enabled=yes" -i ./hosts_key ## 停止 httpd 服务, 并且不加入开机自启动 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=httpd state=stopped enabled=no" -i ./hosts_key
相关选项说明:
name: 服务名称
state: 服务状态
started: 启动服务
stopped: 停止服务
reloaded: 重加载服务
restarted: 重启动服务
enabled: 是否加入开机自启动「yes 加入, no 不加入, 默认 null」
daemon_reload: 当我们修改了服务管理配置文件, 是否重加载其配置「yes 重加载服务配置文件, no 不加载, 默认值」
group 组模块
创建或删除用户组
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc group # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权 ## 创建 test 组, 并指定组 ID [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m group -a "name=test gid=9001" -i ./hosts_key ## 创建 testsystem 组, 并指定为系统组 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m group -a "name=testsystem system=true" -i ./hosts_key ## 删除 testsystem 组 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m group -a "name=testsystem state=absent" -i ./hosts_key
相关选项说明:
gid: 指定组 ID, 默认 null
name: 指定组名称
state: 组状态
present: 创建组, 默认
absent: 删除组
system: 是否为系统组
true: 是系统组
false: 不是系统组
user 用户模块
创建或删除用户
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc user # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权
1, 创建用户, 指定 UID, 指定附加组, 不创建家目录, 不可以登录
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m user -a "name=zhangtest uid=1005 groups=zhang,yun create_home=no shell=/sbin/nologin" -i ./hosts_key
受控机查看信息
[yun@ansi-haproxy02 ~]$ id zhangtest uid=1005(zhangtest) gid=1005(zhangtest) groups=1005(zhangtest),1000(zhang),1050(yun) [yun@ansi-haproxy02 ~]$ tail -n1 /etc/passwd zhangtest:x:1005:1005::/home/zhangtest:/sbin/nologin # /home/zhangtest 该目录不存在
2, 删除用户, 但不删除用户的家目录
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m user -a "name=zhangtest state=absent" -i ./hosts_key
3, 为用户创建密码或 SSH key 秘钥
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m user -a "name=zhangtest2 generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa" -i ./hosts_key
4, 为用户创建密码
# 得到密码串 [yun@ansi-manager ansible_info]$ ansible localhost -m debug -a "msg={{'123456'| password_hash('sha512','salt') }}" localhost | SUCCESS => { "msg": "$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w.igcOo1R7vBYR65JquIQ/7siC7VRpmteKvZmfSkNc69." } ## 注意 -a '' 是单引号, 而不是双引号. 如果使用双引号, 特殊字符会被解析 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m user -a 'name=zhangtest2 password=$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w.igcOo1R7vBYR65JquIQ/7siC7VRpmteKvZmfSkNc69.' -i ./hosts_key
相关选项说明:
name: 用户名称
state: 用户状态
present: 默认值, 创建用户
absent: 删除用户
password: 用户密码, 默认: null
shell: 设置用户的 shell
uid: 指定用户 UID
group: 设置用户主组, 默认: null
groups: 设置用户附加组, 默认: null
system: 如果为 yes 则创建系统用户, 默认: false
home: 设置用户家目录
create_home: 是否创建家目录, 默认: true, 如果不创建为: no
comment: 用户描述, 默认: null
expires: 用户账号失效日期, 默认: null
update_password: 更新密码
always: 如果密码不同, 则更新, 默认值
on_create: 只有新建用户时使用
remove: 只有在 state=absent 时生效, 作用: 删除用户家目录
generate_ssh_key: 是否生成 SSH key 密钥对, 默认: false
ssh_key_bits: 设置 SSH key 字节长度, 默认: 有 SSH-keygen 设置
ssh_key_comment: 设置 SSH key 的描述, 默认为:$HOSTNAME
ssh_key_file: 指定 SSH key 的文件名, 默认: null [即为:.SSH/id_rsa]
ssh_key_passphrase: 指定 SSH key 密码, 如果不提供则没有密码, 默认: null
ssh_key_type: 设置 SSH key 类型, 默认: rsa
cron 定时任务模块
创建, 注释或删除定时任务
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc cron # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权 ## 创建定时任务, name 为定时任务说明 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m cron -a 'name="crond test"minute=0 hour="2,5"job="ls /tmp>/dev/null 2>&1"' -i ./hosts_key ## 注释指定定时任务, 其中 name , 时间参数, 和 job 都需要. [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m cron -a 'name="crond test"minute=0 hour="2,5"job="ls /tmp>/dev/null 2>&1"disabled=true' -i ./hosts_key ## 删除定时任务 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m cron -a 'name="crond test"state=absent' -i ./hosts_key
相关选项说明:
name: 定时任务描述
state: 状态
present: 添加, 默认值
absent: 删除
user: 指定哪个用户的定时任务会修改, 默认是 root 用户, 默认: null
minute: 哪个分钟执行 ( 0-59, *, */2, etc ), 默认:*
hour: 哪个小时执行 ( 0-23, *, */2, etc ), 默认 *
day: 每月的哪天执行 ( 1-31, *, */2, 等 ), 默认:*
month: 哪个月执行 ( 1-12, *, */2, etc ), 默认:*
weekday: 每周的哪天执行 ( 0-6 为 Sunday-Saturday, *, etc ), 默认:*
disabled: 是否注释指定定时任务, 默认: false
job: 定时任务要操作的具体信息
mount 文件系统挂载模块
文件系统的挂载与取消.
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc mount # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权
案例示例:
在 ansi-manager 机器作为 NFS 的服务端, ansi-haproxy01,ansi-haproxy02 作为 NFS 的客户端.
1, 在所有机器安装 NFS 必要的包
[yun@ansi-manager ansible_info]$ ansible manageservers,proxyservers -b -m yum -a "name=nfs-utils,rpcbind state=present" -i ./hosts_key
2,NFS 服务端配置与启动
[yun@ansi-manager ansible_info]$ ansible manageservers -b -m copy -a 'content="/data 172.16.1.0/24(rw,sync,root_squash,all_squash)\n"dest=/etc/exports' -i ./hosts_key # 创建 /data 目录, 属主, 属组为 nfsnobody [yun@ansi-manager ansible_info]$ ansible manageservers -b -m file -a "path=/data owner=nfsnobody group=nfsnobody state=directory" -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible manageservers -b -m systemd -a "name=rpcbind state=started enabled=yes" -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible manageservers -b -m systemd -a "name=nfs state=started enabled=yes" -i ./hosts_key ## 查看 Export list 信息 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m shell -a "showmount -e" -i ./hosts_key
3,NFS 客户端操作
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=rpcbind state=started enabled=yes" -i ./hosts_key ## 检查共享信息 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m shell -a "showmount -e 172.16.1.180" -i ./hosts_key
4,NFS 客户端挂载
## 不挂载设备, 仅在 /etc/fstab 中写入挂载配置信息 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=172.16.1.180:/data path=/mnt fstype=nfs state=present backup=yes" -i ./hosts_key ## 挂载设备, 并在 /etc/fstab 中写入挂载配置信息 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=172.16.1.180:/data path=/mnt fstype=nfs state=mounted" -i ./hosts_key ## 不卸载设备, 仅在 /etc/fstab 中删除挂载配置信息 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=172.16.1.180:/data path=/mnt fstype=nfs state=unmounted" -i ./hosts_key ## 卸载设备, 并在 /etc/fstab 中删除挂载配置信息 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=172.16.1.180:/data path=/mnt fstype=nfs state=absent" -i ./hosts_key
相关选项说明:
src: 要挂在的设备 / 磁盘
path: 挂载点
opts: 挂载参数选项, 如: ro,noauto; 默认: null
fstype: 文件系统类型
state: 状态
present: 不挂载设备, 仅在 /etc/fstab 中写入挂载配置信息
mounted: 挂载设备, 并在 /etc/fstab 中写入挂载配置信息
unmounted: 不卸载设备, 仅在 /etc/fstab 中删除挂载配置信息
absent: 卸载设备, 并在 /etc/fstab 中删除挂载配置信息
backup: 对之前的文件备份
debug 调试模块与 register 变量
这里会使用 playbook 书写. 具体的 playbook 详解, 参见后面的文章.
涉及到 playbook, 变量和 Jinja , 这些在后面的文章会有详解.
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc debug # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权 # Ad-Hoc 方式 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m debug -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m debug -a 'msg="print customized message"' -i ./hosts_key ################################################## # Playbooks 方式 [yun@ansi-manager ansible_info]$ pwd /App/ansible_info [yun@ansi-manager ansible_info]$ ll total 24 -rw-rw-r-- 1 yun yun 483 Aug 18 09:12 hosts_key -rw-rw-r-- 1 yun yun 245 Aug 18 21:55 test_debug_register.YAML [yun@ansi-manager ansible_info]$ cat test_debug_register.YAML --- # 如何使用 debug 模块与 register 变量 - hosts: proxyservers tasks: - name: "get host port info" shell: netstat -lntp register: host_port - name: "print host port" debug: #msg: "{{ host_port }}" # 输出全部信息 #msg: "{{ host_port.cmd }}" # 引用方式一 msg: "{{ host_port['stdout_lines'] }}" # 引用方式二 [yun@ansi-manager ansible_info]$ ansible-playbook -b -i ./hosts_key test_debug_register.YAML
第一个 task 中, 使用了 register 注册变量, 名为 host_port ; 当 shell 模块执行完毕后, 会将数据放到该变量中.
第二给 task 中, 使用了 debug 模块, 并从 host_port 中获取数据.
assert 断言模块[了解]
对自定义消息断言.
涉及到 playbook, 变量和 Jinja , 这些在后面的文章会有详解.
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc assert # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权 # Ad-Hoc 方式 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 == 3'success_msg=ok fail_msg=fail" -i ./hosts_key # 断言失败 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 <= 3'success_msg=ok fail_msg=fail" -i ./hosts_key # 断言成功 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 <3'success_msg=ok fail_msg=fail" -i ./hosts_key # 断言成功 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 < 3 and 4 == 4'success_msg=ok fail_msg=fail quiet=yes" -i ./hosts_key # 断言成功 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 < 3 and 4> 4'success_msg=ok fail_msg=fail quiet=yes" -i ./hosts_key # 断言失败 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='3 <3 or 4 == 4'success_msg=ok fail_msg=fail quiet=yes" -i ./hosts_key # 断言成功 ################################################## # Playbooks 方式 [yun@ansi-manager ansible_info]$ pwd /App/ansible_info [yun@ansi-manager ansible_info]$ ll total 12 -rw-rw-r-- 1 yun yun 226 Oct 8 16:07 hosts_key -rw-rw-r-- 1 yun yun 902 Oct 11 10:57 test_assert.YAML [yun@ansi-manager ansible_info]$ cat test_assert.YAML # playbook 信息 --- # assert 示例 - hosts: proxyservers # 使用如下变量, 分别测试下 vars: #- my_param: 20 #- my_param: -2 - my_param: 200 tasks: - name: "assert example 1" assert: # ansible_os_family 为 facts 中的变量信息 that: - ansible_os_family == "RedHat" success_msg: "success info" fail_msg: "fail info" - name: "assert example 2" assert: # that 下面的列表, 为 && 关系 that: - my_param>= 0 - my_param <= 100 fail_msg: "'my_param' must be between 0 and 100" success_msg:"success info" # 是否忽略该 task 的错误 ignore_errors: True - name: "assert example 3" assert: that: - my_param <= 10 or my_param>= 100 fail_msg: "'my_param' must be <= 10 or>= 100" success_msg:"success info" [yun@ansi-manager ansible_info]$ ansible-playbook -b -i ./hosts_key test_assert.YAML # 执行
相关选项说明:
that: 列表字符串表达式
success_msg: 当断言成功时输出的信息
fail_msg: 别名 msg, 当断言失败时输出的信息
quiet: 默认 False, 设置为 yes 避免冗长输出
selinux 安全模块
配置 SELinux .
# 查看 yum 模块方法「可优先查看 EXAMPLES 信息的使用案例, 知晓如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc selinux # 由于我们使用的是 yun 普通用户 # 因此有时需要使用 -b 选择进行提权 ## 关闭 selinux [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m selinux -a "state=disabled" -i ./hosts_key
相关选项说明:
state: 状态
disabled: 不可用
enforcing: 强制执行
permissive: 会提醒
---END---
如果觉得不错就关注下呗 (-^O^-) !
来源: https://www.cnblogs.com/zhanglianghhh/p/12525566.html