ansible Playbooks组件的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41772936/article/details/83021954

一、ansible Playbook 简单介绍。

       ansible可以使用普通命令的方式管理主机,如果服务器数量多的话,配置信息比较多,一个一个的敲出来就有点繁琐了,还容易出错,这时可以使用ansible playbook 编写剧本,从而实现更加简便的方式实现任务处理的自动化与流程化。

       playbook其实就像shell脚本一样,脚本是由多个命令组成,而playbook由多个任务,多个模块组成一个完整的流程控制集合。

二、基本语法书写。

Playbook主要有以下四部分构成:

  1. target:定义将要执行playbook的远程主机组
  2. variable:定义playbook运行时需要使用的变量
  3. task :定义将要在远程主机上执行的任务列表
  4. handler:定义task执行完成以后需要调用的任务

下面是一个很基本的剧本(Playbook又称为剧本)

---
- hosts: web
  remote_user: root
  tasks:
    - name: install httpd
      yum: name=httpd state=installed
    - name: add index file
      copy: src=/root/index.html dest=/var/www/html/index.html
    - name: start service
      service: name=httpd state=started enabled=yes

解析如下:

---  #三个杠表示剧本文件的开头
- hosts: web #执行任务的主机列表,这里是给web主机组
  remote_user: root  #远程执行用户
  tasks:  #任务的开始
    - name: install httpd  #每一个tasks必须有一个名称name,可以理解为一个标记,执行时可以看到
      yum: name=httpd state=installed  #使用yum模块执行安装http的功能
    - name: add index file
      copy: src=/root/index.html dest=/var/www/html/index.html #使用copy模块复制主页文件
    - name: start service
      service: name=httpd state=started enabled=yes  #使用service模块开启服务

 其中要注意:

同级的缩进要对齐,hosts,remote_user,tasks 就是同级

每一个模块都使用key=value格式如remote_user: root  冒号后面有空格

remote_user: root  对应 key: value 如果不明白key=value 就记住模块后面等于值,写的时候冒号加空格

三、剧本的使用

ansible-playbook -C inshttp.yml 

ansible-playbook(命令) -C(选项) inshttp.yml(剧本文件) 一般直接命令加文件也可以

  -C选项 可以检查语法是否有问题,不真实执行。
 

可以看到:ok =4 说明语法没问题 chenged=0 说明没有做改变。

下面使用ansible-playbook inshttp.yml 执行一下

可以看到有三处改变。

如果没问题被控端会安装好http,拷贝文件,并开启服务。

这里是被控端的截图:

这就是一个最基本的使用了。

四、Handlers的使用

handler:定义task执行完成以后需要调用的任务

handlers能用到什么地方呢?

举例:如果配置文件需要修改,比如现在要修改index.html的内容,修改过后再次执行,那么ansible会把新的文件拷贝过去,但是不会重启服务,我们的修改就没有意义了。这时可以使用handlers。

handler由 notify和handlers组成,notify位置的任务执行那么会调用handlers里的任务,下面是一个修改文件后执行重启的例子。

---
- hosts: web
  remote_user: root
  tasks:
    - name: install httpd
      yum: name=httpd state=installed
    - name: add index file
      copy: src=/root/index.html dest=/var/www/html/index.html
      notify: restart httpd #notify这里的任务如果执行,就会触发下面handlers模块的restart httpd 任务,这里notify仅监控添加文件这一段
    - name: start service
      service: name=httpd state=started enabled=yes

  handlers:#这里的任务可以有多个
    - name: restart httpd
      service: name=httpd state=restarted

这里修改了文件内容:

执行后可以看到文件修改并重启了。

五、tags标签的使用

tags用于让用户选择运行或略过playbook中的部分代码。

- hosts: web
  remote_user: root
  tasks:
    - name: install mem
      yum: name=memcached state=installed
      tags: insmem #这里为任务添加了一个标签,可以选择仅执行此任务
    - name: add index file
      copy: src=/root/index.html dest=/var/www/html/index.html
      tags: addfile#这里也是
      notify: restart httpd
    - name: start service
      service: name=httpd state=started enabled=yes
      tags: staservice #这里也是

  handlers:
    - name: restart httpd
      service: name=httpd state=restarted

ansible-playbook -t insmem inshttp.yml   仅执行insmem标签的任务其他任务忽略,也可以同时执行多个标签,逗号隔开。

六、变量的使用

变量的三种定义方式:

1,hosts文件中定义

在 /etc/ansible/hosts文件中定义filename变量,值是aaa

下面使用变量查看效果

 ansible-playbook a.yml 会报一下警告:这个警告的意思是现在使用的shell模块创建文件,推荐使用file模块

执行后效果如下:

2,在剧本文件中定义

插入了以下两行:

  vars:
  - filename: bbb

执行效果如下:

可以看到剧本中的变量定义优先级大于hosts文件

3,在命令行定义

ansible-playbook -e 'filename=ccc' a.yml
-e 指定变量

执行效果如下:

以上就是3种定义变量的方式了。

七、templates的使用

templates的作用就是根据变量动态生成不同的文件,templates文件必须放于templates目录下,

templates目录要和剧本文件同一个位置。

下面提一个需求,默认安装好http是监听了本机所有ip,现在要求监听自己的指定ip。

为了看出效果,这里准备两个http服务器。

ansible web -m setup 是ansible的一个模块,执行后可以看到每个机器的各种信息。

ansible web -m setup|grep address 可以使用过滤,找到ip地址对应的变量

可以看到变量address对应了ip地址

知道了ip的变量后开始创建templates模板、

首先在剧本文件相同位置创建一个名为templates的目录、

然后将模板文件拷贝到这下面

mkdir templates   
cp /etc/httpd/conf/httpd.conf templates/httpd.conf.j2

hosts添加变量:

然后修改模板文件

vim templates/httpd.conf.j2

下面修改剧本:

这里一般配合Handlers使用,修改后重启

ansible-playbook a.yml 

执行后结果:

192.168.43.20的配置文件如下:

192.168.43.31的配置文件如下:

下面是一个模板拷贝后重启的写法:

---
- hosts: web
  remote_user: root
  tasks:
    - name: copy file
      template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify: restart httpd

  handlers:
    - name: restart httpd
      service: name=httpd state=restarted

好了,为了篇幅不是太长,这里就先结束了。后续更新其他Playbooks内容,希望对你有所帮助!!

下面是我朋友的博客,发的博文挺不错!大家可以去看一下,了解 了解。

https://blog.csdn.net/qq_39591494

猜你喜欢

转载自blog.csdn.net/qq_41772936/article/details/83021954