Ansible 系列之 Ansible 常用模块

常用模块

列出所有模块

ansible-doc -l

查看指定模块的帮助信息

ansible-doc 模块名
ansible-doc -s 模块名   #比较简洁的帮助信息

·

ping 模块

一个普通的测试模块,测试被管理节点的连通性。这不是 ICMP ping。

ansible all -m ping
ansible wpf1 -m ping

·

command 模块

在远程主机上执行命令。不加 -m 默认使用 command 模块。

它不会经过远程主机的 shell 处理,所以像 “$HOME” 这样的变量和像 “<”、">"、"|"、";"、"&" 这样的操作将不起作用。如果需要这些功能,请使用 [shell] 模块。

ansible all -m command -a 'ls /root'

ansible all -a 'ls /root'

主要参数:
chdir:在运行该命令之前,请切换到此目录

[root@wpf002 ~]# ls /tmp/test/filename111 
/tmp/test/filename111

[root@wpf ~]# ansible all -i wpf002, -m command -a 'chdir=/tmp ls test'
wpf002 | CHANGED | rc=0 >>
filename111

creates:如果文件已经存在,则不会运行此步骤;反之则运行。

[root@wpf ~]# ansible all -i wpf002, -m command -a 'creates=/tmp/test echo "No File"'
wpf002 | SUCCESS | rc=0 >>
skipped, since /tmp/test exists

[root@wpf ~]# ansible all -i wpf002, -m command -a 'creates=/tmp/aaa echo "No File"'
wpf002 | CHANGED | rc=0 >>
No File

removes:如果文件不存在,则不会运行此步骤;反之则运行。与 creates 正好相反。

·

shell 模块

在远程主机上调用 shell 解析器(/bin/sh)运行命令。主要参数和 command 模块相同。

·

script 模块

将管理节点上的脚本传递到被管理节点上进行执行。主要参数和 command 模块相同。

[root@wpf ~]# cat test.sh 
#!/bin/bash
echo $(hostname)
[root@wpf ~]# ansible wpf002 -i /etc/ansible/inventory.ini -m script -a '/root/test.sh'
wpf002 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to wpf002 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to wpf002 closed."
    ], 
    "stdout": "wpf002\r\n", 
    "stdout_lines": [
        "wpf002"
    ]
}

·

copy 模块

将文件从本地复制到远程计算机上的某个位置。使用 [fetch] 模块可以将文件从远程位置复制到本地。

ansible all -m copy -a 'src=/tmp/filename dest=/tmp/filename'

主要参数:
src:指定源文件或目录。
dest:指定文件将被拷贝到远程主机的哪个目录中。
force:当远程主机的目标路径中已经存在同名文件时,是否强制覆盖(默认为 yes)。
backup:当远程主机的目标路径中已经存在同名文件时,是否对远程主机的文件进行备份。当设置为 yes 时,会先备份远程主机中的同名文件,然后再将管理节点的文件拷贝到远程主机。备份文件命名规则会以当前时间为参考。例如:“nginx.conf.1550.2021-02-21@21:52:14~”。
owner:指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
group:指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
mode:指定文件拷贝到远程主机后的权限。可以使用 “mode=0644” 或 “mode=u+x” 表示。

拷贝文件

ansible all -m copy -a 'src=/tmp/filename dest=/tmp/filename backup=yes'

拷贝文件,并设置属性

ansible all -m copy -a 'src=/tmp/filename dest=/tmp/filename backup=yes owner=ceshi group=ceshi mode=0755'

注意: 拷贝目录时和拷贝文件不同,如果远程主机已经存在拷贝目录,则会拷贝为此目录的子目录。

·

fetch 模块

将文件从远程位置复制到本地。注意:不支持目录。常用参数只有 src 和 dest。

ansible all -m fetch -a 'src=/tmp/filename dest=/tmp/aaa'
[root@wpf ~]# tree /tmp/aaa/
/tmp/aaa/
├── wpf002
│   └── tmp
│       └── filename
├── wpf003
│   └── tmp
│       └── filename
└── wpf004
    └── tmp
        └── filename

·

yum 模块

等同于 Linux 上的 yum 命令。

主要参数:
name:指定需要管理的软件包,多个以逗号隔开。
state:用于指定的软件进行安装、删除。默认值为空,但是会进行 present 操作。支持的参数:

  • present 和 installed:确保安装了所需的包
  • latest:确保安装了所需的包,并且升级为最新版本
  • absent 和 removed:删除指定的包

enablerepo:用于指定安装软件包时临时启用的 yum 源。
disablerepo:用于指定安装软件包时临时禁用的 yum 源。
·
安装 ntp

ansible all -m yum -a 'name=ntp state=installed'

安装 ntp 时,临时禁用 local 源。

ansible all -m yum -a 'name=ntp state=installed disablerepo=local'

卸载ntp

ansible all -m yum -a 'name=ntp state=removed'

·

systemd 模块

等同于 Linux上 的 systemd 命令。

主要参数:
daemon_reload:重新载入 systemd。
enabled:是否开机自启。
name:服务名。
state:对指定的服务进行启动、停止、重启、重新加载等操作。支持的参数:

  • started
  • stopped
  • restarted
  • reloaded

启动&&自启 ntpd 服务

ansible all -m systemd -a 'name=ntpd state=started enabled=yes'

·

group 模块

对用户组进行管理。

主要参数:
name:组名称。
system:是否为系统组(默认 no)。
state:创建或删除指定组。默认为创建(present),设置为 absent 表示删除。
gid:用于指定组的 gid。

创建组

ansible all -m group -a 'name=ansible gid=10086'

删除组

ansible all -m group -a 'name=ansible state=absent'

·

user 模块

对用户进行管理。

主要参数:
name:指定用户名。
password:设置用户的密码。这里的值必须为一个加密的散列值,可参考官方文档生成。默认不设置密码。
update_password:更新密码。
home:指定用户家目录。
shell:指定用户的 shell。
comment:用户的描述信息。
create_home:创建用户时,是否创建其家目录。默认为创建(yes)。
group:指定用户主组。
groups:将用户加入到其他组,多个用逗号隔开。默认会把用户从其他已经加入的组中删除。
append:和 groups 配合使用。配置为 yes 时,不会把用户从其他已经加入的组中删除。
system:配置为 yes 时,将会创建一个系统账号。
expires:设置用户的过期时间。值为时间戳,会转换为天数,放在 shadow 的第八个字段里。
generate_ssh_key:配置为 yes 时,将会为用户生成秘钥,不会覆盖原来的秘钥。
ssh_key_type:指定用户的秘钥类型。默认为 rsa。
state:创建或删除指定用户。默认为创建(present),设置为 absent 表示删除。
remove:当与 state=absent 一起使用时,删除一个用户及关联的目录。比如家目录、邮箱目录。可选值为 yes/no。

创建一个用户,并设置密码

ansible all  -m user -a "name=wpf password='{{ '123456' | password_hash('sha512', 'mysecretsalt') }}'"

创建一个用户,并且创建秘钥对

ansible all -m user -a 'name=wpf generate_ssh_key=yes ssh_key_type=rsa'

创建用户,设置有效期,并且加入到 ansible 组中,不删除用户已经加入的组。

ansible all -m user -a "name=wpf groups=ansible append=yes expires='$(date +%s -d 20210303)'"

·

file 模块

直接对远程节点的文件进行操作。

主要参数:
owner:定义文件/目录的属主。
group:定义文件/目录的属组。
mode:定义文件/目录的权限。
path:指定要操作文件/目录的路径。
recurse:递归的设置文件的属性。只对目录生效。默认为 False
src:要被软/硬连接的源文件路径。只适用于 state=link 的情况。
dest:软/硬连接到的路径。只适用于 state=link 的情况。
state:支持的参数:

  • directory:如果目录不存在,创建目录
  • file:文件不存在,不会被创建;存在则返回文件的信息。常用于检查文件是否存在。
  • link:创建软连接
  • hard:创建硬连接
  • touch:如果文件不存在,创建一个新文件;如果存在,则更新最后修改时间。
  • absent:删除目录、文件或者取消连接文件。

创建一个文件

ansible all -m file -a 'path=/tmp/test.txt state=touch'

修改文件的属性

ansible all -m file -a 'path=/tmp/test.txt owner=wpf group=wpf mode=0755'

创建一个目录

ansible all -m file -a 'path=/tmp/dirtest state=directory'

递归修改目录的属性

ansible all -m file -a 'path=/tmp/dirtest owner=wpf group=ansible recurse=true mode=0700'

创建一个软连接

 ansible all -m file -a 'src=/etc/passwd dest=/tmp/passwd state=link'

删除一个文件、软连接、目录

ansible all -m file -a 'path=/tmp/passwd state=absent'
ansible all -m file -a 'path=/tmp/test.txt state=absent'
ansible all -m file -a 'path=/tmp/test state=absent'

·

cron 模块

管理远程节点的 cron 服务。等同于 Linux 中的计划任务。

主要参数:
name:制定一个 cron job 的名字。一定要指定名字,便于后期管理。
minute:指定分钟。可以设置成(0-59、*、*/2等)格式。默认是*。
hour:指定小时。可以设置成(0-23、*、*/2等)格式。默认是*。
day:指定天。可以设置成(1-31、*、*/2等)格式。默认是*。
month:指定月。可以设置成(1-12、*、*/2等)格式。默认是*。
weekday:指定星期。可以设置成(0-6、*、Sunday-Saturday等)格式。默认是*。
job:指定要执行的内容。通常可以写一个脚本或者一段内容。
state:指定这个 job 的状态。默认为新增(present)。absent 为删除。

创建一个cron job

ansible all -m cron -a 'name="Cron Job Test" job="/usr/bin/date >> /tmp/cron.log"  hour=21 day=20 month=2'

删除一个cron job。一定要正确指定cron job name,防止误删。

ansible all -m cron -a 'name="Cron Job Test" state=absent'

·

setup 模块

主要用于收集远程节点的基本信息。其实就是收集 Ansible 的 Facts 变量信息,结合后面介绍的 Facts 变量更好理解。

[root@wpf ~]# ansible wpf002 -i /etc/ansible/inventory.ini  -m setup
wpf002 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.1.213"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::5054:ff:fe01:b2ca"
        ], 
......

主要参数:
filter:用于进行条件过滤。过滤条件必须是变量名,可以使用通配符。

[root@wpf ~]# ansible wpf002 -i /etc/ansible/inventory.ini  -m setup -a 'filter=ansible_all_ipv*_addresses'
wpf002 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.1.213"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::5054:ff:fe01:b2ca"
        ], 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值