需求:如何利用ansible模塊,進(jìn)行rsync服務(wù)部署
考察:需要對模塊靈活應(yīng)用
思路:
第一個(gè)里程: 確認(rèn)好管理主機(jī)信息
管理服務(wù)端主機(jī): 172.16.1.41
管理客戶端主機(jī): 172.16.1.31 172.16.1.7
第二個(gè)里程: 配置知己清單信息
vim /etc/amsible/hosts
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.31
172.16.1.41
第三個(gè)里程: 進(jìn)行rsync服務(wù)部署
服務(wù)端:
1.安裝軟件
ansible rsync_server -m yum -a "name=rsync state=installed"
2. 編寫配置文件
ansible rsync_server -m copy -a "src=/ansible_file/rsync/rsyncd.conf dest=/etc/"
3. 創(chuàng)建虛擬用戶
ansible rsync_server -m user -a "name=rsync create_home=no shell=/sbin/nologin"
4. 創(chuàng)建密碼文件并授權(quán)
ansible rsync_server -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"
5. 創(chuàng)建備份目錄并授權(quán)
ansible rsync_server -m file -a "path=/backup/ state=directory owner=rsync group=rsync"
6. 啟動(dòng)服務(wù)程序
ansible rsync_server -m service -a "name=rsyncd state=started enabled=yes"
客戶端:
1.創(chuàng)建密碼文件
ansible rsync_client -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"
2. 進(jìn)行傳輸測試
ansible rsync_client -m shell -a "'rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password'"
掌握劇本編寫: 將多個(gè)模塊操作命令進(jìn)行整合
模塊 == 命令
劇本 == shell腳本
作用說明:
1. 可以實(shí)現(xiàn)服務(wù)自動(dòng)部署
2. 可以提高運(yùn)維工作效率
3. 可以減少運(yùn)維工作問題
4. 可以節(jié)省公司運(yùn)維成本
劇本編寫組成:
1. 劇本角色信息: hosts --主機(jī)信息
2. 劇本任務(wù)信息: tasks --任務(wù)信息
*劇本編寫規(guī)范: 遵循yaml語法規(guī)范 == python代碼語法規(guī)范
1. 縮進(jìn)規(guī)范: 兩個(gè)空格表示一個(gè)縮進(jìn)關(guān)系
標(biāo)題一(一級)
空空標(biāo)題二(二級)
空空空空標(biāo)題三(三級)
PS: 在縮進(jìn)時(shí)只能用空格表示縮進(jìn),不能用tab代替縮進(jìn)
2. 字典書寫規(guī)范:
oldboy: 123456(key: value)
PS: 冒號結(jié)尾時(shí)不需要有空格/冒號信息出現(xiàn)在注釋說明中不需要有空格
3. 列表規(guī)范: 橫線后面要有空格
name:
- rsunc
- nfs
- rpcbind
劇本測試執(zhí)行方法
1. 進(jìn)行檢查測試:
ansible-playbook --syntax-check ./test01.yml
2. 劇本運(yùn)行方式:
模擬執(zhí)行:
ansible-playbook -C test01.yml
補(bǔ)充: 取消cowsay小牛圖案出現(xiàn)
vim /etc/ansible/ansible.cfg ---編寫修改ansible文件
217gg
# set to 1 if you don't want cowsay support or export ANSIBLE_NOCOWS=1
nocows = 1
真實(shí)執(zhí)行: ansible-playbook ./test01.yml
測驗(yàn): 編寫劇本完成nfs服務(wù)一鍵自動(dòng)部署
第一個(gè)歷程: 定義主機(jī)清單信息
[nfs_server]
172.16.1.31
[nfs_client]
172.16.1.41
172.16.1.7
第二個(gè)歷程: 編寫劇本信息
服務(wù)端:
1) 安裝軟件程序
2) 編寫配置文件
3) 創(chuàng)建存儲(chǔ)目錄
4) 啟動(dòng)服務(wù)程序
客戶端:
1) 安裝軟件程序
2) 進(jìn)行掛載操作
劇本信息:
方法一: 變量格式編寫劇本
- hosts: nfs_server
tasks:
- name: 01:install software
yum: name=nfs-utils state=installed
yum: name=rpcbind state=installed
- name: 02:push conf_file to server
copy: src=./nfs/exports dest=/etc/
- name: 03:create data dir
file: path=/data state=directory owner=nfsnobody group=nfsnobody
- name: 04:boot server
service: name=rpcbind state=started enabled=yes
service: name=nfs state=started enabled=yes
- hosts: nfs_client
tasks:
- name: 01:install software
yum: name=nfs-utils state=installed
- name: 02:mount data dir
shell: mount -t nfs 172.16.1.31:/data /mnt
劇本信息: 方法二 字典格式編寫劇本
- hosts: nfs_server
tasks:
- name: 01:install software
yum:
name:
- nfs-utils
- rpcbind
state: installed
- name: 02:push conf_file to server
copy:
src: ./nfs/exports
dest: /etc/
- name: 03:create data dir
file:
path: /data
state: directory
owner: nfsnobody
group: nfsnobody
- name: 04:boot server rpc
service:
name: rpcbind
state: started
enabled: yes
- name: 05:boot server nfs
service:
name: nfs
state: started
enabled: yes
- hosts: nfs_client
tasks:
- name: 01:install software
yum:
name: nfs-utils
state: installed
- name: 02:mount data dir
shell: mount -t nfs 172.16.1.31:/data /mnt
劇本編寫擴(kuò)展功能
a 在劇本中設(shè)置變量信息
設(shè)置變量方法一: 在劇本中設(shè)置變量
data_dir: /oldboy
設(shè)置變量方法二: 在命令行設(shè)置
ansible-playbook -e data_dir=/boy test05.yml
設(shè)置變量方法三: 在主機(jī)清單設(shè)置
vim /etc/ansible/hosts 172.16.1.41 data_dir=/old
問題: 三種變量的優(yōu)先級是 命令行-劇本-主機(jī)清單
b 在劇本中設(shè)置注冊信息
debug: msg={{ oldboy.stdout_lines }}
image.png
c 在劇本中設(shè)置判斷信息
常見主機(jī)信息:
ansible_all_ipv4_addresses: 僅顯示ipv4的信息淮捆。
ansible_devices: 僅顯示磁盤設(shè)備信息。
ansible_distribution: 顯示是什么系統(tǒng)他炊,例:centos,suse等争剿。
ansible_distribution_major_version: 顯示是系統(tǒng)主版本。
ansible_distribution_version: 僅顯示系統(tǒng)版本痊末。
ansible_machine: 顯示系統(tǒng)類型蚕苇,例:32位,還是64位凿叠。
ansible_eth0: 僅顯示eth0的信息涩笤。
ansible_hostname: 僅顯示主機(jī)名。
ansible_kernel: 僅顯示內(nèi)核版本盒件。
ansible_lvm: 顯示lvm相關(guān)信息蹬碧。
ansible_memtotal_mb: 顯示系統(tǒng)總內(nèi)存。
ansible_memfree_mb: 顯示可用系統(tǒng)內(nèi)存炒刁。
ansible_memory_mb: 詳細(xì)顯示內(nèi)存情況恩沽。
ansible_swaptotal_mb: 顯示總的swap內(nèi)存。
ansible_swapfree_mb: 顯示swap內(nèi)存的可用內(nèi)存翔始。
ansible_mounts: 顯示系統(tǒng)磁盤掛載情況宝当。
ansible_processor: 顯示cpu個(gè)數(shù)(具體顯示每個(gè)cpu的型號)退腥。
ansible_processor_vcpus: 顯示cpu個(gè)數(shù)(只顯示總的個(gè)數(shù))撵儿。
- hosts: all
tasks:
- name: install software
yum: name=nfs-utils state=installed
- name: create data dir
file: path=/data/ state=directory
when: (ansible_hostname == "nfs01")
判斷語法結(jié)構(gòu)信息:
01. 匹配單個(gè)信息:
when: (ansible_hostname == "nfs01")
02. 匹配多個(gè)信息 ???
when: (ansible_hostname == "nfs01") or (ansible_hostname == "backup")
when: (ansible_hostname == "nfs01") and (ansible_eth0 == "10.0.0.31")
03. 對匹配信息進(jìn)行取反
when: (ansible_hostname != "nfs01")
d 在劇本中設(shè)置循環(huán)信息
e 在劇本中設(shè)置錯(cuò)誤信息
f 在劇本中設(shè)置標(biāo)簽信息
g 在劇本中設(shè)置觸發(fā)信息