Under ansible batch management services

1 ansible-playbook task script

1.1 Script File concept

(1) playbook can be multiple batch operation module functional integration, complete thing.
Complexity (2) simplified operation and maintenance
(3) playbook recognition grammar described by yaml state file name extension is yaml

1.2 part of the script file

(1) play the role of (hosts) is defined host information
(2) script task (tasks) are defined by specific task information
(3) a script file composed of a plurality of hosts, a plurality of tasks can include tasks hosts

1.3 Script File Benefits Features

(1) automation is more comprehensive
(2) can better control logic
(3) Screenplay show more intuitive command syntax
(4) has the characteristics of enduring repeated

Write the script file specification 1.4

(1) indent Features: two spaces for an indent a relationship
(2) Use a colon: after the colon needs to have trailing spaces colon does not need a space
Host Information: 172.16.1.41 --- key: value (key wording)
( 3) a list of usage: use a dash spaces to build a list of list

Use script execution 1.5

(1) check the syntax of the script: ansible PlayBook --syntax-Check-test.yaml
(2) simulation execution script: ansible-test.yaml PlayBook -C
(. 3) plays a real run: ansible-playbook test.yaml

1.6 screenplay written extensions

(1) script variable write function
(2) script information notification function
(3) script information determination function
(4) script information circulatory function
(5) the scripting ignore errors
(6) script tag setting function
(7) script ignore acquisition function
( 8) script triggering feature information

Write feature script variables 1.6.1

The method set variables: Set variable parameter script execution command, the highest priority command

[root@m01 ansible_playbook]#ansible-playbook -e dir=/etc -e file=rsyncd.conf test_变量编写.yaml

Method two set variables: Variables provided in the script, the script variable priority followed by

[root@m01 ansible_playbook]#vim test_变量编写.yaml 
- hosts: 172.16.1.41
  vars:
    dir: /etc
    file: rsyncd.conf
  tasks:
   - name: copy file 
     copy: src={{ dir }}/{{ file }} dest={{ dir }}/
# {{}}调用变量

Set variables Method Two: Set the variable in the list of hosts, the host variable list of the least priority

[root@m01 ansible_playbook]#vim /etc/ansible/hosts
[sersync_server]
172.16.1.31
[sersync_client]
172.16.1.41
[sersync_server:vars]
dir=/etc
file=rsyncd.conf
# 直接给主机组设置变量,这样主机组内的所有主机都可以调用变量了

1.6.2 script information notification function

Edit the script

[root@m01 ansible_playbook]#vim test_通知功能.yaml
- hosts: 172.16.1.41
  tasks:
    - name: boot server
      service: name=rsyncd state=started
    - name: check server boot
      shell: netstat -lntup|grep 873
      register: oldboy
    - debug: msg={{ oldboy.stdout_lines }}
# 将shell中命令执行结果通过register注册给oldboy,oldboy相当于一个变量,{{}}调取oldboy
# debug类似echo,输出信息
# stdout_lines 将输出的信息变得有格式

Run the script

[root@m01 ansible_playbook]#ansible-playbook test_通知功能.yaml 

PLAY [172.16.1.41] ***********************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.41]

TASK [boot server] ***********************************************************************************
ok: [172.16.1.41]

TASK [check server boot] *****************************************************************************
changed: [172.16.1.41]

TASK [debug] *****************************************************************************************
ok: [172.16.1.41] => {
    "msg": [
        "tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      3708/rsync          ", 
        "tcp6       0      0 :::873                  :::*                    LISTEN      3708/rsync          "
    ]
}

PLAY RECAP *******************************************************************************************
172.16.1.41                : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

1.6.3 script information determination function

nfs service clients three hosts
centos7 10.0.0.7, centos6 10.0.0.8, centos7 10.0.0.9
At this point in time to start the batch needs to be judged, because centos6, centos7 start command is not the same
judge format

- hosts: nfs_client
tasks:
- name: boot centos7 nfs
shell: systemctl start nfs 
判断: 如果是centos7 ???
- name: boot centos6 nfs 
shell: /etc/init.d/nfs start    
判断: 如果是centos6 ???

setup module: remote host information collection
syntax:

[root@m01 ansible_playbook]#ansible 172.16.1.41 -m setup -a "filter=ansible_hostname"
172.16.1.41 | SUCCESS => {
    "ansible_facts": {
        "ansible_hostname": "backup", 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

# filter 过滤 筛选

Implementation of the information collection sub

问题: 获取主机信息,以及子信息
方法一:
- hosts: rsync
  tasks:
    - name: touch file
      file: path=/etc/oldboy01.txt state=touch
      when: (ansible_eth1.ipv4.address == "172.16.1.41")
方法二:
- hosts: rsync
  tasks:
    - name: touch file
      file: path=/etc/oldboy01.txt state=touch
      when: (ansible_eth1["ipv4"]["address"] == "172.16.1.41")

setup module used to collect information
image.png
for determining the directory created in accordance with the address ip

[root@m01 ansible_playbook]#vim test_判断功能.yaml
- hosts: nfs_client
  tasks:
    - name: create file for 41 host
      file: path=/tmp/172.16.1.41 state=directory
      when: (ansible_hostname == "backup")
    - name: create file for 7 host
      file: path=/tmp/172.16.1.7  state=directory
      when: (ansible_hostname == "web01")

Run the script

root@m01 ansible_playbook]#ansible-playbook -C test_判断功能.yaml 

PLAY [nfs_client] ************************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.41]
ok: [172.16.1.7]

TASK [create file for 41 host] ***********************************************************************
skipping: [172.16.1.7]
changed: [172.16.1.41]

TASK [create file for 7 host] ************************************************************************
skipping: [172.16.1.41]
changed: [172.16.1.7]

PLAY RECAP *******************************************************************************************
172.16.1.41                : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
172.16.1.7                 : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

1.6.4 script information circulation

Loop to create multiple users

[root@m01 ansible_playbook]#vim test_循环功能.yaml
- hosts: 172.16.1.41
  tasks:
    - name: create user
      user: name={{ item }}
      with_items:
        - oldgirl01
        - oldgirl02
        - oldgirl03
        - oldgirl04
        - oldgirl05

Cycle multiple users to create multiple user uid values ​​are different

[root@m01 ansible_playbook]#vim test_循环功能.yaml
- hosts: 172.16.1.41
  tasks:
    - name: create user
      user: name={{ item.name }} uid={{ item.uid }}
      with_items:
        - {name: "oldgirl06", uid: "3006"}
        - {name: "oldgirl07", uid: "3007"}
        - {name: "oldgirl08", uid: "3008"}
        - {name: "oldgirl09", uid: "3009"}
        - name: check create user info
          shell: grep oldgirl0 /etc/passwd
          register: user_info
        - debug: msg={{ user_info.stdout_lines }}

1.6.5 the scripting function to ignore the error

Ignore function is mainly used to debug script

[root@m01 ansible_playbook]#vim test_h忽略功能.yaml
- hosts: 172.16.1.41
  tasks:
    - name: create rsync user
      shell: useradd rsync -M -s /sbin/nologin
      ignore_errors: yes
    - name: create backup dir
      shell: mkdir /backup
      ignore_errors: yes
    - name: boot server
      shell: systemctl start rsyncd
      ignore_errors: yes

When using the shell do something, when the result of shell generated already exists, will lead to the script can not continue, so using functions can effectively ignore the script to proceed.

1.6.6 script tag setting function

Tag function is used to debug the script
tags: Tags

[root@m01 ansible_playbook]#vim test_标签功能.yaml
- hosts: 172.16.1.41
  tasks:
    - name: 01:安装软件
      yum: name=rsync state=installed
      ignore_errors: yes
    - name: 02:创建用户
      user: name=rsync create_home=no shell=/sbin/nologin
      ignore_errors: yes
      tags: create_user
    - name: 03:创建目录
      file: path=/backup state=directory

Run the script

ansible-playbook -t create_user test_标签功能.yaml             --- 执行剧本中标签任务
ansible-playbook --skip-tags create_user test_标签功能.yaml    --- 跳过指定标签任务,执行其他任务
ansible-playbook -t create_user,create_dir test_标签功能.yaml  --- 执行多个标签
# -t=tags

1.6.7 script ignore collection feature

[root@m01 ansible_playbook]#vim test_忽略采集.yaml
- hosts: 172.16.1.41
  gather_facts: no
  tasks:
    - name: 01:安装软件
      yum: name=rsync state=installed
      ignore_errors: yes
    - name: 02:创建用户
      user: name=rsync create_home=no shell=/sbin/nologin
      ignore_errors: yes
      tags: create_user
    - name: 03:创建目录
      file: path=/backup state=directory
      tags: create_dir  

When the script collect a large number of host information, the card may become slow, affecting the efficiency of the back of the script to perform. So at this time, you can ignore the collection function, improve efficiency, add gather_facts hosts in the following: no
, if there is to determine the function of the script, you can not use this parameter, because the information will contrast with the interpretation of the information collection

1.6.8 script triggering feature information

Dramatize

[root@m01 ansible_playbook]#vim test_触发功能.yaml
- hosts: 172.16.1.41
  tasks:
    - name: 01:传输配置文件
      copy: src=/etc/ansible/ansible_playbook/rsyncd.conf dest=/etc/
      notify: rsync_restart
    - name: 02:启动服务程序
      service: name=rsyncd state=started
  handlers:
    - name: rsync_restart
      service: name=rsyncd state=restarted

handlers: generally used to modify the configuration file, the function will be triggered, the service restart
notify: transmission profiles over, notify notify rsync_restart the trigger. Then handlers will restart the service
Description: The overall task is finished, will perform triggering

1.7 screenplay writing exercises

Requirements:
(1) on the host operating 172.16.1.41:
       ① task service stop timing
       ② create a / etc / directory generated in the flexible connection / opt directory  
       ③ local / etc / hosts file distributed to the host 41 saved to / tmp directory
(2) on the host operating 172.16.1.31:
       ① firewall service to start automatically
       ② software will be installed on the host keepalived
practice:
writing the script file

[root@m01 ansible_playbook]#vim test.yaml 
- hosts: 172.16.1.41
  tasks:
    - service: name=crond state=stopped
    - file: src=/etc path=/opt/etc_link state=link
    - copy: src=/etc/hosts dest=/tmp
- hosts: 172.16.1.31
  tasks:
    - service: name=firewalld enabled=yes
    - yum: name=keepalived state=installed

Script syntax check

# 语法检查剧本文件
[root@m01 ansible_playbook]#ansible-playbook --syntax-check test.yaml 

playbook: test.yaml

Simulation script execution

[root@m01 ansible_playbook]#ansible-playbook -C test.yaml

PLAY [172.16.1.41] ***********************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.41]

TASK [service] ***************************************************************************************
ok: [172.16.1.41]

TASK [file] ******************************************************************************************
ok: [172.16.1.41]

TASK [copy] ******************************************************************************************
ok: [172.16.1.41]

PLAY [172.16.1.31] ***********************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.31]

TASK [service] ***************************************************************************************
ok: [172.16.1.31]

TASK [yum] *******************************************************************************************
ok: [172.16.1.31]

PLAY RECAP *******************************************************************************************
172.16.1.31                : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.16.1.41                : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Screenplay real execution

[root@m01 ansible_playbook]#ansible-playbook test.yaml

PLAY [172.16.1.41] ***********************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.41]

TASK [service] ***************************************************************************************
ok: [172.16.1.41]

TASK [file] ******************************************************************************************
ok: [172.16.1.41]

TASK [copy] ******************************************************************************************
ok: [172.16.1.41]

PLAY [172.16.1.31] ***********************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.31]

TASK [service] ***************************************************************************************
ok: [172.16.1.31]

TASK [yum] *******************************************************************************************
ok: [172.16.1.31]

PLAY RECAP *******************************************************************************************
172.16.1.31                : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.16.1.41                : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

NOTE:
If the system is equipped with cowsay software, executing commands, will generate pattern information, the impact review results, it can be closed.

[root@m01 ansible]#vim ansible.cfg 
# don't like cows?  that's unfortunate.
# set to 1 if you don't want cowsay support or export ANSIBLE_NOCOWS=1
# nocows = 1
把# nocows = 1 中的 # 去掉即可。

1.8 ansible rsync script to achieve a key deployment

The first course: The module of embodiment, each step to complete the service deployment
Step: Configuration server

# 安装软件程序
ansible rsync -m yum -a "name=rsync state=installed"
# 编写配置文件:要在批量管理主机上提前写好,然后推送给服务端
# 在管理端准备好服务配置文件
ansible rsync_server -m copy -a "src=/etc/ansible/conf_file/rsyncd.conf dest=/etc/"
# 创建虚拟用户
ansible rsync_server -m user -a "name=rsync create_home=no shell=/sbin/nologin"
# 创建密码文件 (授权600)
ansible rsync_server -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"
# 创建备份目录 (授权 属主 属组)
ansible rsync_server -m file -a "path=/backup state=directory owner=rsync group=rsync"
@ 启动程序服务
ansible rsync_server -m service -a "name=rsyncd state=started enabled=yes"

Step Two: Client Configuration

# 创建密钥文件 (授权600)
ansible rsync_client -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"
# 批量测试传输文件
ansible rsync_client -m shell -a "rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password"

Second course: writing the script information

[root@m01 ansible_playbook]#vim rsync_auto.yaml 
- hosts: rsync_server
  tasks:
    - name: 01:install rsync
      yum: name=rsync state=installed
    - name: 02:copy conf file
      copy: src=/etc/ansible/conf_file/rsyncd.conf dest=/etc/
    - name: 03:create rsync user
      user: name=rsync create_home=no shell=/sbin/nologin
    - name: 04:create password file
      copy: content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600
    - name: 05:create backup dir
      file: path=/backup state=directory owner=rsync group=rsync
    - name: 06:boot rsync server
      service: name=rsyncd state=started enabled=yes

- hosts: rsync_client
  tasks:
    - name: 01:create password file
      copy: content='oldboy123' dest=/etc/rsync.password mode=600

Recovery Environment screenplay

[root@m01 ansible_playbook]#vim rsync_backup.yaml 
- hosts: rsync_server
  tasks:
    - name: 01:delete conf file
      file: path=/etc/rsyncd.conf state=absent
    - name: 02:delete rsync user
      user: name=rsync state=absent 
    - name: 03:delete password file
      file: path=/etc/rsync.password state=absent
    - name: 04:delete backup dir
      file: path=/backup/ state=absent
    - name: 05:boot rsync server
      service: name=rsyncd state=stopped enabled=no

- hosts: rsync_client
  tasks:
    - name: 01:delete password file
      file: path=/etc/rsync.password state=absent

1.9 ansible play a key deployment achieved nfs

 First course: according to a modular fashion, each step to complete the service deployment

服务端配置 
01. 安装部署软件程序: rpcbind nfs-utile
ansible nfs_server -m yum -a "name=rpcbind state=installed"
ansible nfs_server -m yum -a "name=nfs-utile state=installed"
02. 编写配置文件:配置文件要提前写好
# 批量管理主机写好的配置文件推送给服务端/etc/ansible-playbook/nfs.conf 
ansible nfs_server -m copy -a "src=/etc/ansible/ansible_playbook/nfs.conf  dest=/etc/exports"
03. 创建共享目录:
ansible nfs_server -m file -a "path=/data/ state=directory owner=nfsnobody group=nfsnobody"
04. 启动程序服务:
ansible nfs_server -m service -a "name=rpcbind state=started enabled=yes"
ansible nfs_server -m service -a "name=nfs state=started enabled=yes"
    
客户端配置:
01. 安装部署软件 
ansible nfs_client -m yum -a "name=nfs-utile state=installed"
02. 挂载共享目录
ansible nfs_client -m mount -a "src=172.16.1.31:/data/ path=/mnt fstype=nfs state=mounted"

The second course of writing the script:

[root@m01 ansible_playbook]#vim nfs_auto.yaml 
- hosts: nfs_server
  tasks:
    - name: 1:install rpcbind nsf-utils
      yum:
        name:
          - rpcbind
          - nfs-utils
        state: installed
    - name: 2:copy conf file
      copy: src=/etc/ansible/ansible_playbook/nfs.conf dest=/etc/exports
    - name: 3:create data dir
      file: path=/data/ state=directory owner=nfsnobody group=nfsnobody
    - name: 4:boot server rcbind
      service: name=rpcbind state=started enabled=yes
    - name: 4:boot server nfs
      service: name=nfs state=restarted enabled=yes
- hosts: nfs_client
  tasks:
    - name: 1:install nfs
      yum: name=nfs-utils state=installed
    - name: 2:mount data dir
      mount: src=172.16.1.31:/data/ path=/mnt fstype=nfs state=mounted

Recovery Environment screenplay

[root@m01 ansible_playbook]#vim nfs_backup.yaml 
- hosts: nfs_server 
  tasks:
    - name: 01:install rpcbind nfs-utils
      yum:
        name:
          - rpcbind
          - nfs-utils
        state: removed
    - name: 02:copy conf file
      shell: echo ""  >/etc/exports
    - name: 03:create data dir
      file: path=/data/ state=absent
- hosts: nfs_client
  tasks:
    - name: 01:install nfs
      yum: name=nfs-utils state=removed
    - name: 02:mount data dir
      mount: src=172.16.1.31:/data/ path=/mnt fstype=nfs state=unmounted

Optimization script:

[root@m01 ansible_playbook]#vim nfs_auto.yaml 
- hosts: nfs_server
  vars:
    conf_file: exports
    data_dir: /data
  tasks:
    - name: 01:install nfs rpcbind
      yum:
        name: ['nfs-utils', 'rpcbind'] 
        state: installed
    - name: 02:copy conf file
      copy: src=/etc/ansible/ansible_playbook/nfs.conf  dest=/etc/{{ conf_file }}
      notify: 
        - nfs_restart
    - name: 03:create data dir
      file: path={{ data_dir }} state=directory owner=nfsnobody group=nfsnobody
    - name: 04:boot server rpcbind
      service: name={{ item.name }} state={{ item.state }} enabled={{ item.enabled }}
      with_items:
        - {name: "rpcbind", state: "started", enabled: "yes"}
        - {name: "nfs",     state: "started", enabled: "yes"}
  handlers:
    - name: nfs_restart
      service: name=nfs state=reloaded
- hosts: nfs_client
  vars:
    data_dir: /data
  tasks:
    - name: 01:install nfs
      yum: name=nfs-utils state=installed
    - name: 02:mount data dir
      mount: src=172.16.1.31:{{ data_dir }} path=/mnt fstype=nfs state=mounted
    - name: 03:check mount info
      shell: df -h|grep mnt
      register: mount_info
    - debug: msg={{ mount_info.stdout_lines }}

1.10 ansible play a key deployment to achieve sersync

 First course: according to a modular fashion, each step to complete the service deployment

配置hosts主机清单
[server_server]
172.16.1.31
[server_client]
172.16.1.41

#安装rsync
ansible backup_server -m yum -a "name=rsync state=installed"
#在批量管理主机上下载sersync,解压发送给客户端
ansible backup_server -m file -a "src=/usr/local/sersync_installdir_64bit/sersync dest=/usr/local"
#在批量管理主机上写好sersync配置文件,发送给客户端
ansible backup_server -m copy -a "src=/usr/local/sersync_installdir_64bit/sersync/conf/confxml.xml dest=/usr/local/sersync/conf/"
#给sersync加上执行权限
ansible backup_server -m file -a "path=/usr/local/sersync/bin/sersync mode=a+x"
#给sersync创建软链接
ansible backup_server -m file -a "src=/usr/local/sersync/bin/sersync path=/usr/local/sbin/sersync state=link"
#启动sersync 测试实时同步
ansible backup_server -m shell -a "sersync -dro /usr/local/sersync/conf/confxml.xml"

The second course, writing the script

[root@m01 ansible_playbook]#vim sersync_auto.yaml 
- hosts: sersync_server
  tasks:
    - name: 安装rsync
      yum: name=rsync state=installed
    - name: 将sersync传输到客户端
      file: src=/usr/local/sersync_installdir_64bit/sersync/ dest=/usr/local
    - name: 将写好的配置文件传输到客户端
      copy: src=/usr/local/sersync_installdir_64bit/sersync/conf/confxml.xml dest=/usr/local/sersync/conf/
    - name: 加上执行权限
      file: path=/usr/local/sersync/bin/sersync mode=a+x
    - name: 创建软链接
      file: src=/usr/local/sersync/bin/sersync path=/usr/local/sbin/sersync state=link
    - name: 启动sersync 测试实时同步
      shell: sersync -dro /usr/local/sersync/conf/confxml.xml

Recovery Environment screenplay

[root@m01 ansible_playbook]#cat sersync_backup.yaml
- hosts: sersync_server
  tasks:
    - name: 卸载rsync 
      yum: name=rsync state=removed
    - name: 删除sersync
      file: path=/usr/local/sersync

How to integrate multiple script 2

First course: Make sure that each script is executed successfully
the second course: the script 's integrated
one: not recommended

[root@m01 ansible_playbook]#vim zhenghe.yaml  # ---角色里使用
- hosts: all
  remote_user: root
  tasks:
    - include_tasks: nfs_auto.yml
    - include_tasks: rsync_auto.yml
# 不写hosts信息,只写任务信息

Method two: After the ansible may be canceled include function

[root@m01 ansible_playbook]#vim zhenghe.yaml 
- include:nfs_auto.yml  
- include:rsync_auto.yml

Method three: It is recommended to use this method

[root@m01 ansible_playbook]#vim zhenghe.yaml 
- import_playbook: nfs_auto.yaml     
- import_playbook: rsync_auto.yaml 

3 ansible script written in a way: Role

(1) Specification ansible directory structure
(2) with a host information summary script defined

3.1 Role call flow diagram

Role .png

Write 3.2 nfs service role

First course: create a role directory structure

cd roles/;mkdir {nfs,rsync,web,sersync} 
cd nfs/{vars,tasks,templates,handlers,files}
# vars:      定义变量信息
# tasks:     定义任务信息
# templates: 定义模板文件(jinja2模板文件)
# handlers:  定义触发器信息
# files:     定义需要分发的文件

Second course: write file information
tasks: task information written in a way:
nfs service writing

vim main.yaml
- name: 01:install nfs rpcbind
  yum:
    name: ['nfs-utils', 'rpcbind'] 
    state: installed
- name: 02:copy conf file
  copy: src=/etc/ansible/ansible_playbook/nfs.conf  dest=/etc/{{ conf_file }}
  notify: 
    - nfs_restart
- name: 03:create data dir 
  file: path={{ data_dir }} state=directory owner=nfsnobody group=nfsnobody
- name: 04:boot server rpcbind
  service: name={{ item.name }} state={{ item.state }} enabled={{ item.enabled }}
  with_items:
    - {name: "rpcbind", state: "started", enabled: "yes"}
    - {name: "nfs",     state: "started", enabled: "yes"}
- name: 01:install nfs
  yum: name=nfs-utils state=installed
- name: 02:mount data dir
  mount: src=172.16.1.31:{{ data_dir }} path=/mnt fstype=nfs state=mounted
- name: 03:check mount info
  shell: df -h|grep mnt
  register: mount_info
- debug: msg={{ mount_info.stdout_lines }}

tasks: task information write Second way:
tasks: define the task information

cd tasks
vim main.yaml
vim nfs_boot.yaml
vim nfs_conf.yaml
vim nfs_datadir.yaml
vim nfs_install.yaml
vim nfs_mount.yaml
#########################
vim main.yaml
- include_tasks: nfs_install.yaml
- include_tasks: nfs_conf.yaml
- include_tasks: nfs_datadir.yaml
- include_tasks: nfs_boot.yaml
- include_tasks: nfs_mount.yaml

vars: definition of variable information

vim main.yaml
conf_file: exports
data_dir: /data

files: file defines the need to distribute

[root@m01 files]# ll
total 4
-rw-r--r-- 1 root root 42 Jul 29 10:34 nfs.conf

handlers: define the trigger information

vim main.yaml 
- name: nfs_restart
service: name=nfs state=reloaded

Guess you like

Origin www.cnblogs.com/basa/p/11300911.html