前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ansible<3>

ansible<3>

作者头像
py3study
发布2020-01-14 16:30:54
7750
发布2020-01-14 16:30:54
举报
文章被收录于专栏:python3python3

用ansible在客户端上创建一个用户,用户名为test,脚本语言如下:

代码语言:javascript
复制
[root@master?ansible]#?vim?1.yml?

---
-?name:?create_user???????????????/说明代码的作用。可以省略
??hosts:?192.168.1.112???????????/指定主机名
??user:?root???????????????????????/指明用户
??gather_facts:?false??????????????/是否获取客户机的相关信息
??vars:????????????????????????????/我们定义一个参数
????-?user:?"test"
??tasks:
????-?name:?create?user????????????
??????user:?name="{{?user?}}"

执行过程:

代码语言:javascript
复制
[root@master?ansible]#?ansible-playbook?1.yml?

PLAY?[create_user]?************************************************************?
skipping:?no?hosts?matched

PLAY?RECAP?********************************************************************?

[root@master?ansible]#?vim?1.yml?
[root@master?ansible]#?ansible-playbook?1.yml?

PLAY?[create_user]?************************************************************?

TASK:?[create?user]?***********************************************************?
changed:?[192.168.1.112]

PLAY?RECAP?********************************************************************?
192.168.1.112??????????????:?ok=1????changed=1????unreachable=0????failed=0???

[root@master?ansible]#

在客户端检查一下:

代码语言:javascript
复制
[root@client?~]#?grep?test?/etc/passwd
test:x:500:500::/home/test:/bin/bash

ansible-playbook中的循环:

代码语言:javascript
复制
---
-?hosts:?192.168.1.112
??user:?root
??tasks:
????-?name:?change?mode?for?file
??????file:?path=/root/{{?item?}}?mode=600???????/这里用到了ansible的一个模块file!
??????with_items:
????????-?1.tst
????????-?2.tst
????????-?3.tst

然后执行一下:

代码语言:javascript
复制
[root@master?ansible]#?ansible-playbook?1.yml?

PLAY?[192.168.1.112]?**********************************************************?

GATHERING?FACTS?***************************************************************?
ok:?[192.168.1.112]

TASK:?[change?mode?for?file]?**************************************************?
changed:?[192.168.1.112]?=>?(item=1.tst)
changed:?[192.168.1.112]?=>?(item=2.tst)
changed:?[192.168.1.112]?=>?(item=3.tst)

PLAY?RECAP?********************************************************************?
192.168.1.112??????????????:?ok=2????changed=1????unreachable=0????failed=0

最后在客户端检查一下,看文件的权限是否已经更改,注意这里的ansible不会自动创建文件,因此要改文件的权限的文件,必须已经存在:

代码语言:javascript
复制
[root@client?~]#?ll
total?48
-rw-------??1?root?root?????0?Mar??9?04:40?1.tst
-rw-------??1?root?root?????0?Mar??9?04:40?2.tst
-rw-------??1?root?root?????0?Mar??9?04:40?3.tst
-rw-------.?1?root?root??1226?Mar??5?05:05?anaconda-ks.cfg
-rw-r--r--.?1?root?root???393?Mar??7?04:37?id_rsa.pub
-rw-r--r--.?1?root?root?26210?Mar??5?05:05?install.log
-rw-r--r--.?1?root?root??7572?Mar??5?05:04?install.log.syslog
[root@client?~]#

可以用playbook实现条件判断的功能:

代码语言:javascript
复制
[root@master?ansible]#?vim?1.yml?

---
-?hosts:?testhosts
??user:?root
??gather_facts:?True????????????????????/抓取系统信息,为条件判断做准备
??tasks:
???-?name:?use?when
?????shell:?touch?/tmp/when.txt
?????when:?ansible_hostname?==?"client"???/运用when这个模块,当这个主机名为client时,创建文件!
~

看一下执行的情况:

代码语言:javascript
复制
[root@master?ansible]#?ansible-playbook?1.yml?

PLAY?[testhosts]?**************************************************************?

GATHERING?FACTS?***************************************************************?
ok:?[127.0.0.1]
ok:?[192.168.1.112]

TASK:?[use?when]?**************************************************************?
skipping:?[127.0.0.1]?????????????/忽略过不符合要求的主机
changed:?[192.168.1.112]

PLAY?RECAP?********************************************************************?
127.0.0.1??????????????????:?ok=1????changed=0????unreachable=0????failed=0???
192.168.1.112??????????????:?ok=2????changed=1????unreachable=0????failed=0

在客户端检查一下,playbook命令的执行的情况:

代码语言:javascript
复制
[root@client?~]#?ll??/tmp/when.txt??/已经创建了文件!
-rw-r--r--?1?root?root?0?Mar??9?05:28?/tmp/when.txt
[root@client?~]#

playbook的handlers应用:

执行完tasks的任务之后,服务器的配置发生了一些变化,但是我们仍需要操作,这时候就可以调用handlers:譬如,我们修改了nginx的配置文件,之后需要它重启,这时候我们就可以调用handlers:

代码语言:javascript
复制
[root@master?ansible]#?vim?1.yml?

---
-?hosts:?192.168.1.112
??name:?handlers?test
??tasks:
????-?name:?copy?file
??????copy:?src=/etc/passwd?dest=/tmp/aaa.txt??????/copy了一个文件,但我们又需要把文件给重定向!
??????notify:?test?handlers??????/notify的作用就是调用handlers模块

??handlers:
????-?name:?test?handlers
??????shell:?echo?"11111"?>?/tmp/aaa.txt

ansible的copy模块和rsync的功能比较像,若目的地址原来就有一个目的文件,ansible会判断内容是否相同,若相同则不会覆盖原来就有的文件,若内容不相同则会完成copy动作!

执行过程:

代码语言:javascript
复制
[root@master?ansible]#?ansible-playbook?1.yml?

PLAY?[handlers?test]?**********************************************************?

GATHERING?FACTS?***************************************************************?
ok:?[192.168.1.112]

TASK:?[copy?file]?*************************************************************?
changed:?[192.168.1.112]

NOTIFIED:?[test?handlers]?*****************************************************?
changed:?[192.168.1.112]

PLAY?RECAP?********************************************************************?
192.168.1.112??????????????:?ok=3????changed=2????unreachable=0????failed=0

在客户端检测一下:是否有文件copy,并且还被重定向!

代码语言:javascript
复制
[root@client?~]#?ll??/tmp/when.txt?
-rw-r--r--?1?root?root?0?Mar??9?05:28?/tmp/when.txt
[root@client?~]#?cat?/tmp/aaa.txt?
11111
[root@client?~]#
本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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