ansible批量管理服務 下


1 ansible-playbook 任務劇本

1.1 劇本文件概念

(1)playbook可以將多個批量操作模塊功能整合,完成一件事情。
(2)簡化運維工作復雜度
(3)playbook通過yaml語法識別描述的狀態文件,擴展名是yaml

1.2 劇本文件組成部分

(1)劇本的角色(hosts)定義的是主機信息
(2)劇本的任務(tasks)定義的是具體任務信息
(3)一個劇本文件有多個hosts組成,一個hosts可以包含多個tasks任務

1.3 劇本文件優勢特點

(1)實現自動化功能更加全面
(2)可以更好的控制邏輯關系
(3)劇本展現命令語法更直觀
(4)擁有持久反復執行的特性

1.4 劇本文件編寫規范

(1)縮進特點:  兩個空格表示一個縮進關系
(2)冒號用法:  冒號后面需要有空格  冒號結尾不需要有空格
主機信息: 172.16.1.41   --- key: value (鍵值寫法)
(3)列表用法:  利用短橫線加空格構建列表清單

1.5 劇本執行使用方法

(1)檢查劇本語法:ansible-playbook --syntax-check test.yaml
(2)劇本模擬執行:ansible-playbook -C test.yaml
(3)劇本真實運行:ansible-playbook  test.yaml

1.6 劇本編寫擴展功能

(1)劇本變量編寫功能
(2)劇本信息通知功能
(3)劇本信息判斷功能
(4)劇本信息循環功能
(5)劇本編寫忽略錯誤
(6)劇本標簽設置功能
(7)劇本忽略采集功能
(8)劇本信息觸發功能

1.6.1 劇本變量編寫功能

設置變量方法一: 在劇本執行命令參數中設置變量,命令行最優先

[root@m01 ansible_playbook]#ansible-playbook -e dir=/etc -e file=rsyncd.conf test_變量編寫.yaml

設置變量方法二: 在劇本中設置變量,劇本變量其次優先

[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 }}/
# {{}}調用變量

設置變量方法二: 在主機清單中設置變量,主機清單變量最不優先

[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 劇本信息通知功能

編輯劇本

[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 將輸出的信息變得有格式

運行劇本

[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 劇本信息判斷功能

nfs服務客戶端三台主機
centos7  10.0.0.7、centos6  10.0.0.8、centos7  10.0.0.9
此時在批量啟動的時候需要進行判斷,因為centos6,centos7啟動命令不一樣
判斷的格式

- 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模塊:收集遠程主機信息
語法:

[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 過濾 篩選

實現收集子信息的方法

問題: 獲取主機信息,以及子信息
方法一:
- 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模塊常用來收集的信息
image.png
根據 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")

運行劇本

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 劇本信息循環功能

循環創建多個用戶

[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

循環創建多個用戶  多個用戶uid數值是不同的

[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 劇本編寫忽略錯誤功能

忽略功能主要用來調試劇本

[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

在使用shell進行一些操作時,shell產生的結果已經存在時,會導致劇本無法進行下去,因此使用忽略功能可以有效的使劇本進行下去。

1.6.6 劇本標簽設置功能

標簽功能主要用來調試劇本
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

運行劇本

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 劇本忽略采集功能

[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	

當劇本采集大量主機信息時,可能會變得卡,慢,影響劇本后面的操作執行的效率。所以在這個時候,可以忽略采集功能,提高效率,在hosts下面添加 gather_facts: no
如果劇本中有判斷功能,不能使用此參數,因為采集的信息會與判讀信息對比

1.6.8 劇本信息觸發功能

編寫劇本

[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:一般用於配置文件修改時,才會進行觸發功能,對服務進行重啟
notify:傳輸配置文件過來,notify通知rsync_restart這個觸發器。然后handlers會進行重啟服務
說明: 整體任務執行完畢,才會執行觸發功能

1.7 編寫劇本練習題

要求:
(1)在172.16.1.41主機上操作:
       ①將定時任務服務停止
       ②創建一個/etc/目錄軟連接 在/opt目錄中生成  
       ③將本地/etc/hosts文件分發給41主機 保存到/tmp目錄中
(2)在172.16.1.31主機上操作:
       ①將防火牆服務開機自動運行
       ②將主機上安裝keepalived軟件
實踐:
編寫劇本文件

[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

劇本語法檢查

# 語法檢查劇本文件
[root@m01 ansible_playbook]#ansible-playbook --syntax-check test.yaml 

playbook: test.yaml

劇本模擬執行

[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   

劇本真實執行

[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   

補充:
如果系統中裝有cowsay軟件,在執行命令時,會產生圖案信息,影響查閱結果,可以關閉。

[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一鍵化部署

第一個歷程: 按照模塊方式,完成服務每個步驟部署
第一步:服務端配置

# 安裝軟件程序
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"

第二步:客戶端配置

# 創建密鑰文件 (授權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 rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password"

第二個歷程: 編寫劇本信息

[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

恢復環境劇本

[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劇本實現nfs一鍵化部署

第一個歷程: 按照模塊方式,完成服務每個步驟部署

服務端配置 
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"

第二個歷程編寫劇本:

[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

恢復環境劇本

[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

優化劇本:

[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劇本實現sersync一鍵化部署

第一個歷程: 按照模塊方式,完成服務每個步驟部署

配置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"

第二個歷程,編寫劇本

[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

恢復環境劇本

[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

2 多個劇本如何進行整合

第一個歷程: 確保每個劇本執行成功
第二個歷程: 進行劇本整合
方法一:不建議使用

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

方法二:在以后的ansible中可能會取消include功能

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

方法三:建議使用這個方法

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

3 ansible劇本編寫方式:角色

(1)規范ansible程序目錄結構
(2)匯總劇本中有定義的主機信息

3.1 角色調用流程圖

角色.png

3.2 nfs服務角色編寫

第一個歷程: 創建角色目錄結構

cd roles/;mkdir {nfs,rsync,web,sersync} 
cd nfs/{vars,tasks,templates,handlers,files}
# vars:      定義變量信息
# tasks:     定義任務信息
# templates: 定義模板文件(jinja2模板文件)
# handlers:  定義觸發器信息
# files:     定義需要分發的文件

第二個歷程: 編寫文件信息
tasks:  任務信息編寫方式一:
nfs服務編寫

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:  任務信息編寫方式二:
tasks:定義任務信息

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:定義變量信息

vim main.yaml
conf_file: exports
data_dir: /data

files:定義需要分發的文件

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

handlers:定義觸發器信息

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM