天天看点

Ansible 导入剧本(import_playbook)和导入任务(import_tasks)

如果你的playbook包含了许多许多的功能,即包含了多个play,那么你需要整合所有任务到单个playbook中

这里将前面所有playbook集合到单个playbook文件中去,这样就可以一次性执行所有任务。比如下面所示,这里只是举个例子,没有将全部展示出来。

Ansible 导入剧本(import_playbook)和导入任务(import_tasks)

 内容很长,可能你也感受到了,可读性很差,维护也很不方便。

更友好的一种组织方式是将各个任务分类,各自存放在不同的playbook文件中(就像未整合那样),然后使用一个入口playbook文件引入所有任务文件。

例如∶

(1)配置主机SSH连接互信的任务放在sshkeyyaml

(2)设置主机名的任务放在hostname yaml

(3)互相添加DNS解析记录的任务放在add_dns yaml

(4)配置yum源并安装常用软件包的任务放在add_repos.yaml

(5)时间同步的任务放在synctime.yaml

(6)禁用selinux的任务放在disable_selinux.yaml

(7)配置防火墙的任务放在iptables.yaml

(8)修改sshd配置文件的任务放在sshd_confg yaml

因为这些任务都是初始化服务器的任务,所以将这些任务文件共同存在一个单独的目录中(比如initserver目录),则效果更佳。

最后,通过一个入口文件引入所有这些任务文件将它们组织起来。假设入口文件名为main.yaml,其内容为∶

---
- import_playbook:"init_server/sshkey.yaml"
- import_playbook:"init_server/hostname.yaml"
- import_playbook:"init_server/add_dns.yaml"
- import_playbook:"init_server/add_repos.yaml"
- import playbook:"init_server/synctime.yaml"
- import_playbook:"init_server/disable_selinux.yaml"
- import_playbook:"init_server/iptables.yaml"
- import_playbook:"init_server/sshd_config.yaml"      

然后使用ansible-playbook去执行这个入口playbook文件即可∶

$ ansible-playbook main.yaml      

如此一来,各个任务自治,维护起来更为容易。

一、导入剧本(import_playbook)

注意:导入的剧本必须要写完整,包括hosts、tasks

1、写导入的剧本import_playbook.yml

vim import_playbook.yml
---
- name: this is import_play
  hosts: servera
  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: latest
              

2、写主要playbook.yml

vim playbook.yml
---
- name: import
  import_playbook: import_playbook.yml
- name: this is main_play
  hosts: servera
  tasks:
    - name: start httpd
      service:
        name: httpd
        state: started
        enabled: yes      

ansible官方例子 

- hosts: localhost
  tasks:
    - debug:
        msg: play1

- name: Include a play after another play
  import_playbook: otherplays.yaml


- name: This DOES NOT WORK
  hosts: all
  tasks:
    - debug:
        msg: task1

    - name: This fails because I'm inside a play already
      import_playbook: stuff.yaml      

二、导入任务(import_tasks)

vim import_tasks.yml
---
 - name: install httpd
   yum:
     name: httpd
     state: latest
              
vim playbook.yml
---
- name: this is main_play
  hosts: servera
  tasks:
    - name: import
      import_tasks:import_tasks.yml      

继续阅读