首页 > 其他分享 >Ansible 常用模块及使用案例

Ansible 常用模块及使用案例

时间:2023-02-24 11:57:36浏览次数:37  
标签:Ansible 模块 案例 state ansible web01 m01 test root


Ansible常用模块及使用案例
第一个模块: command
ansible web01 -m command -a '可执行命令'
第二个模块: Shell 支持管道
ansible web01 -m command -a '可执行命令'
第三个模块: script
ansible web01 -m scripts -a 'test.sh' # test.sh在master
[root@m01 ~]#ansible web01 -m shell -a 'sh /root/test.sh'
web01 | CHANGED | rc=0 >>
/root

第四个模块: yum模块
ansible web01 -m yum -a 'name=wget state=present' # 安装软件
ansible web01 -m yum -a 'name=wget state=absent' # 卸载软件

第五个模块: copy模块
ansible web01 -m copy -a 'src=./test.txt dest=/root/test.txt owner=root group=root mode=0644'
ansible web01 -m copy -a 'src=./test.txt dest=/root/ backup=yes' # 如果目标文件存在则备份
# 将content的字符串定向到目标主机的hehe.txt文件中
ansible web01 -m copy -a 'content=hehe dest=/root/hehe.txt'

案例:
[root@m01 ~]#ansible web01 -m copy -a 'content=rsync_backup:123456 dest=/etc/rsync.passwd mode=0600'


第六个模块: file模块
file: # 模块名称
path: /etc/foo.conf # 客户端文件的位置
state: touch # 创建一个文件

案例: 在所有的web服务器创建一个test.txt
[root@m01 ~]#ansible web_servers -m file -a 'path=/root/test.txt state=touch owner=www group=www mode=0644'

创建目录:
file: # 模块名称
path: /etc/foo.conf # 客户端文件的位置
state: directory # 创建一个文件

案例: 在所有的web服务器创建一个oldboy目录
[root@m01 ~]#ansible web_servers -m file -a 'path=/root/oldboy state=directory'

案例: 递归修改属主和属组
recurse=yes
[root@m01 ~]#ansible web_servers -m file -a 'path=/root/oldboy state=directory recurse=yes owner=www group=www '

案例: 删除文件或者目录
state=absent
删除文件test.txt
[root@m01 ~]#ansible web_servers -m file -a 'path=/root/test.txt state=absent'
删除目录oldboy
[root@m01 ~]#ansible web_servers -m file -a 'path=/root/oldboy state=absent'

 

file模块:
创建文件:
创建目录:
修改属主属组:
修改权限:
递归修改:
删除文件和目录:

file:
path: 目标的路径文件或者目录
owner: 属主
group: 属组
mode: 权限
recurse: 递归修改
state:
touch 创建文件
directory 创建目录
absent 删除文件或者目录

第七个模块: systemd
systemd:
name: 服务名称
state:
started 启动
stopped 停止
restarted 重启
reloaded 重载
enabled 开机是否自启
yes 开启自启
no 开启禁止启动

注意: 如果nginx新增加配置文件则需要重启 restart
对已经存在的文件进行修改只需要重载即可 reload

案例: 启动Nginx服务
[root@m01 ~]#ansible web01 -m systemd -a 'name=nginx state=started enabled=yes'
案例: 停止Nginx服务
[root@m01 ~]#ansible web01 -m systemd -a 'name=nginx state=stopped'
案例: 重启Nginx服务
[root@m01 ~]#ansible web01 -m systemd -a 'name=nginx state=restarted'
案例: 开机禁止启动
[root@m01 ~]#ansible web01 -m systemd -a 'name=nginx enabled=no'
开机启动
[root@m01 ~]#ansible web01 -m systemd -a 'name=nginx enabled=yes'

第八个模块: mount
mount:
path: 挂载到本地的位置
src: 挂载的设备
fstype: 挂载的类型 nfs
state:
mounted 挂载 挂载并写入开机自动挂载fstab
absent 卸载 卸载并删除开机自动挂载fstab

unmounted 只卸载 不删除fstab自动启动
present 写入到开机自动启动fstab


案例: 将nfs的/data/zh 挂载到 /mnt目录 类型为nfs 使用mounted自动写入到开机自动挂载fstab
[root@m01 ~]#ansible w eb01 -m mount -a 'path=/mnt src=172.16.1.31:/data/zh state=mounted fstype=nfs'
案例: 卸载并删除开机自动挂载fstab
[root@m01 ~]#ansible web01 -m mount -a 'path=/mnt src=172.16.1.31:/data/zh state=absent fstype=nfs'

案例: present挂载
[root@m01 ~]#ansible web01 -m mount -a 'path=/mnt src=172.16.1.31:/data/zh state=present fstype=nfs'

案例: unmounted卸载
[root@m01 ~]#ansible web01 -m mount -a 'path=/mnt src=172.16.1.31:/data/zh state=unmounted fstype=nfs'


第九个模块: cron定时任务模块
cron:
name: "check dirs" # 注释
minute: "0" # 分钟
hour: "5,2" # 小时
job: "ls -alh > /dev/null" # 执行的命令
state:
present: 添加
absent: 删除

案例: 添加一条定时任务 凌晨12点执行一条echo命令
[root@m01 ~]#ansible web01 -m cron -a 'name=print_test minute=00 hour=00 job="echo test &>/dev/null" state=present'


客户端查看:
[root@web01 ~]#crontab -l
#Ansible: print_test
00 00 * * * echo test &>/dev/null

案例: 每间隔5分钟执行一次时间同步
[root@m01 ~]#ansible web01 -m cron -a 'name=时间同步 minute=*/5 job="/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null" state=present'

客户端查看:
[root@web01 ~]#crontab -l
#Ansible: print_test
00 00 * * * echo test &>/dev/null
#Ansible: 时间同步
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null

案例: 删除名称为print_test的定时任务
[root@m01 ~]#ansible web01 -m cron -a 'name=print_test state=absent'


第十个模块: get_url
get_url
url: 软件的链接
dest: 放在客户端的哪个位置
[root@m01 ~]#ansible web01 -m get_url -a 'url=https://cn.wordpress.org/latest-zh_CN.tar.gz dest=/root/'


关闭并禁止防火墙启动
[root@m01 ~]#ansible web01 -m systemd -a 'name=firewalld state=stopped enabled=no'

关闭并禁止selinux启动
[root@m01 ~]#ansible web01 -m selinux -a 'policy=targeted state=disabled'

 

anisble的setup模块可以获取客户端的详细信息: 可以使用filter来过滤想要的内容
[root@m01 ~]#ansible web01 -m setup -a 'filter=ansible_distribution'
web01 | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "CentOS",
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
[root@m01 ~]#ansible web01 -m setup -a 'filter=ansible_hostname'
web01 | SUCCESS => {
"ansible_facts": {
"ansible_hostname": "web01",
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}

标签:Ansible,模块,案例,state,ansible,web01,m01,test,root
From: https://www.cnblogs.com/hushitao/p/17150785.html

相关文章