實驗環境: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.檔案編寫時會有顔色提示
第二步:執行劇本
1.檢查劇本的文法格式
出現上面圖檔這樣,代表沒有文法錯誤
2.模拟執行腳本
可以看到模拟執行沒有問題
3.真正執行劇本
因為我之前執行過了,是以這裡顯示全部為綠色,如果沒有執行過,執行成功會顯示黃色.
到此,一個簡單的劇本就編寫完成了.
劇本編寫常見錯誤:
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_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.編寫劇本檔案
4.劇本測試
到此,劇本功能介紹完成