ansible 常用模块(一)
ansible 命令:ansible -i inventory文件 主机/组名 -e key=value -m 模块 -a '模块参数'
选项说明
-i inventory文件: 是可选参数。默认读取/etc/ansible/hosts文件。主机/组名: 需要存在inventory文件中-m 模块: 可选参数。默认是command-a '模块参数': 模块需要传的参数-e key=value:可选参数,是设置变量
输出颜色说明:
- 绿色:执行成功,没有改变内容
- 黄色:执行成功,有修改内容
- 红色:执行报错
- 紫色(粉红色):告警,但不影响执行
命令执行模块
command
在目标上执行命令
$ ansible -i ./hosts local -m command -a 'whoami'
192.168.32.166 | CHANGED | rc=0 >>
ops
$ ansible -i ./hosts local -a 'whoami'
192.168.32.166 | CHANGED | rc=0 >>
ops
注意:命令含有
$HOSTNAME*,<,>,|,;和&等字符串会有意向不到的问题。
shell
在目标上执行 shell 命令
$ ansible -i ./hosts local -m shell -a 'cat /etc/passwd | grep ops'
192.168.32.166 | CHANGED | rc=0 >>
ops:x:1000:1000::/home/ops:/bin/bash
script
传输后在远程节点上运行本地脚本
$ cat ~/test.sh
echo "第一个参数: $1"
$ ansible -i hosts local -m script -a "~/test.sh jiaxzeng"
192.168.32.166 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.32.166 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.32.166 closed."
],
"stdout": "\r\n第一个参数: jiaxzeng\r\n",
"stdout_lines": [
"",
"第一个参数: jiaxzeng"
]
}
文件
file
管理文件和文件属性
| 参数 | 含义 |
|---|---|
| path(required) | 管理的文件的路径,别名:dest, name |
| state | absent, directory, file, link, touch。默认是file |
| src | 要链接到的文件的路径(软连接) |
| owner | 文件或目录的所有者 |
| group | 文件或目录的组所有者 |
| mode | 文件或目录的权限 |
# 1. 创建目录
$ ansible -i hosts local -m file -a 'path=/tmp/test state=directory'
# 2. 创建/tmp/test/test.txt文件,所有者和所有者组都设置为ops。权限设置为600
$ ansible -i hosts local -m file -a 'path=/tmp/test/test.txt owner=ops group=ops mode=600 state=touch'
# 3. 删除目录
$ ansible -i hosts local -m file -a 'path=/tmp/test state=absent'
# 4. 将/etc/hosts软连接到/tmp/hosts-link
$ ansible -i hosts local -m file -a 'path=/tmp/hosts_link src=/etc/hosts state=link'
copy
将文件复制到远程位置
| 参数 | 含义 |
|---|---|
| dest(required) | 文件应复制到的远程绝对路径 |
| src | 要复制到远程服务器的文件的本地路径。这可以是绝对的或相对的。如果path是目录,则递归复制。 |
| backup | 创建一个包含时间戳信息的备份文件,以便在您以某种方式错误地破坏它时可以恢复原始文件 |
| owner | 文件或目录的所有者 |
| group | 文件或目录的组所有者 |
| mode | 文件或目录的权限 |
# 1. 将本地的/home/ops/ansible/config,复制到远程主机的 /tmp/ 目录下
$ ansible -i hosts local -m copy -a 'dest=/tmp/ src=/home/ops/ansible/config'
# 2. 将本地的/home/ops/ansible/config,复制到远程主机的 /tmp/ 目录下,备份原来的文件
$ ansible -i hosts local -m copy -a 'dest=/tmp/ src=/home/ops/ansible/config backup=yes'
# 3. 将本地的/home/ops/ansible/config,复制到远程主机的 /tmp/ 目录下,所有者和所有者组都设置为ops,权限设置400
$ ansible -i hosts local -m copy -a 'dest=/tmp/ src=/home/ops/ansible/config user=ops group=ops mode=400'
template
将文件模板输出到目标主机
| 参数 | 含义 |
|---|---|
| src | Ansible 控制器上 Jinja2 格式模板的路径。 这可以是相对路径或绝对路径。 文件必须使用 utf-8 编码,但可以使用 output_encoding 来控制输出模板的编码 |
| dest | 在远程计算机上呈现模板的位置 |
| backup | 创建一个包含时间戳信息的备份文件,以便在您以某种方式错误地破坏它时可以恢复原始文件 |
| owner | 文件或目录的所有者 |
| group | 文件或目录的组所有者 |
| mode | 文件或目录的权限 |
$ cat server.conf.j2
name: {{ name }}
# 变量写在inventory文件(./hosts)中,示例如下
# [local:vars]
# name=jiaxzeng
# 1. 将本地的server.conf.j2模板文件,渲染到/tmp/server.conf
$ ansible -i ./hosts local -m template -a 'src=server.conf.j2 dest=/tmp/server.conf'
# 2. 将本地的server.conf.j2模板文件,渲染到/tmp/server.conf,设置权限为644
$ ansible -i hosts local -m template -a 'src=server.conf.j2 dest=/tmp/server.conf mode=0644'
fetch
从远程节点获取文件
| 参数 | 含义 |
|---|---|
| src(required) | 要获取的远程系统上的文件,只能是文件,不能是目录 |
| dest(required) | ansible存放文件的路径。会加上src路径存放 |
$ ansible -i hosts local -m fetch -a "src=/etc/hosts dest=/tmp"
192.168.32.166 | CHANGED => {
"changed": true,
"checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa",
"dest": "/tmp/192.168.32.166/etc/hosts", # 这里也有提示ansible主机存放路径
"md5sum": "54fb6627dbaa37721048e4549db3224d",
"remote_checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa",
"remote_md5sum": null
}
get_url
从 HTTP、HTTPS 或 FTP 下载文件到节点
| 参数 | 含义 |
|---|---|
| url(required) | HTTP、HTTPS 或 FTP URL,格式为 (http |
| dest(required) | 下载文件的绝对路径 |
| client_cert | 证书cert文件路径 |
| client_key | 证书key文件路径 |
| url_username | 用户名 |
| url_password | 用户名的密码 |
| owner | 文件或目录的所有者 |
| group | 文件或目录的组所有者 |
| mode | 文件或目录的权限 |
$ ansible -i hosts local -m get_url -a "url=https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/vim-common-7.4.629-7.el7.x86_64.rpm dest=/tmp/"
安装服务
yum_repository
添加或删除 YUM 存储库
| 参数 | 含义 |
|---|---|
| name(required) | 此选项在存储库文件中构建存储库的部分名称,中括号里面的内容 |
| description | 描述存储库的人类可读字符串。 此选项对应于存储库文件中的name属性 |
| baseurl | 下载包的路径 |
| enabled | 是否使用这个存储库, 默认 yes |
| gpgcheck | 是否应该对包执行 GPG 签名检查。可选 yes,no,没有默认值 |
| gpgkey | 指向存储库的 ASCII-armored GPG 密钥文件的 URL |
| state | 存储库文件的状态 默认 present |
| file | 用于保存存储库的不带 .repo 扩展名的文件名。默认为 name 的 |
# 添加yum源
$ ansible -i hosts local -m yum_repository -a 'name="epel" description="ansible add epel" baseurl="http://mirrors.aliyun.com/epel/7/$basearch" enabled=yes gpgcheck=no'
# 删除yum源
$ ansible -i hosts local -m yum_repository -a 'name="epel" state=absent'
yum
使用 yum 包管理器管理包
| 参数 | 含义 |
|---|---|
| name | 包名称或带有版本的包说明符,例如 name-1.0 |
| state | absent installed latest present removed,默认:None |
| enablerepo | 用于启用安装/更新操作的存储库的 Repoid |
# 安装vim包
$ ansible -i hosts local -m yum -a "name=vim state=present"
# 卸载vim包
$ ansible -i hosts local -m yum -a "name=vim state=absent"
# 指定 epel 源安装ansible
$ ansible -i hosts local -m yum -a "name=ansible state=present enablerepo=epel"
服务管理
systemd
管理服务
| 参数 | 含义 |
|---|---|
| name | 服务名称 |
| enabled | 服务是否应在系统启动时启动 |
| state | reloaded、restarted、started、stopped 服务 |
# 停止服务
$ ansible -i hosts local -m systemd -a "name=firewalld state=stopped"
# 启动并加入开机自启
$ ansible -i hosts local -m systemd -a "name=firewalld state=started enabled=yes"
查看帮助文档
命令方式
# 查看有哪些模块
ansible-doc -l
# 查看具体模块使用方式
ansible-doc -s 模块名称
官网文档
ansible builtin 官方文档传送门 : https://docs.ansible.com/ansible/2.10/collections/ansible/builtin/index.html#modules
ansible posix 官方文档传送门: https://docs.ansible.com/ansible/2.10/collections/ansible/posix/index.html#modules

浙公网安备 33010602011771号