Ansible 模块命令讲解、剧本
原文链接:https://blog.csdn.net/MssGuo/article/details/125794132
Ansible 的颜色
Ansible 的返回结果非常友好,一般会用三种颜色来表示执行结果:
颜色 | 是否成功 | 说明 |
---|---|---|
绿色 | 成功 | 没有对目标机器做修改 |
橘黄色 | 成功 | 执行后目标机器有状态变化 |
红色 | 失败 | 执行过程出现异常 |
Ansible 语法
1 | ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD] |
1 | -i :指定主机清单,不指定默认是 /etc/ansible/hosts; |
演示示例:
1 | # 查看 /etc/ansible/hosts 主机清单的 node 组有哪些主机 |
Ansible 的 Host-pattern
all: 表示主机清单所有的主机,如下所示:
1 | # all 表示主机清单所有的主机 |
指定主机清单的某个组,如指定 node 组,如下所示:
1 | # 指定 node 组 |
指定主机清单的某个主机 IP,如下所示:
1 | # 指定主机清单里面的 192.168.118.132 这台受控主机 |
*使用通配符模糊匹配组,如下所示:
1 | # 模糊匹配带有 web 后缀的组 |
或关系,表示在 A 组或 B 组中的主机,如下所示:
1 | # 表示在 node 组或 web 组中的主机 |
逻辑与:表示同时在 A 组和 B 组中的主机,如下所示:
1 | # 同时在 node 组和 web 组中的主机 |
逻辑非:表示在 A 组,但不在 B 组中的主机,如下所示:
1 | # 同时在 node 组但不在 web 组中的主机 |
综合逻辑:可以把上面的逻辑组合起来形成综合逻辑,如下所示:
1 | # 表示在 web 组或 node 组同时又在 redis 组但不在 db 组中的主机 |
正则表达式:
1 | # 表示匹配以 web 或 node 开头 servers 结尾的组中的主机 |
file 模块
作用:主要用于在目标受控主机上创建文件,目录,删除文件等操作。
参数:
1 | path:指定路径,path 的别名是 dest, name |
1 | # 查看 file 模块帮助文档 |
copy 模块
作用:主要用于复制 ansible
主控端的文件到受控端上
1 | # 查看 copy 模块帮助文档 |
fetch 模块
作用:从远程主机上抓取文件到主控端上。fetch
模块功能与 copy
模块功能整好相反。
1 | # 从远程主机上抓取 /var/log/messages 文件到 /root/logs/ 目录下 |
1 | # 抓取后的文件,其实是用主机地址为目录做了区分,同时被抓取的文件连同绝对路径也一起抓取过来了,如下所示: |
cron 模块
作用:添加、删除 Linux
的定时计划任务。
参数:
1 | name :指定计划任务的名称; |
1 | # 每十分钟执行 |
user 模块
作用:主要用于用户信息管理,包括用户创建,密码修改,组等基本操作。
1 | # 查看 `user` 模块的帮助文档 |
yum 模块
作用:yum
模块主要用于包管理,如安装、升级、卸载包等操作。
1 | # 更新 nginx,state 参数:present、installed 都可以表示安装,latest 表示更新、removed、absent 表示卸载 |
service 模块
作用:用于管理服务,包括启动服务,停止服务,设置服务开机自启等操作。
1 | # 查看 service 模块的帮助文档 |
setup 模块
作用:收集指定目标受控主机的基本信息
1 | # 查看 setup 模块帮助文档 |
command 模块
作用:command
模块用于执行一些简单的命令,command
不能识别特殊字符,使用 shell
模块能识别特殊字符。
1 | # 查看 command 模快帮助文档 |
shell 模块
作用:shell模块能实现平时Linux全部操作,即shell模块能实现上面所讲的各个模块全部功能。
1 | # 查看 shell 帮助文档 |
playbook 剧本
ansible-playbook 命令常用参数:
1 | --list-hosts :列出剧本的主机 |
palybook 特性:
1 | # 号表注释 |
编写一个 playbook
剧本,剧本是以 yaml
格式语法进行编写的,并在 ansible
服务器上创建一个 /root/httpd.conf
配置文件,端口是 8000,然编写剧本,如下:
1 | vim install_httpd.yaml |
1 | --- |
1 | # 剧本语法检查,没有报错输出说明剧本语法 ok |
我们修改本地的 /root/httpd.conf 文件端口为 8111。然后重新执行 ansible-playbook install_httpd.yaml,如下:
1 | # 修改 /root/httpd.conf 文件端口为 8111,然后重新执行剧本 |
handlers 的使用
细心的网友会发现问题所在,我们的剧本中,当文件发生改变了,copy
会重新复制 httpd.conf
文件到远程主机,但是 httpd
服务并没有重启,如果在剧本后面写上重启 httpd
视乎是可行的,但是每执行一次剧本都重启一次 httpd
服务,视乎有点不合理。此时,我们引入一个 handlers
来监听某个事件然后触发某种操作,如下所示:
1 | vim install_httpd.yaml |
1 | --- |
1 | # 修改端口为 8222 |
tags 的使用
tags
其实相当于一个标签,在为某个 tasks
打上一个 tags
,然后执行剧本时可以指定 tags
名字,这样就能单独执行 tags
那行的任务,如下所示:
1 | vim install_httpd.yaml |
1 | --- |
1 | # 列出剧本有哪些 tags |
ansible-vault 加密 yaml 文件
ansible-vault
命令主要用于加密 yaml
文件,当我们的 yaml
文件有敏感信息时,可以使用使用 ansible-vault
命令加密 yaml
文件,加密过的 yaml
文件,直接 cat
vim
看到的会是一串乱码,所以还是要使用 ansible-vault
命令进行编辑,查看,解密等操作。
注意:加密后的 yaml
文件,需要解密后才能正常执行。
常用参数:
1 | encrypt :加密文件 |
1 | # 创建一个秘文,创建的时候需要输入密码,然后 ansible 就直接打开文件可以写剧本了 |
vars 的使用
剧本中可以定义变量,变量的定义使用 vars 定义,变量的引用使用 {{ variable }}
,中间有空格,如下所示:
1 | cat install_soft.yaml |
1 | --- |
1 | # 如果基本里面没有定义变量,也没有给变量赋值,那么可以在命令行使用 -e 参数给变量赋值,如下: |