-
批量管理服務配置應用
-
續(xù)day37主機清單配置
-
模塊功能應用
-
劇本功能配置
-
1.模塊功能應用(續(xù))
第四個模塊:copy 文件模塊:可以將管理端數(shù)據(jù)進行批量分發(fā)/可以移動調整被管理端數(shù)據(jù)位置
重要模塊參數(shù):
src:指定管理端要分發(fā)的數(shù)據(jù)路徑信息
dest:指定數(shù)據(jù)傳輸?shù)奖还芾矶耸裁茨夸浿? mode:數(shù)據(jù)傳輸完畢后,設置數(shù)據(jù)權限信息
owner:數(shù)據(jù)傳輸完畢后顾患,設置數(shù)據(jù)屬主信息
group:數(shù)據(jù)傳輸完畢后自娩,設置數(shù)據(jù)屬組信息
backup:是否開啟數(shù)據(jù)分發(fā)備份功能
remote_src:指定源的路徑信息用踩,從被管理端進行讀取
content:可以直接不在管理端創(chuàng)建文件,對文件進行分發(fā),并且可以編輯文件簡單內容信息
validate:
模塊參數(shù)用法一:
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/ mode=600 owner=oldboy group=oldboy"
說明:對文件進行分發(fā)
1.修改文件權限信息和文件屬主屬組信息
2.可以在被管理端創(chuàng)建指定目錄信息
ansible oldboy -m copy -a "src=/oldboy/ dest=/oldboy/"
說明:對目錄進行分發(fā)
src指定目錄后面有斜線 oldboy/ 表示對oldboy目錄下所有數(shù)據(jù)進行傳輸
src指定目錄后面沒有斜線 oldboy 表示對目錄本身及目錄下面數(shù)據(jù)進行傳輸
模塊參數(shù)用法二:備份/還原數(shù)據(jù)方法
傳輸備份文件數(shù)據(jù)方法一:
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/ backup=yes"
傳輸備份文件數(shù)據(jù)方法二:
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy.txt.bak remote_src=yes"
還原數(shù)據(jù)
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt.bak dest=/oldboy/oldboy.txt remote_src=yes"
remote_src參數(shù)說明:
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/opt/ remote_src=yes"
== 相應被管理端 mv /oldboy/oldboy.txt /opt/
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/opt/"
== 相應管理端 scp -rp /oldboy/oldboy.txt xx.xx.xx.xx:/opt/
第五個模塊:fetch 文件模塊:進行數(shù)據(jù)拉取操作
重要參數(shù):
src:指定遠程主機需要拉取數(shù)據(jù)信息
dest:將數(shù)據(jù)保存到本地管理主機什么路徑中
拉取數(shù)據(jù)方法:
ansible oldboy -m fetch -a "src=/oldboy/oldboy.txt dest=/oldgirl"
拉取后數(shù)據(jù)信息:
[root@m01 ~]#tree /oldgirl/
/oldgirl/
├── 172.16.1.7
│ └── oldboy
│ └── oldboy.txt
└── pob
└── 01.txt
3 directories, 2 files
第六個模塊:file 文件模型:可以修改文件數(shù)據(jù)屬性信息(直接修改數(shù)據(jù)屬性)/創(chuàng)建或刪除數(shù)據(jù)信息
重要參數(shù):
path:指定要操作的遠程主機數(shù)據(jù)路徑信息
mode:修改文件權限信息
owner:修改文件屬主信息
group:修改文件屬組信息
state:狀態(tài)參數(shù)信息
創(chuàng)建目錄(directory)
創(chuàng)建文件(touch)
創(chuàng)建軟鏈接(link)
創(chuàng)建硬鏈接(hard)
刪除文件(absent)
查看文件是否存在(file)
模塊參數(shù)用法一:修改文件屬性信息
修改文件權限屬性信息:
ansible 172.16.1.41 -m file -a "path=/oldgirl/oldgirl.txt mode=666 owner=oldboy group=oldboy"
修改目錄權限屬性信息:
ansible 172.16.1.41 -m file -a "path=/oldboy/ mode=666 owner=oldgirl group=oldgirl"
說明: 只是修改目錄本身權限,不會進行遞歸修改權限信息(沒有-R功能)
模塊參數(shù)用法二:創(chuàng)建或刪除文件數(shù)據(jù)
創(chuàng)建目錄:
ansible 172.16.1.41 -m file -a "path=/oldboy/ state=directory"
創(chuàng)建文件:
ansible 172.16.1.41 -m file -a "path=/oldboy/oldboy.txt state=touch"
創(chuàng)建連接:
ansible 172.16.1.41 -m file -a "src=/oldboy/oldboy.txt path=/oldboy/oldboy_soft_link state=link" --- 創(chuàng)建軟鏈接
ansible 172.16.1.41 -m file -a "src=/oldboy/oldboy.txt path=/oldboy/oldboy_hard_link state=hard" --- 創(chuàng)建硬鏈接
刪除數(shù)據(jù):
ansible 172.16.1.41 -m file -a "path=/oldboy/oldboy.txt state=absent"
檢查普通文件是否存在:
ansible 172.16.1.41 -m file -a "path=/etc/hosts state=file"
第七個模塊:user 用戶模塊:創(chuàng)建或刪除用戶信息
重要參數(shù):
name:指定創(chuàng)建用戶名稱信息
create_name:創(chuàng)建用戶是有有家目錄
shell:指定用戶是否能夠登陸系統(tǒng)(/sbin/nologin)
uid:指定用戶uid數(shù)值
password:指定用戶密碼信息(使用密文信息設置密碼)
state:默認present表示創(chuàng)建用戶 使用absent刪除用戶信息
group:指定用戶屬于哪個用戶組(主要組)
groups:指定用戶屬于哪個用戶組(附屬組)
模塊參數(shù)用法一:創(chuàng)建用戶
ansible 172.16.1.41 -m user -a "name=rsync uid=2000 create_home=no shell=/sbin/nologin" --- 創(chuàng)建虛擬用戶
ansible 172.16.1.41 -m user -a "name=oldboy uid=2001" --- 創(chuàng)建普通用戶
模塊參數(shù)用法二:給創(chuàng)建用戶設置密碼
ansible 172.16.1.41 -m user -a 'name=oldboy password=$6$123456$yryajH2qY8ydGAcmwCNSmZM1/fI4gYqwTzXn9abB73ZmaDWJoe5s5Y.gOHgtBgqYrqRLB1Dsv6QTZsKsJbibJ1'
ps:利用user模塊創(chuàng)建密文密碼信息
方法一:
ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"
mypassword: 指定明文密碼信息
mysecretsalt: 密碼加密方式
生成密文密碼
[root@m01 ~]# ansible all -i localhost, -m debug -a "msg={{ 'oldboy123' | password_hash('sha512', '123456') }}"
localhost | SUCCESS => {
"msg": "$6$123456$yryajH2qY8ydGAcmwCNSmZM1/fI4gYqwTzXn9abB73ZmaDWJoe5s5Y.gOHgtBgqYrqRLB1Dsv6QTZsKsJbibJ1"
}
方法二: 利用python命令生成密文信息
第一個歷程: 安裝pip下載工具
yum install -y python-pip
第二個歷程: 利用pip工具下載python程序包
pip install passlib
第三個歷程: 生成密文信息
[root@m01 ~]# python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password:
$6$IQhh.egT4ow2dzmd$fk9W1.J4q1ArQ8nykkhh5A0waFbgU1Qa4sUdNm42.oYSpSMmIIl0262cSDg1Q6Ph8p3rnqHOs372A.GzD11.w/
模塊參數(shù)用法三:刪除用戶信息
ansible 172.16.1.41 -m user -a 'name=oldboy state=absent'
ps:默認刪除用戶不會刪除用戶家目錄
[root@backup oldboy]# ll /home/oldboy -d
drwx------ 2 2001 2001 83 Aug 23 11:33 /home/oldboy
第八個模塊:group 用戶模塊:創(chuàng)建或刪除用戶組信息
重要參數(shù)信息:
name:指定創(chuàng)建用戶組名稱信息
gid:指定創(chuàng)建用戶組id編號信息
state:默認present 指定absent表示刪除用戶
模塊參數(shù)用法一:創(chuàng)建指定用戶組
ansible 172.16.1.41 -m group -a "name=oldboy gid=3000"
模塊參數(shù)用法二:
ansible 172.16.1.41 -m group -a "name=oldboy state=absent"
第九個模塊:yum 安裝軟件模塊:安裝/卸載軟件
重要參數(shù)信息:
name:指定需要安裝軟件名稱
state:指定狀態(tài)信息
安裝軟件(installed latest persent)
卸載軟件(absent removed)
模塊參數(shù)用法一:安裝軟件程序
ansible 172.16.1.41 -m yum -a "name=telnet-server state=installed"
模塊參數(shù)用法二:卸載軟件程序
ansible 172.16.1.41 -m yum -a "name=telnet-server state=absent"
第十個模塊:service 系統(tǒng)模塊:控制服務運行狀態(tài)
重要參數(shù):
name:指定要管理的服務名稱
state:指定服務運行狀態(tài)
停止(stop)
啟動(started)
重啟(restarted)
平滑重啟(reloaded)
enabled:指定服務是否開機自動啟動(yes開機自啟捶箱,no開機不運行)
模塊參數(shù)用法一:控制服務運行狀態(tài)
ansible 172.16.1.41 -m service -a "name=rsyncd state=started"
ansible 172.16.1.41 -m service -a "name=rsyncd state=stopped"
ansible 172.16.1.41 -m service -a "name=rsyncd state=restarted"
ansible 172.16.1.41 -m service -a "name=rsyncd state=reloaded"
模塊參數(shù)用法二:設置服務開機運行狀態(tài):
ansible 172.16.1.41 -m service -a "name=rsyncd enabled=no"
ansible 172.16.1.41 -m service -a "name=rsyncd enabled=yes"
第十一個模塊:cron 系統(tǒng)模塊:批量設置定時任務
重要參數(shù)信息:
name:定義定時任務注釋信息(避免出現(xiàn)重復的定時任務)
minute : 指定時間信息中分鐘信息 (0-59 */5 0,10)
hour : 指定時間信息中小時信息 (0-23 *)
day : 指定時間信息中日期信息 (1-31)
month : 指定時間信息中月份信息 (1-12)
weekday : 指定時間信息中星期信息 (0-6)
job : 指定定時任務命令信息
crontab -e
* * * * * 執(zhí)行定時任務&>/dev/null
模塊參數(shù)用法一:批量設置定時任務
ansible 172.16.1.41 -m cron -a "name=crond-id-02 minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"
ps:job后面的命令注意用''擴起來
模塊參數(shù)用法二: 刪除定時任務
ansible 172.16.1.41 -m cron -a "name=crond-id-02 state=absent"
模塊參數(shù)用法三: 注釋定時任務
ansible 172.16.1.41 -m cron -a "name=crond-id-01 minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"
ansible 172.16.1.41 -m cron -a "name=crond-id-01 minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=no"
ps:注釋定時任務時最好把時間信息的參數(shù)帶上不然注釋后任務時間信息會變成 * * * * *
第十二個模塊:mount 系統(tǒng)模塊:進行批量掛載操作
重要參數(shù)信息:
src:掛載存儲設備信息
path:掛載點目錄信息
fstype:掛載的文件系統(tǒng)類型
state:指定掛載或卸載
掛載:mounted persent
mounted:臨時掛載存儲目錄信息,永久也掛載了存儲目錄信息
present: 只是實現(xiàn)永久掛載
卸載: unmounted absent
unmounted: 只是實現(xiàn)臨時卸載
absent: 臨時實現(xiàn)卸載 永久也實現(xiàn)卸載操作
參數(shù)操作方法一:進行掛載操作
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted"
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=present"
參數(shù)操作方法二:進行卸載操作
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=unmounted"
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=absent"
學習ansible執(zhí)行命令時會有不同顏色提示
01. 綠色: 對主機信息進行查看, 操作執(zhí)行成功
02. 黃色: 對主機信息進行查看, 對主機中信息有調整修改
03. 紫色: 錯誤提示信息, 建議忠告信息
04. 紅色: 報錯提示信息
如何利用ansible模塊進行rsync服務部署
第一個歷程: 確認好管理主機信息
管理服務端主機: 172.16.1.41
管理客戶端主機: 172.16.1.31 172.16.1.7
第二個歷程: 配置主機清單信息
vim /etc/ansible/hosts
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.31
172.16.1.7
第三個歷程: 進行rsync服務部署
服務端:
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)建密碼文件并授權
ansible rsync_server -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"
5) 創(chuàng)建備份目錄并授權
ansible rsync_server -m file -a "path=/backup/ state=directory owner=rsync group=rsync"
6) 啟動服務程序
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) 進行傳輸測試 擴展研究:synchronize
ansible rsync_client -m shell -a "rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password"
劇本編寫
劇本:將多個模塊操作命令進行整合
??模塊《====》命令
??劇本《====》腳本
劇本作用說明:
??01.可以實現(xiàn)服務自動部署
??02.可以提高運維工作效率
??03.可以減少運維工作問題
??04.可以節(jié)省公司運維成本
劇本編寫組成:
??01.劇本角色信息:hosts:主機信息
??02.劇本任務信息:tasks:任務信息
劇本編寫規(guī)范:遵循yaml語法規(guī)范(Python代碼語法規(guī)范)
01.縮進規(guī)范:兩個空格表示一個縮進關系
標題一
標題二
標題三
PS: 在縮進時只能用空格表示縮進,不能用tab鍵代替縮進
02.字典規(guī)范: 冒號后面要有空格
oldboy: 123456 key: value
PS: 冒號結尾時不需要有空格/冒號信息出現(xiàn)在注釋說明中不需要有空格
03.列表規(guī)范: 橫線后面要有空格
name:
- rsync
- nfs
- rpcbind
編寫測試劇本:
[root@m01 ansible_playbook]# cat /ansible_playbook/test01.yml
- hosts: rsync_server
tasks:
- name: create user:alex
user: name=alex uid=3000
- name: install software:iftop
yum: name=iftop state=installed
- hosts: rsync_client
tasks:
- name: create user:alex
user: name=alex uid=3000
劇本測試執(zhí)行方法:
1) 進行劇本編寫檢查測試
ansible-playbook --syntax-check /ansible_playbook/test01.yml
2) 劇本運行方式
模擬執(zhí)行:
ansible-playbook -C test01.yml
真實執(zhí)行:
ansible-playbook -C test01.yml
如果安裝cowsay執(zhí)行會出小牛圖像:
補充: 取消cowsay小牛圖案出現(xiàn)
vim /etc/ansible/ansible.cfg --- 編寫修改ansible配置文件
217 # set to 1 if you don't want cowsay support or export ANSIBLE_NOCOWS=1
218 nocows = 1 --- 禁止調取遠程主機cowsay程序
編寫劇本完成nfs一鍵自動部署:
第一個歷程: 定義主機清單信息
[nfs_server]
172.16.1.31
[nfs_client]
172.16.1.41
172.16.1.7
第二個歷程: 編寫劇本信息
服務端:
??1) 安裝軟件程序
??2) 編寫配置文件
??3) 創(chuàng)建存儲目錄
??4) 啟動服務程序
客戶端:
??1) 安裝軟件程序
??2) 進行掛載操作
劇本編寫方法:
??01: 采用變量格式編寫劇本
??02: 采用字典格式編寫劇本
??03: 采用json語法格式編寫劇本
劇本信息:方法一:變量格式編寫劇本
- 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
劇本編寫擴展功能
a.在劇本中設置變量信息
b 在劇本中設置注冊信息
c 在劇本中設置判斷信息
d 在劇本中設置循環(huán)信息
e 在劇本中設置錯誤忽略
f 在劇本中設置標簽信息
g 在劇本中設置觸發(fā)信息
a.在劇本中設置變量信息
設置變量方法一: 在劇本中設置變量
- hosts: 172.16.1.41
vars:
data_dir: /oldboy
tasks:
- name: copy file 01
copy: src={{ data_dir }}/oldboy01.txt dest=/tmp
- name: copy file 02
copy: src={{ data_dir }}/oldboy02.txt dest=/opt
- name: copy file 03
copy: src={{ data_dir }}/oldboy03.txt dest=/usr/local/
設置變量方法二: 在命令中設置變量
ansible-playbook -e data_dir=/oldboy test_變量配置功能.yml
設置變量方法三: 在主機清單中設置
a: 單個主機設置變量
172.16.1.41 data_dir=/oldboy
b: 多個主機設置變量
[oldboy]
172.16.1.41
[oldboy:vars]
data_dir=/oldboy
三種變量設置方式, 之間優(yōu)先級關系
創(chuàng)建環(huán)境:
mkdir /oldboy/ -p
mkdir /oldgirl/ -p
mkdir /olddog/ -p
結論:
命令配置變量 最優(yōu)先
劇本配置變量 其次優(yōu)先
主機清單配置 最后選擇
b 在劇本中設置注冊信息
[root@m01 ansible_playbook]# cat test_注冊功能配置.yml
- hosts: nfs_client
tasks:
- name: mount dir
mount: src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted
- name: check mount
shell: df -h
register: oldboy
- name: display mount info
debug: msg={{ oldboy.stdout_lines }}
c 在劇本中設置判斷信息
常見主機信息:
ansible_all_ipv4_addresses: 僅顯示ipv4的信息动漾。
ansible_devices: 僅顯示磁盤設備信息丁屎。
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: 僅顯示主機名妈拌。
ansible_kernel: 僅顯示內核版本。
ansible_lvm: 顯示lvm相關信息蓬蝶。
ansible_memtotal_mb: 顯示系統(tǒng)總內存尘分。
ansible_memfree_mb: 顯示可用系統(tǒng)內存。
ansible_memory_mb: 詳細顯示內存情況丸氛。
ansible_swaptotal_mb: 顯示總的swap內存培愁。
ansible_swapfree_mb: 顯示swap內存的可用內存。
ansible_mounts: 顯示系統(tǒng)磁盤掛載情況缓窜。
ansible_processor: 顯示cpu個數(shù)(具體顯示每個cpu的型號)定续。
ansible_processor_vcpus: 顯示cpu個數(shù)(只顯示總的個數(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")
判斷語法結構信息:
01. 匹配單個信息:
when: (ansible_hostname == "nfs01")
02. 匹配多個信息 ???
when: (ansible_hostname == "nfs01") or (ansible_hostname == "backup")
when: (ansible_hostname == "nfs01") and (ansible_eth0 == "10.0.0.31")
03. 對匹配信息進行取反
when: (ansible_hostname != "nfs01")