天天看點

ansible劇本功能編寫

實驗環境:centos7.6,2G記憶體,50G硬碟大小,虛拟機服務端ip:172.16.1.61 用戶端ip:172.16.1.7,172.16.1.41,172.16.1.31

劇本的編寫方法

作用:

1.可以同時對多個主機進行處理

2.可以一鍵化完成多個任務

編寫規範:

1.合理的資訊縮進,兩個空格表示一個縮進關系

标題一:
  标題二:
    标題三:
           

PS:在ansible中一個不能用tab進行縮進

2.冒号的使用方法

hosts: 172.16.1.41
tasks: 
yum: name=xx
           

ps:使用冒号時後面要加空格,才能寫資訊

以冒号結尾,冒号資訊出現在注釋說明中,後面不需要與空格

3.短橫線應用-(清單功能)

- hosts: 172.16.1.31
  tasks: 
  - name: install nfs
    yum: 
           

ps:使用短橫線構成清單資訊,短橫線後面需要有空格

編寫劇本

第一步:建立目錄

mkdir /etc/ansible/ansible-playbook
           

第一步:編寫腳本

vim rsync_server.ymal
           

ps:1.劇本的檔案擴充名盡量寫成yaml

2.檔案編寫時會有顔色提示

ansible劇本功能編寫

第二步:執行劇本

1.檢查劇本的文法格式

ansible劇本功能編寫

出現上面圖檔這樣,代表沒有文法錯誤

2.模拟執行腳本

ansible劇本功能編寫

可以看到模拟執行沒有問題

3.真正執行劇本

ansible劇本功能編寫

因為我之前執行過了,是以這裡顯示全部為綠色,如果沒有執行過,執行成功會顯示黃色.

到此,一個簡單的劇本就編寫完成了.

劇本編寫常見錯誤:

1.劇本文法規範是否符合(空格 冒号 短橫線)

2.劇本中子產品使用是否正确

3. 劇本中一個name辨別下面隻能寫一個子產品(相同可以)任務資訊

4. 劇本中盡量不要大量使用shell子產品

劇本編寫擴充

1.配置主機清單方式

1.分組配置主機資訊

[web]
172.16.1.7
172.16.1.8
172.16.1.9
[nfs]
172.16.1.31
[backup]
172.16.1.41
           

2.主機名符号比對配置

[web]
172.16.1.[7:9]
           

3.加上非标準遠端端口

[web]
web01:1314			--主機名
172.16.1.7:1314		--主機ip
           

4.主機使用特殊變量

[web]
172.16.1.7 ansible_ssh_port=1314 ansible_ssh_user=root ansible_ssh_pass=123456
[web]
web01 ansible_ssh_host=172.16.1.7 ansible_ssh_port=1314 ansible_ssh_user=root ansible_ssh_pass=123456
           

5.主機組名嵌入配置

[web:vars]         --- 嵌入式變量資訊
ansible_ssh_host=172.16.1.7
ansible_ssh_port=1314
ansible_ssh_user=root
ansible_ssh_pass=123456
           

2.在劇本中設定變量資訊

作用:設定變量,可以提高編寫效率

方法一:在劇本中寫

vars: 
  Data_dir=/data
           

方法二:在指令行添加

ansible-playbook --extra-vars=/data
           

方法三: 在主機清單編寫

[web:vars]
Data_dir=/data
           

如果三種方法都設定了,優先級為:

最優先: 指令行變量設定

次優先: 劇本中變量設定

最後: 主機清單變量設定

3.在劇本中設定注冊資訊

作用:可以檢視資訊,例如通過檢視端口資訊,來判斷某個服務是否開啟

檢視rsync端口,判斷rsync是否開啟

- name: check server port
   shell: netstat -lntup|grep 873
   register: get_server_port		--這裡的注冊資訊有自己設定
 - name: diplay port info
   debug: msg={{ get_server_port.stdout_lines}}
           

4.設定判斷資訊

作用:當做兩件相同的事情時,但是不同主機做的,如果沒有添加判斷功能,就會出現每台主機都做兩遍同樣的事情

在nfs01和web01主機裡面都建立一個test檔案

- name: 01-touch nfs.test.txt
  file: dest=/tmp/nfs.test.txt state=touch
  when: (ansible_hostname == "nfs01")
- name: 02-touch web.test.txt
  file: dest=/tmp/web.test.txt state=touch
  when: (ansible_hostname == "web01")
           

擷取内置變量方法:

ansible 172.16.1.41 -m setup -a "filter=ansible_hostname"
           
ansible劇本功能編寫

常見主機資訊:

ansible_all_ipv4_addresses:				僅顯示ipv4的資訊。
ansible_devices:							僅顯示磁盤裝置資訊。
ansible_distribution:						顯示是什麼系統,例:centos,suse等。
ansible_distribution_major_version:		顯示是系統主版本。
ansible_distribution_version:				僅顯示系統版本。
ansible_machine:							顯示系統類型,例:32位,還是64位。
ansible_eth0:								僅顯示eth0的資訊。
ansible_hostname:							僅顯示主機名。
ansible_kernel:							僅顯示核心版本。
ansible_lvm:								顯示lvm相關資訊。
ansible_memtotal_mb:						顯示系統總記憶體。
ansible_memfree_mb:						顯示可用系統記憶體。
ansible_memory_mb:							詳細顯示記憶體情況。
ansible_swaptotal_mb:						顯示總的swap記憶體。
ansible_swapfree_mb:						顯示swap記憶體的可用記憶體。
ansible_mounts:							顯示系統磁盤挂載情況。
ansible_processor:							顯示cpu個數(具體顯示每個cpu的型号)。
ansible_processor_vcpus:					顯示cpu個數(隻顯示總的個數)。

擷取子資訊方法:
ansible_eth0[ipv4]
           

5.設定循壞資訊

作用:當做相同的事情時,可以将同樣的事情合并為一件

同時傳輸兩個檔案

copy: src=/etc/ansible/server_file/rsync_server/{{ item.src }}
dest={{ item.dest }} mode={{ item.mode }}
with_items:
    - { src: 'rsyncd.conf', dest: '/etc', mode: '644' }
    - { src: 'rsync.password', dest: '/etc', mode: '600' }
           

同時安裝多個軟體

yum: name={{ item }}  state=present
with_items:
  - nfs-utils
  - rpcbind
或者
yum:
  name: ['nfs-utils', 'rpcbind' ]
  state: installed
           

ps:service子產品不能使用此方式

6.在劇本中設定忽略錯誤

作用:預設playbook會檢查指令和子產品的傳回狀态,如遇到錯誤就中斷playbook的執行,可以加入ignore_errors: yes忽略錯誤

直接在想要忽略錯誤的那一步下面加上就行

- name: 
  ignore_errors: yes
           

7.設定标簽功能

作用:在某一步下面設定了标簽,可以隻運作該步,友善檢查出錯誤

- name: 
  targs: t1(這裡不能隻設定為數字)
           

指定執行那個标簽

ansible-playbook --tags=t1 test.yaml

ansible-playbook -t t1 test.yaml

跳過指定标簽任務:

ansible-playbook --skip-tags=t1 test.yaml

8.設定觸發功能

作用:當服務中的配置檔案發生改變,需要重新開機服務,就要用到觸發功能

修改rsync的配置檔案,重新開機rsync以生效

- name: create backup file
    copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc mode=644
    notify: restart rsync server

handlers:
  - name: restart rsync server
    service: name=rsyncd state=restarted
           

9.将多個劇本進行整合

這樣可以運作一個劇本就行

vim site.yaml
- import-playbook: rsync_server.yaml
- import-playbook: nfs_server.yaml
           

10.編寫 nfs劇本檔案

1.建立目錄

mkdir /nfs-file/nfs-client
mkdir /nfs-file/nfs-server
           

2.編寫主機清單

[nfs:children]
nfs_server
nfs_client
[nfs_server]
172.16.1.31
[nfs_client]
172.16.1.7
           

3.編寫劇本檔案

ansible劇本功能編寫
ansible劇本功能編寫

4.劇本測試

到此,劇本功能介紹完成

繼續閱讀