Ansible常用模块介绍及使用(二)--技术流ken

Ansible模块 在上一篇博客《Ansible基础认识及安装使用详解(一)--技术流ken》中以及简单的介绍了一下ansible的模块。ansible是基于模块工作的,所以我们必须掌握几个常用的模块以便能够从容应对日常的工作。 相信大家在看完上一篇博客之后应该也已经知道可以使用ansible-doc -s 模块名,可以获取到模块的使用帮助,在本篇博客中就不再赘述。 Ansible常用模块介绍 ansible常用模块主要有如下12个: 复制代码 ping 模块: 尝试连接主机,如果测试成功会返回‘pong’ command模块: 在远程节点执行命令 yum模块: 使用yum软件包管理工具管理软件包 shell模块: 和command模块类似,执行命令,支持变量等符号 cron模块 : 管理定时任务 service模块: 管理程序服务 file模块: 设置文件属性 copy模块: 复制本地文件到远程主机 script模块: 传送本地的一个脚本并在远程主机上执行 setup模块: 获取远程主机的参数信息 user模块: 管理用户账户 group模块: 添加或者删除用户组 复制代码 Ansible常用模块使用详解 下面就针对每个模块的使用进行一一演示 (一)command模块 command的模块是在远程主机执行命令。默认使用此模块,所以可以省略 例:获取远程主机的ip信息 复制代码 [root@ken ~]# ansible all -m command -a "ip a" 10.220.5.138 | SUCCESS | rc=0 >> 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 00:0c:29:a9:90:16 brd ff:ff:ff:ff:ff:ff inet 10.220.5.138/24 brd 10.220.5.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fea9:9016/64 scope link valid_lft forever preferred_lft forever 10.220.5.139 | SUCCESS | rc=0 >> 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 00:0c:29:65:31:ad brd ff:ff:ff:ff:ff:ff inet 10.220.5.139/24 brd 10.220.5.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe65:31ad/64 scope link valid_lft forever preferred_lft forever 复制代码 (二)cron模块 cron模块是管理定时任务 例:在远程节点每隔5分钟往、/tmp/ken.txt输入111 复制代码 [root@ken ~]# ansible all -m cron -a "minute=*/5 job='echo 111>/tmp/ken.txt' state=present" 10.220.5.139 | SUCCESS => { "changed": true, "envs": [], "jobs": [ "None", "None" ] } 10.220.5.138 | SUCCESS => { "changed": true, "envs": [], "jobs": [ "None", "None" ] } 复制代码 可以查看是否已经设置成功。可以看到已经安装成功 复制代码 [root@ken ~]# ansible all -a "crontab -l" 10.220.5.138 | SUCCESS | rc=0 >> #Ansible: None */5 * * * * echo 111>/tmp/ken.txt 10.220.5.139 | SUCCESS | rc=0 >> #Ansible: None */5 * * * * echo 111>/tmp/ken.txt 复制代码 移除计划任务 复制代码 [root@ken ~]# ansible all -a "crontab -r" 10.220.5.138 | SUCCESS | rc=0 >> 10.220.5.139 | SUCCESS | rc=0 >> [root@ken ~]# ansible all -a "crontab -l" 10.220.5.139 | FAILED | rc=1 >> no crontab for rootnon-zero return code 10.220.5.138 | FAILED | rc=1 >> no crontab for rootnon-zero return code 复制代码 (三)copy模块 copy模块是复制本机文件到远程节点之上 例:复制本机/tmp/ken.sh 到远程节点上的/tmp下 复制代码 [root@ken ~]# ansible all -m copy -a "src=/tmp/ken.sh dest=/tmp" 10.220.5.138 | SUCCESS => { "changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/tmp/ken.sh", "gid": 0, "group": "root", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0644", "owner": "root", "size": 0, "src": "/root/.ansible/tmp/ansible-tmp-1542373625.27-167828199145082/source", "state": "file", "uid": 0 } 10.220.5.139 | SUCCESS => { "changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/tmp/ken.sh", "gid": 0, "group": "root", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0644", "owner": "root", "size": 0, "src": "/root/.ansible/tmp/ansible-tmp-1542373625.3-279713897725048/source", "state": "file", "uid": 0 } 复制代码 查看是否已经真的传送过去了。发现在远程主机的/tmp目录下面已经有个刚刚我们传送过去的文件了 复制代码 [root@ken ~]# ansible all -m shell -a "ls /tmp | grep ken.sh" 10.220.5.138 | SUCCESS | rc=0 >> ken.sh 10.220.5.139 | SUCCESS | rc=0 >> ken.sh 复制代码 (四)yum模块 yum模块是用来管理远程安装包的 例:在远程节点下载httpd服务 复制代码 [root@ken ~]# ansible all -m yum -a "name=httpd state=present" 10.220.5.138 | SUCCESS => { "changed": true, "msg": "file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - \"Couldn't open file /mnt/repodata/repomd.xml\"\nTrying other mirror.\n", "rc": 0, "results": [ "Loaded plugins: fastestmirror, langpacks\nLoading mirror speeds from cached hostfile\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-80.el7.centos.1 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n httpd x86_64 2.4.6-80.el7.centos.1 updates 2.7 M\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 2.7 M\nInstalled size: 9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : httpd-2.4.6-80.el7.centos.1.x86_64 1/1 \n Verifying : httpd-2.4.6-80.el7.centos.1.x86_64 1/1 \n\nInstalled:\n httpd.x86_64 0:2.4.6-80.el7.centos.1 \n\nComplete!\n" ] } 10.220.5.139 | SUCCESS => { "changed": true, "msg": "", "rc": 0, "results": [ "Loaded plugins: fastestmirror, langpacks\nLoading mirror speeds from cached hostfile\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-80.el7.centos.1 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n httpd x86_64 2.4.6-80.el7.centos.1 updates 2.7 M\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 2.7 M\nInstalled size: 9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : httpd-2.4.6-80.el7.centos.1.x86_64 1/1 \n Verifying : httpd-2.4.6-80.el7.centos.1.x86_64 1/1 \n\nInstalled:\n httpd.x86_64 0:2.4.6-80.el7.centos.1 \n\nComplete!\n" ] } 复制代码 查看是否已经安装成功 复制代码 [root@ken ~]# ansible all -m yum -a "list=httpd" 10.220.5.138 | SUCCESS => { "changed": false, "results": [ { "arch": "x86_64", "envra": "0:httpd-2.4.6-80.el7.centos.1.x86_64", "epoch": "0", "name": "httpd", "release": "80.el7.centos.1", "repo": "installed", "version": "2.4.6", "yumstate": "installed" }, { "arch": "x86_64", "envra": "0:httpd-2.4.6-80.el7.centos.1.x86_64", "epoch": "0", "name": "httpd", "release": "80.el7.centos.1", "repo": "updates", "version": "2.4.6", "yumstate": "available" }, { "arch": "x86_64", "envra": "0:httpd-2.4.6-80.el7.centos.x86_64", "epoch": "0", "name": "httpd", "release": "80.el7.centos", "repo": "centos7", "version": "2.4.6", "yumstate": "available" }, { "arch": "x86_64", "envra": "0:httpd-2.4.6-80.el7.centos.x86_64", "epoch": "0", "name": "httpd", "release": "80.el7.centos", "repo": "ken", "version": "2.4.6", "yumstate": "available" } ] } 10.220.5.139 | SUCCESS => { "changed": false, "results": [ { "arch": "x86_64", "envra": "0:httpd-2.4.6-80.el7.centos.1.x86_64", "epoch": "0", "name": "httpd", "release": "80.el7.centos.1", "repo": "installed", "version": "2.4.6", "yumstate": "installed" }, { "arch": "x86_64", "envra": "0:httpd-2.4.6-80.el7.centos.1.x86_64", "epoch": "0", "name": "httpd", "release": "80.el7.centos.1", "repo": "updates", "version": "2.4.6", "yumstate": "available" }, { "arch": "x86_64", "envra": "0:httpd-2.4.6-80.el7.centos.x86_64", "epoch": "0", "name": "httpd", "release": "80.el7.centos", "repo": "centos7", "version": "2.4.6", "yumstate": "available" } ] } 复制代码 (五)service模块 service模块是用来管理服务程序的 例:启动远程节点的httpd服务 复制代码 [root@ken ~]# ansible all -m service -a "name=httpd state=restarted" 10.220.5.138 | SUCCESS => { "changed": true, "name": "httpd", "state": "started", "status": { "ActiveEnterTimestampMonotonic": "0", "ActiveExitTimestampMonotonic": "0", "ActiveState": "inactive", "After": "nss-lookup.target systemd-journald.socket network.target tmp.mount system.slice remote-fs.target -.mount basic.target", "AllowIsolate": "no", "AmbientCapabilities": "0", "AssertResult": "no", "AssertTimestampMonotonic": "0", "Before": "shutdown.target", "BlockIOAccounting": "no", .... 复制代码 输出信息很长,我就省略了。现在查看是否已经启动成功 复制代码 [root@ken ~]# ansible all -m shell -a "ss -tnl | grep 80" 10.220.5.139 | SUCCESS | rc=0 >> LISTEN 0 128 :::80 :::* 10.220.5.138 | SUCCESS | rc=0 >> LISTEN 0 128 :::80 :::* 复制代码 (六)file模块 file模块是用来设置文件属性的 例:在远程节点的/tmp下创建一个test.txt文件 复制代码 [root@ken ~]# ansible all -m file -a "state=touch path=/tmp/test.txt" 10.220.5.139 | SUCCESS => { "changed": true, "dest": "/tmp/test.txt", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "size": 0, "state": "file", "uid": 0 } 10.220.5.138 | SUCCESS => { "changed": true, "dest": "/tmp/test.txt", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "size": 0, "state": "file", "uid": 0 } 复制代码 查看文件是否已经创建成功 复制代码 [root@ken ~]# ansible all -m shell -a "ls /tmp | grep test.txt" 10.220.5.138 | SUCCESS | rc=0 >> test.txt 10.220.5.139 | SUCCESS | rc=0 >> test.txt 复制代码 (七)shell模块 shell模块和command模块类似即远程执行命令 但是比command更强大 例如:统计远程节点/tmp目录下有多少文件 我们首先使用command看下效果 复制代码 [root@ken ~]# ansible all -a "ls /tmp | wc -l" 10.220.5.139 | FAILED | rc=2 >> /tmp: total 4 drwx------ 2 root root 65 Nov 17 05:25 ansible_aIMVHi -rw-r--r-- 1 root root 0 Nov 17 05:07 ken.sh -rw-r--r-- 1 root root 0 Nov 17 05:00 ken.txt drwx------ 3 root root 17 Nov 7 16:04 systemd-private-2e376cd91398450f85a81bc060207ef8-chronyd.service-TxdhUO drwx------ 3 root root 17 Nov 7 16:05 systemd-private-2e376cd91398450f85a81bc060207ef8-httpd.service-k8IZOZ drwx------ 3 root root 17 Nov 15 15:58 systemd-private-5c9f32d6cff64520b10075e086d943ab-chronyd.service-iAH3c0 drwx------ 3 root root 17 Nov 15 15:58 systemd-private-5c9f32d6cff64520b10075e086d943ab-httpd.service-dsAqeg drwx------ 3 root root 17 Nov 14 15:56 systemd-private-65ded84926e64a90b0a201a805f752ca-chronyd.service-eSj3iR drwx------ 3 root root 17 Nov 16 16:00 systemd-private-6706ba5361284cd4a0c91f3c8b68c606-chronyd.service-sLgAei drwx------ 3 root root 17 Nov 17 05:17 systemd-private-6706ba5361284cd4a0c91f3c8b68c606-httpd.service-u6vla7 -rw-r--r-- 1 root root 0 Nov 17 05:22 test.txt drwx------ 2 root root 6 Nov 15 15:58 vmware-root -rw------- 1 root root 467 Nov 15 16:02 yum_save_tx.2018-11-15.16-02.KHC9kd.yumtxls: cannot access |: No such file or directory ls: cannot access wc: No such file or directorynon-zero return code 10.220.5.138 | FAILED | rc=2 >> /tmp: total 0 drwx------ 2 root root 65 Nov 16 21:25 ansible_v4MF1q drwxr-xr-x 2 root root 19 Nov 7 09:35 hsperfdata_root drwxr-xr-x 2 zabbix zabbix 19 Nov 7 08:48 hsperfdata_zabbix ... 复制代码 可以看到命令执行失败 现在我们再使用shell执行相同的操作看下效果 可以发现这次获取到了我们所需要的信息 复制代码 [root@ken ~]# ansible all -m shell -a "ls /tmp | wc -l" 10.220.5.138 | SUCCESS | rc=0 >> 13 10.220.5.139 | SUCCESS | rc=0 >> 13 复制代码 (八)ping模块 ping模块可以探测远程主机 不用加任何的参数信息 获取成功就会返回pong 复制代码 [root@ken ~]# ansible all -m ping 10.220.5.139 | SUCCESS => { "changed": false, "ping": "pong" } 10.220.5.138 | SUCCESS
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信