Ansible的常用模块
Ansible的常用模块
ansible的执行
- ad-hoc
- playbook
ansible ad-hoc的基本概述
什么是ansible ad-hoc
ad-hoc:临时的命令,执行后结束,不会保存
ad-hoc模式的使用场景
比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等
ad-hoc模式的命令使用
# 1.语法
ansible 主机名(主机清单中的主机名或主机组) -m 模块名 [-a 动作]
[root@m01 ~]# ansible web_group -m shell -a 'free -m'
web01 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 196 310 41 465 553
Swap: 1023 0 1023
web02 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 191 429 43 351 567
Swap: 1023 0 1023
ad-hoc结果返回颜色
- 绿色: 被管理端执行成功,并且结果不会发生改变
- 黄色: 被管理端执行成功,但是结果是变化的
- 红色: 执行失败,注意看报错
Ansible常用模块
ansible 查看模块的命令
ansible-doc 模块名
[root@m01 ~]# ansible-doc yum
Ansible命令模块:command、shell、script
command模块
# 语法
ansible web_group -m command -a '命令'(不带特殊符号)
# 举例
[root@m01 ~]# ansible web_group -m command -a 'df -h'
web01 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.7G 17G 10% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
web02 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.9G 17G 10% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
shell模块
# 语法
ansible web_group -m shell -a '命令'
[root@m01 ~]# ansible web_group -m shell -a 'free -m'
web01 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 196 310 41 465 553
Swap: 1023 0 1023
web02 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 191 429 43 351 567
Swap: 1023 0 1023
script模块(远程运行脚本)
# ansible远程执行脚本
ansible web_group -m script -a '脚本路径'
# 创建脚本
[root@m01 ~]# cat test.sh
#!/bin/bash
mkdir /root/dsr -p
echo 123 > /root/dsr/text
#在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行
[root@m01 ~]# ansible web_group -m script -a '/root/test.sh'
[root@web01 ~]# cat /root/dsr/1.txt
123
[root@web02 ~]# cat /root/dsr/1.txt
123
ansible软件管理模块:yum、yum_repository
yum模块(安装,删除软件)
# 语法
ansible web_group -m yum -a 'name=包名 state=安装或删除'
# 选项
- name:
-直接指定包名:从仓库安装
-http:// 从指定URL安装
-file:// 从本地安装 类似于 yum
- state:
-present 安装软件包
-absent 删除软件包
-latest 安装最新软件包
- download_only:
-true: 只下载不安装
-false: 下载并安装
[root@m01 ~]# ansible-doc yum
exclude=kernel*,foo* #排除某些包
list=ansible #类似于yum list查看是否可以安装
disablerepo="epel,ol7_latest" #禁用指定的yum仓库
download_only=true #只下载不安装 yum install d
# 同时在web01和web02安装tree
[root@m01 ~]# ansible web_group -m yum -a 'name=tree state=present'
web01 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"changes": {
"installed": [
"tree"
]
},
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\nResolving Dependencies\n--> Running transaction check\n---> Package tree.x86_64 0:1.6.0-10.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n tree x86_64 1.6.0-10.el7 base 46 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 46 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : tree-1.6.0-10.el7.x86_64 1/1 \n Verifying : tree-1.6.0-10.el7.x86_64 1/1 \n\nInstalled:\n tree.x86_64 0:1.6.0-10.el7 \n\nComplete!\n"
]
}
yum_repository模块(创建,追加,删除yum仓库
# 语法
ansible 主机名 -m yum_repository -a ‘name=仓库名 description=描述 baseurl=仓库url gpgcheck=yes或no enabled=yes或no file=仓库的文件名’
# 选项
yum_repository
- name:仓库名字(如果有file,只是仓库名,如果没有file,文件名和仓库名)
- file:指定仓库的文件名
- description:仓库的描述(name)
- baseurl:仓库的url
- gpgcheck:
- no:不开启 0
- yes:开启 1(默认)
- enabled:
- no:不开启 0
- yes:开启 1 (默认)
- state:
-present:创建仓库(默认可写可不写)
-absent : 删除仓库
## 创建新的仓库配置文件
[root@m01 ~]# ansible lb_group -m yum_repository -a 'name=dsr description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
[root@lb01 ~]# cat /etc/yum.repos.d/dsr.repo
[dsr]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
[root@lb02 ~]# cat /etc/yum.repos.d/dsr.repo
[dsr]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
## 创建新的仓库配置,并且文件名和仓库名不同
ansible web01 -m yum_repository -a 'name=local file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=local file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
web01 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"repo": "local",
"state": "present"
}
[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
## 追加仓库
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=test2 file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
[test2]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
## 删除仓库
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=test2 file=zls_local state=absent'
web01 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"repo": "test2",
"state": "absent"
}
[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx
Ansible文件管理模块:copy、file、get_url
copy模块(远程推送、将命令变成cp命令,拷贝软链接)
# 语法
ansible 主机名 -m 模块名 -a 'src=源文件 dest=目标路径'
# 选项
copy
- src:指定源文件的路径
- dest:指定目标路径
- owner:指定属主
- group:指定属组
- mode:指定权限
- backup:
- yes:如果目标路径,存在同名文件,就将目标文件备份
- no:不备份直接覆盖(默认)
- content:将指定文本内容覆盖到目标文件中
- remote_src:将命令变成cp
- yes:将源文件,编程远端的源文件(ansible被管理端)
- no:源文件还是本地文件(ansible管理端 默认)
- follow:拷贝软连接
- yes:会将软连接一起拷贝
- no:会生成一个新的软连接文件
## 远程推送文件
[root@m01 ~]# ansible lb01 -m copy -a 'src=/etc/passwd dest=/tmp'
[root@lb01 ~]# ll /tmp/
-rw-r--r-- 1 root root 1022 Aug 11 04:15 passwd
## 远端有同名文件时,想把同名文件备份
[root@m01 ~]# ansible lb01 -m copy -a 'src=/etc/passwd dest=/tmp backup=yes'
[root@lb01 ~]# ll /tmp/
total 8
-rw-r--r-- 1 root root 1022 Aug 11 04:24 passwd
-rw-r--r-- 1 root root 1041 Aug 11 04:24 passwd.63406.2021-08-11@04:24:59~