前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ansible生产常用十一大模块总结

ansible生产常用十一大模块总结

作者头像
菲宇
发布2019-06-12 15:00:22
5710
发布2019-06-12 15:00:22
举报
文章被收录于专栏:菲宇

注:-a参数后的命令用单引号,单引号,单引号;双引号有可能会出问题,特别是在user模块;

模块一:测试目标主机是否在线:ping模块

主机如果在线,则回复pong

1 2 3 4 5 6 7 8 9 10

测试主机是否在线 [root@localhost ~]# ansible erp -m ping 192.168.10.6 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.10.7 | SUCCESS => { "changed": false, "ping": "pong" }

模块二:command模块和shell

作用:用于在各被管理节点运行指定的命令

shell和command的区别:shell模块可以特殊字符,而command是不支持

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

显示各节点的日期 [root@localhost ~]# ansible erp -m command -a 'date' 192.168.10.6 | SUCCESS | rc=0 >> Tue Feb 7 09:20:35 CST 2017 192.168.10.7 | SUCCESS | rc=0 >> Tue Feb 7 09:20:35 CST 2017 删除各节点的/tmp/test目录 [root@localhost ~]# ansible erp -m command -a 'mkdir /tmp/test' 192.168.10.10 | SUCCESS | rc=0 >> 192.168.10.6 | SUCCESS | rc=0 >> [root@localhost ~]# ansible erp -m shell -a 'rm -rf /tmp/test' 192.168.10.6 | SUCCESS | rc=0 >> 192.168.10.10 | SUCCESS | rc=0 >>

模块三:user模块:管理用户的模块

模块参数详解:

name:指定用户名

password:设定用户密码,password参数需要接受md5加密后的值

state:用户状态,默认为present

present:表示添加用户

absent:表示删除用户

update_password:修改用户密码

always:新密码和旧密码不同时进行修改

on_create:为新创建的用户指定密码

createhome:创建家目录

yes:默认项,即创建用户默认是有家目录的

no:创建用户时不创建家目录

remove:

yes:删除用户家目录,需要指定此参数

no:默认项,删除用户时默认不删除用户的家目录

system:

yes:默认创建为普通用户,而非系统用户

如果不指定默认生成的选项有:

home:创建家目录

shell:创建默认的shell为/bin/bash

system:默认创建为普通用户,而非系统用户,指定是用yes

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

查看帮助 [root@localhost ~]# ansible-doc -s user user模块中的password是需要经过md5加密的 [root@localhost ~]# echo 123456 | openssl passwd -1 -stdin $1$Q0WiDLXN$agpzPdHVa6.LbdMLsUXqI/ 增加一个用户 [root@localhost ~]# ansible erp -m user -a 'name=liuwei1 system=yes password=$1$Q0WiDLXN$agpzPdHVa6.LbdMLsUXqI/ state=present' 192.168.10.10 | SUCCESS => { "changed": true, "comment": "", "createhome": true, "group": 496, "home": "/home/liuwei1", "name": "liuwei1", "password": "NOT_LOGGING_PASSWORD", "shell": "/bin/bash", "state": "present", "system": true, "uid": 496 } 192.168.10.6 | SUCCESS => { "changed": true, "comment": "", "createhome": true, "group": 496, "home": "/home/liuwei1", "name": "liuwei1", "password": "NOT_LOGGING_PASSWORD", "shell": "/bin/bash", "state": "present", "system": true, "uid": 496 } 删除一个用户 [root@localhost ~]# ansible erp -m user -a 'name=liuwei remove=yes state=absent' 192.168.10.10 | SUCCESS => { "changed": true, "force": false, "name": "liuwei", "remove": true, "state": "absent" } 192.168.10.6 | SUCCESS => { "changed": true, "force": false, "name": "liuwei", "remove": true, "state": "absent" } 更新用户的密码 [root@localhost ~]# echo 654321 | openssl passwd -1 -stdin $1$pfBO1D1D$UfxpHN4OlUbT8dWLe8te7. [root@localhost ~]# ansible erp -m user -a 'name=liuwei1 update_password=always password=$1$pfBO1D1D$UfxpHN4OlUbT8dWLe8te7.' 192.168.10.10 | SUCCESS => { "append": false, "changed": true, "comment": "", "group": 496, "home": "/home/liuwei1", "move_home": false, "name": "liuwei1", "password": "NOT_LOGGING_PASSWORD", "shell": "/bin/bash", "state": "present", "uid": 496 } 192.168.10.6 | SUCCESS => { "append": false, "changed": true, "comment": "", "group": 496, "home": "/home/liuwei1", "move_home": false, "name": "liuwei1", "password": "NOT_LOGGING_PASSWORD", "shell": "/bin/bash", "state": "present", "uid": 496 }

模块四:任务计划模块:cron

获取帮助:ansibe-doc -s cron

模块参数详解:

state:

present:创建任务

absent:删除任务

backup:对远程主机上的原任务计划内容修改之前做备份

job:要执行的任务

name:该任务的描述(必须项)

user:以哪个用户的身份运行

minute:分钟(0-59,*,*/2,……),不写默认为*

hour:小时(0-23,*,*/2,……),不写默认为*

day:日(1-31,*,*/2,……),不写默认为*

month:月(1-12,*,*/2,……),不写默认为*

weekday:周(0-7,*,……),不写默认为*

1 2

每隔10分钟同步一下时间 [root@localhost ~]#ansible web -m cron -a 'name="sync time from ntpserver" minute=*/10 job="/usr/sbin/ntpdate 3.cn.pool.ntp.org"'

模块五:远程复制备份模块:copy

获取帮助:ansible-doc -s copy

模块参数详解:

src:指定源文件路径,可以是相对路径,也可以是绝对路径,可以是目录(并非是必须的,可以使用content,直接生成文件内容)

dest=:指定目标文件路径,只能是绝对路径,如果src是目录,此项必须是目录

owner:指定属主

group:指定属组

mode:指定权限,可以以数字指定比如0644

content:代替src,直接往dest文件中写内容,可以引用变量,也可以直接使用inventory中的主机变量

backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no

force:

yes:默认项,如果目标主机包含该文件,但内容不同,则强制覆盖

no:则只有当目标主机的目标位置不存在该文件时,才复制

directory_mode:递归的设定目录的权限,默认为系统默认权限

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

复制本地文件到远程主机并对原文件进行备份 [root@localhost tmp]# ansible erp -m copy -a 'src=/tmp/abc.txt dest=/tmp/ backup=yes' 192.168.10.10 | SUCCESS => { "backup_file": "/tmp/abc.txt.2017-02-07@10:55:31~", "changed": true, "checksum": "13520f9e1a6f0b2ca9557d85825616c3680b4edc", "dest": "/tmp/abc.txt", "gid": 0, "group": "root", "md5sum": "baae19d280afe4e2df1799daa37bebba", "mode": "0644", "owner": "root", "size": 18, "src": "/root/.ansible/tmp/ansible-tmp-1486436129.98-98537282809491/source", "state": "file", "uid": 0 } 192.168.10.6 | SUCCESS => { "backup_file": "/tmp/abc.txt.2017-02-07@10:55:31~", "changed": true, "checksum": "13520f9e1a6f0b2ca9557d85825616c3680b4edc", "dest": "/tmp/abc.txt", "gid": 0, "group": "root", "md5sum": "baae19d280afe4e2df1799daa37bebba", "mode": "0644", "owner": "root", "size": 18, "src": "/root/.ansible/tmp/ansible-tmp-1486436130.19-187127825454744/source", "state": "file", "uid": 0 } 向远程主机的文件中写内容,会把原内容覆盖掉 [root@localhost tmp]# ansible erp -m copy -a 'content="\nMy age is 26" dest=/tmp/abc.txt' 192.168.10.6 | SUCCESS => { "changed": true, "checksum": "e1cbbec8927a295a767fa44e91dea6eeafa5a4f4", "dest": "/tmp/abc.txt", "gid": 0, "group": "root", "md5sum": "55ec30ce5102aa8716b75ab5e98163a7", "mode": "0644", "owner": "root", "size": 13, "src": "/root/.ansible/tmp/ansible-tmp-1486436336.05-254449966786008/source", "state": "file", "uid": 0 } 192.168.10.10 | SUCCESS => { "changed": true, "checksum": "e1cbbec8927a295a767fa44e91dea6eeafa5a4f4", "dest": "/tmp/abc.txt", "gid": 0, "group": "root", "md5sum": "55ec30ce5102aa8716b75ab5e98163a7", "mode": "0644", "owner": "root", "size": 13, "src": "/root/.ansible/tmp/ansible-tmp-1486436348.0-188270058505341/source", "state": "file", "uid": 0 }

模块六:对远程文件管理的模块:file

获取帮助:ansible-doc -s file

模块参数详解:

owner:修改属主

group:修改属组

mode:修改权限

path=:要修改文件的路径

recurse:递归的设置文件的属性,只对目录有效

yes:表示使用递归设置

state:

touch:创建一个新的空文件

directory:创建一个新的目录,当目录存在时不会进行修改

link:创建软连接,结果src一起使用此选项才生效

hard:创建硬连接

absent:删除文件,目录,软连接

src:当state=link时,要被连接文件的源路径

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110

新建一个文件 [root@localhost tmp]# ansible erp -m file -a 'path=/tmp/liuwei.txt state=touch' 192.168.10.10 | SUCCESS => { "changed": true, "dest": "/tmp/liuwei.txt", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "size": 0, "state": "file", "uid": 0 } 192.168.10.6 | SUCCESS => { "changed": true, "dest": "/tmp/liuwei.txt", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "size": 0, "state": "file", "uid": 0 } 新建一个目录 [root@localhost tmp]# ansible erp -m file -a 'path=/tmp/liuwei state=directory' 192.168.10.10 | SUCCESS => { "changed": true, "gid": 0, "group": "root", "mode": "0755", "owner": "root", "path": "/tmp/liuwei", "size": 4096, "state": "directory", "uid": 0 } 192.168.10.6 | SUCCESS => { "changed": true, "gid": 0, "group": "root", "mode": "0755", "owner": "root", "path": "/tmp/liuwei", "size": 4096, "state": "directory", "uid": 0 } 删除文件或者目录 [root@localhost tmp]# ansible erp -m file -a 'path=/tmp/liuwei.txt state=absent' 192.168.10.10 | SUCCESS => { "changed": true, "path": "/tmp/liuwei.txt", "state": "absent" } 192.168.10.6 | SUCCESS => { "changed": true, "path": "/tmp/liuwei.txt", "state": "absent" } 递归设置文件的属主或者属组 [root@localhost tmp]# ansible erp -m file -a 'path=/tmp/liuwei owner=root group=root recurse=yes' 192.168.10.10 | SUCCESS => { "changed": true, "gid": 0, "group": "root", "mode": "0755", "owner": "root", "path": "/tmp/liuwei", "size": 4096, "state": "directory", "uid": 0 } 192.168.10.6 | SUCCESS => { "changed": true, "gid": 0, "group": "root", "mode": "0755", "owner": "root", "path": "/tmp/liuwei", "size": 4096, "state": "directory", "uid": 0 } 为文件设置软连接 [root@localhost tmp]# ansible erp -m file -a 'src=/tmp/liuwei state=link path=/tmp/liuzhengwei' 192.168.10.6 | SUCCESS => { "changed": true, "dest": "/tmp/liuzhengwei", "gid": 0, "group": "root", "mode": "0777", "owner": "root", "size": 11, "src": "/tmp/liuwei", "state": "link", "uid": 0 } 192.168.10.10 | SUCCESS => { "changed": true, "dest": "/tmp/liuzhengwei", "gid": 0, "group": "root", "mode": "0777", "owner": "root", "size": 11, "src": "/tmp/liuwei", "state": "link", "uid": 0 }

模块七:在远程主机执行本地脚本:script

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

[root@localhost tmp]# ansible erp -m script -a '/tmp/a.sh' 192.168.10.10 | SUCCESS => { "changed": true, "rc": 0, "stderr": "", "stdout": "Tue Feb 7 11:26:41 CST 2017\r\n", "stdout_lines": [ "Tue Feb 7 11:26:41 CST 2017" ] } 192.168.10.6 | SUCCESS => { "changed": true, "rc": 0, "stderr": "", "stdout": "Tue Feb 7 11:26:52 CST 2017\r\n", "stdout_lines": [ "Tue Feb 7 11:26:52 CST 2017" ] }

模块八:收集远程主机的信息:setup

收集可用的facts,收集每个节点的相关信息:架构信息,IP,时间,域名,网卡,MAC,主机名,CPU等信息。

这些收集的信息,可以作为变量。

1

[root@localhost tmp]# ansible erp -m setup

模块九:安装模块:yum

模块参数详解:

name:表示要安装软件包的名字,默认最新的程序包,指明要安装的程序包,可以带上版本号

state:表示是安装还卸载

present:默认的,表示为安装

lastest:安装为最新的版本

absent:表示删除

模块十:服务模块:service

模块参数详解:

enabled:表示设置服务开机是否启动,取值为true或者false;enabled=yes

name=:表示要控制哪一个服务

state:

started:表示现在就启动此服务

stopped:表示现在关闭此服务

restarted:表示重启此服务

sleep:如果执行了restarted,在stop和start之间沉睡几秒

runlevel:定义在哪些级别可以自启动

arguments:表示向命令行传递的参数

1

[root@localhost tmp]#ansible erp -m service -a 'enabled=on name=httpd state=started'

模块十一:文件编辑模块:lineinfile

模块参数详解:

path:指定要修改的配置文件

regexp:匹配要修改的内容

line:要增加或者修改的内容

state:

absent:表示删除,当匹配到时进行删除

present:表示增加,当匹配到时进行修改,当没有匹配到时在最后增加一行,默认为此项

backrefs:

no:表示如果没有匹配到,则增加line;如果匹配成功,则替换line;

yes:表示如果没有匹配到,则不变line;如果匹配成功,则替换line;

backup:

no:表示如果没有匹配到,则增加line;如果匹配成功,则替换line;不备份原文件

yes:表示如果没有匹配到,则增加line;如果匹配成功,则替换line;备份原文件

insertafter(匹配的是此行):

在匹配到的行之后添加一行

insertbefore(匹配的是此行):

在匹配到的行之前添加一行

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

修改nginx.conf测试: [root@nfs-server playbook]# cat modify_nginx.yml --- - hosts: 192.168.2.111 tasks: - name: "修改配置文件" lineinfile: dest: "/etc/nginx/conf.d/default.conf" regexp: 'listen 80;' line: ' listen 8000;' #backup: yes backrefs: yes notify: - reload nginx handlers: - name: reload nginx service: name=nginx state=reloaded

注:经测试,当不添加backerfs: yes参数时,匹配到后也会进行替换,但当匹配到的内容不存在时,会在最后增加一行;所以当不增加backerfs参数时,要确定匹配到的内容存在;

wKioL1moBdWiPTAxAAA41nCeDsU246.png
wKioL1moBdWiPTAxAAA41nCeDsU246.png

替换存在的行:

1

#ansible oms -m lineinfile -a 'path=/etc/sudoers regexp="SYSTEM,SOFTWARE" line="STAPLES_ADMIN ALL=(ROOT) NOPASSWD:NETWORKING,LOCATE,STORAGE,DELEGATING,DRIVERS,SYSTEM,SOFTWARE,SERVICES,PROCESSES,FILE" backrefs=no'

匹配到的行后增加一行:

1

#ansible oms -m lineinfile -a 'dest=/etc/sudoers insertafter="Cmnd_Alias SYSTEM = /usr/sbin/reboot, /usr/sbin/halt, /usr/bin/ansible, /usr/bin/ssh" line="Cmnd_Alias FILE = /bin/mkdir,/bin/touch,/usr/bin/vim"'

删除匹配到的行:

1

#ansible oms -m lineinfile -a 'path=/etc/sudoers state=absent regexp="PROCESSES,FILE"'

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年08月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档