ansible 執行結果資訊–各顏色說明;ansible Ad-Hoc 說明;ansible 如何查看幫助檔案與常用模塊詳解
主機規劃

添加用戶賬號
說明:
1、 運維人員使用的登錄賬號;
2、 所有的業務都放在 /app/ 下「yun用戶的家目錄」,避免業務資料亂放;
3、 該用戶也被 ansible 使用,因為幾乎所有的生產環境都是禁止 root 遠程登錄的(因此該 yun 用戶也進行了 sudo 提權),
1 # 使用一個專門的用戶,避免直接使用root用戶 2 # 添加用戶、指定家目錄并指定用戶密碼 3 # sudo提權 4 # 讓其它普通用戶可以進入該目錄查看資訊 5 useradd -u 1050 -d /app yun && echo '123456' | /usr/bin/passwd --stdin yun 6 echo "yun ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers 7 chmod 755 /app/
Ansible 配置清單Inventory
之后文章都是如下主機配置清單
1 [yun@ansi-manager ansible_info]$ pwd 2 /app/ansible_info 3 [yun@ansi-manager ansible_info]$ cat hosts_key 4 # 方式1、主機 + 埠 + 密鑰 5 [manageservers] 6 172.16.1.180:22 7 8 [proxyservers] 9 172.16.1.18[1:2]:22 10 11 # 方式2:別名 + 主機 + 埠 + 密碼 12 [webservers] 13 web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=22 14 web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=22 15 web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22
Ansible執行回傳 => 顏色資訊說明
黃色:成功執行并且伴隨著狀態的改變
ansible proxyservers -m command -a 'cat /etc/hosts' -i hosts_key

綠色:成功執行并且沒有發生狀態的改變,或者只是對遠程節點狀態資訊進行查看
ansible proxyservers -m ping -i hosts_key

紅色:操作執行命令有例外
ansible proxyservers -m command -a 'll /tmp' -i hosts_key

紫色:表示對命令執行發出警告資訊(可能存在的問題,給你一下建議)
1 # 其中 hosts_kkk 檔案不存在 2 ansible proxyservers -m command -a 'll /tmp' -i hosts_kkk

Ansible 之 Ad-Hoc
Ansible中有兩種模式, 分別是 Ad-Hoc 模式和 Playbooks 模式,
ad-hoc簡而言之,就是“臨時命令”,不會保存,
ad-hoc模式的使用場景
場景一,在多臺機器上,查看某個行程是否啟動
場景二,在多臺機器上,拷貝指定日志檔案到本地,等等
ad-hoc模式的命令使用

Ansible查看幫助方法
1 [yun@ansi-manager ~]$ ansible-doc -l # 查看所有模塊與簡要說明 2 [yun@ansi-manager ~]$ ansible-doc copy # 查看指定模塊方法「可優先查看 EXAMPLES 資訊」★★★★★ 3 [yun@ansi-manager ~]$ ansible-doc -s copy # 查看指定模塊的 Playbooks 代碼段
Ansible常用模塊
作業目錄與主機清單
當前所在的作業目錄和主機清單
1 [yun@ansi-manager ansible_info]$ pwd 2 /app/ansible_info 3 [yun@ansi-manager ansible_info]$ ll 4 total 4 5 -rw-rw-r-- 1 yun yun 226 Oct 8 16:07 hosts_key 6 [yun@ansi-manager ansible_info]$ cat hosts_key 7 # 方式1、主機 + 埠 + 密鑰 8 [manageservers] 9 172.16.1.180:22 10 11 [proxyservers] 12 172.16.1.18[1:2]:22 13 14 # 方式2:別名 + 主機 + 埠 + 密碼 15 [webservers] 16 web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=22 17 web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=22 18 web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22
command 命令模塊
默認模塊, 用于執行命令,但不支持管道或重定向,
正常示例
1 [yun@ansi-manager ansible_info]$ ansible proxyservers -a 'df -h' -i hosts_key 2 # 或者 3 [yun@ansi-manager ansible_info]$ ansible proxyservers -m command -a 'df -h' -i hosts_key
例外示例
1 # 重定向不支持 2 ansible proxyservers -m command -a 'df -h > /tmp/df.info' -i hosts_key 3 # 管道不支持 4 ansible proxyservers -m command -a "df -h | grep 'boot'" -i hosts_key
shell 命令模塊
功能和 command 相同,且支持管道和重定向,與 command 相比,優先使用該模塊,
示例
1 ansible proxyservers -m shell -a "df -h | grep 'boot'" -i hosts_key 2 ansible proxyservers -m shell -a "df -h > /tmp/df.info" -i hosts_key
script 腳本模塊
在本地運行模塊,等同于在遠程執行,且不需要將腳本檔案推送到目標主機進行執行,
示例
腳本中有 sudo 提權
1 # 在 ansible 管理機操作 2 [yun@ansi-manager ansible_info]$ cat /app/yunwei/yum_test.sh 3 #!/bin/sh 4 # 由于使用的是 yun 用戶,而不是 root 用戶,因此需要 sudo 提權 5 sudo yum install -y iftop 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -m script -a "/app/yunwei/yum_test.sh" -i hosts_key
腳本中無 sudo 提權
1 # 在 ansible 管理機操作 2 [yun@ansi-manager ansible_info]$ cat /app/yunwei/yum_test.sh 3 #!/bin/sh 4 yum install -y iftop 5 ####################################### 6 # 由于我們使用的是 yun 普通用戶 7 # 因此這里需要使用 -b 選擇進行提權,這樣在遠程會以 root 用戶執行 8 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m script -a "/app/yunwei/yum_test.sh" -i hosts_key
在目標機器查看是否在 yum 安裝 iftop
1 [root@ansi-haproxy01 ~]# ps -ef | grep 'iftop' 2 root 3867 3866 0 23:25 pts/1 00:00:00 sudo yum install -y iftop 3 root 3868 3867 48 23:25 pts/1 00:00:12 /usr/bin/python /bin/yum install -y iftop 4 root 4144 3155 0 23:25 pts/0 00:00:00 grep --color=auto iftop
yum 安裝軟體模塊
在目標機器實作 yum 安裝軟體
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc yum 3 # 由于我們使用的是 yun 普通用戶 4 # 因此必須使用 -b 選擇進行提權 5 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m yum -a 'name=httpd state=present' -i ./hosts_key
相關選項說明:
name:要安裝軟體包的名稱
state:狀態說明
‘present’ 和 ‘installed’ 簡單地確保安裝了所需的包,「優先使用 present」
‘latest’ 將更新指定的軟體包,如果它不是最新可用的版本,
‘absent’ and ‘removed’ 將洗掉指定的包【慎用!!!】,「如要使用優先使用 absent」
download_only:只下載包,不安裝
copy 檔案拷貝模塊「本地到遠端」
將控制機的檔案或目錄拷貝到受控機,并且可以指定目標檔案/目錄的屬性資訊,
控制機操作
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc copy 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權 5 # 將 content 中的內容直接寫入目標檔案中 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m copy -a "content='123\n' dest=/tmp/copy_test2 owner=root group=root mode=0644 backup=yes" -i ./hosts_key 7 ## 拷貝檔案 8 [yun@ansi-manager ansible_info]$ cat /tmp/copy_test 9 111111 10 222222 11 333333 12 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m copy -a "src=https://www.cnblogs.com/tmp/copy_test dest=/tmp/ owner=root group=root mode=0644 backup=yes" -i ./hosts_key 13 ## 拷貝目錄 14 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m copy -a "src=https://www.cnblogs.com/app/yunwei dest=/tmp/ owner=root group=root mode=0644 backup=yes" -i ./hosts_key
被控端查看
1 [yun@ansi-haproxy01 tmp]$ cat copy_test2 2 123 3 [yun@ansi-haproxy01 tmp]$ cat /tmp/copy_test 4 111111 5 222222 6 333333
相關選項說明:
src:源檔案「可以是絕對路徑或相對路徑」
remote_src:為 False「默認」,則源檔案在本地;為 True ,則源檔案在遠端「了解」
dest:推送資料的目標路徑或目標檔案
owner:指定遠端檔案的屬主
group:指定遠端檔案的屬組
mode:指定遠端檔案的權限
backup:如果推送的目標檔案存在且與源檔案內容不同,那么會對目標檔案進行備份「通過 checksum 校驗」
content:將 content 中的內容直接寫入目標檔案中
注意事項:
1、同一個源檔案,如果源檔案內容沒有任何修改,那么進行第二次相同的操作時,檢測到要拷貝的檔案和目標檔案內容相同「通過 checksum 校驗」,且目標檔案屬性前后未發生改變,那么就不會進行拷貝,由于目標檔案屬性未發生改變,所以回傳資料顏色為綠色,如下圖所示,


2、同一個源檔案,如果源檔案內容沒有任何修改,那么進行第二次相同的操作時,如果源檔案和目標檔案內容相同「通過 checksum 校驗」,但目標檔案屬性前后要求發生改變「屬主、屬組、權限」,那樣也不會進行拷貝,但由于目標檔案屬性發生改變,所以回傳資料顏色為黃色,
fetch 檔案拷貝模塊「遠端到本地」
該模塊功能類似于 copy 模塊,但是是反向的,將遠端的檔案拷貝到本地,備注:當前僅支持檔案,暫不支持遞回拷貝,
由于ansible使用的是 yun 用戶,因此從遠端拷貝過來的檔案屬主、屬組都是 yun,
控制機操作
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc fetch 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權
被控端檔案準備1
1 [test1@ansi-haproxy01 tmp]$ ll /tmp/test1 2 -rw-rw-r-- 1 test1 test1 20 Nov 2 11:04 /tmp/test1 3 [test1@ansi-haproxy01 tmp]$ cat /tmp/test1 4 111 5 222 6 333 7 aaa 8 bbb
被控端檔案準備2
1 [test1@ansi-haproxy02 tmp]$ ll /tmp/test1 2 -rw-rw-r-- 1 test1 test1 20 Nov 2 11:04 /tmp/test1 3 [test1@ansi-haproxy02 tmp]$ cat /tmp/test1 4 1111
拷貝方式1
1 [yun@ansi-manager ansible_info]$ ansible 172.16.1.181 -b -m fetch -a "src=https://www.cnblogs.com/tmp/test1 dest=/tmp/" -i ./hosts_key # 拷貝 172.16.1.181 主機的 2 或者 3 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m fetch -a "src=https://www.cnblogs.com/tmp/test1 dest=/tmp/" -i ./hosts_key # 拷貝 proxyservers 主機組的 4 ## 查看拷貝結果「注意目錄層次」 5 [yun@ansi-manager ansible_info]$ ll /tmp/ 6 total 4 7 drwxrwxr-x 3 yun yun 17 Nov 2 11:21 172.16.1.181 8 drwxrwxr-x 3 yun yun 17 Nov 2 11:23 172.16.1.182 9 [yun@ansi-manager ansible_info]$ tree /tmp/172.16.1.18* 10 /tmp/172.16.1.181 11 └── tmp 12 └── test1 13 /tmp/172.16.1.182 14 └── tmp 15 └── test1 16 17 2 directories, 2 files
拷貝方式2
1 # 如果使用 flat=yes,那么最好只拷貝一臺遠端主機的檔案,如果是多臺那么后面執行的結果,會把前面的覆寫掉, 2 # dest 路徑有 / 結尾 3 [yun@ansi-manager ansible_info]$ ansible 172.16.1.181 -b -m fetch -a "src=https://www.cnblogs.com/tmp/test1 dest=/tmp/kkk2/ flat=yes" -i ./hosts_key # 推薦,只拷貝一臺 4 # dest 路徑無 / 結尾 5 [yun@ansi-manager ansible_info]$ ansible 172.16.1.181 -b -m fetch -a "src=https://www.cnblogs.com/tmp/test1 dest=/tmp/kkk flat=yes" -i ./hosts_key # 推薦,只拷貝一臺 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m fetch -a "src=https://www.cnblogs.com/tmp/test1 dest=/tmp/kkk flat=yes" -i ./hosts_key # 不推薦,會產生覆寫 7 ## 查看拷貝結果 8 [yun@ansi-manager ansible_info]$ cat /tmp/kkk2/test1 9 111 10 222 11 333 12 aaa 13 bbb 14 [yun@ansi-manager ansible_info]$ ll /tmp/kkk 15 -rw-rw-r-- 1 yun yun 20 Nov 2 11:25 /tmp/kkk 16 [yun@ansi-manager ansible_info]$ cat /tmp/kkk # 該檔案沒有 "11111"資訊; 產生了覆寫效應 17 111 18 222 19 333 20 aaa 21 bbb
相關選項說明:
src:源檔案,當前僅支持檔案,不支持目錄
dest:推送資料的目標路徑,默認為:dest[路徑]/hostname/src[路徑],參見上面示例
flat: 默認 False,當為 yes/True 時,那么拷貝效果類似于本地的 copy,
template 模板使用
該模塊功能類似于 copy 模塊,但 copy 模塊不支持變數,不支持模板,
template 模塊支持變數,支持 Jinja 模板,因此如果生成中的組態檔涉及變數,那么請使用 template 模塊,
涉及到 playbook、變數和 Jinja ,這些在后面的文章會有詳解,
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc template 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權 5 # palybook 6 [yun@ansi-manager ansible_info]$ pwd 7 /app/ansible_info 8 [yun@ansi-manager ansible_info]$ ll 9 total 16 10 drwxrwxr-x 2 yun yun 35 Oct 11 11:23 file 11 -rw-rw-r-- 1 yun yun 226 Oct 8 16:07 hosts_key 12 -rw-rw-r-- 1 yun yun 304 Oct 11 11:40 test_template.yml 13 [yun@ansi-manager ansible_info]$ ll file/ # 涉及的檔案 14 total 4 15 -rw-rw-r-- 1 yun yun 175 Oct 11 11:23 test_template.conf.j2 16 [yun@ansi-manager ansible_info]$ cat file/test_template.conf.j2 17 # facts 變數 18 dns_info={{ ansible_dns['nameservers'][0] }} 19 mem_total={{ ansible_memtotal_mb }} 20 # 自定義變數 21 listen_port={{ listen_port }} 22 access_addr={{ access_addr }} 23 24 [yun@ansi-manager ansible_info]$ 25 [yun@ansi-manager ansible_info]$ cat test_template.yml # 涉及的 playbook 26 --- 27 # template 示例 28 - hosts: proxyservers 29 vars: 30 - listen_port: 8080 31 - access_addr: zhangblog.com 32 33 tasks: 34 - name: "template conf" 35 template: 36 src: ./file/test_template.conf.j2 37 dest: /tmp/test_template.conf 38 owner: root 39 group: yun 40 mode: '0600' 41 [yun@ansi-manager ansible_info]$ ansible-playbook -b -i ./hosts_key test_template.yml # 執行
目標機器查看
1 [root@ansi-haproxy01 tmp]# pwd 2 /tmp 3 [root@ansi-haproxy01 tmp]# cat test_template.conf 4 # facts 變數 5 dns_info=223.5.5.5 6 mem_total=1821 7 # 自定義變數 8 listen_port=8080 9 access_addr=zhangblog.com
相關選項說明:
src:源檔案「可以是絕對路徑或相對路徑」
dest:推送資料的目標路徑或目標檔案
owner:指定遠端檔案的屬主
group:指定遠端檔案的屬組
mode:指定遠端檔案的權限
backup:如果推送的目標檔案存在且與源檔案內容不同,那么會對目標檔案進行備份
file 檔案配置模塊
在受控機創建檔案或目錄,或修改屬性資訊「如:屬主、屬組、權限」
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc file 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權 5 ## 在受控機改變目標檔案的屬性【該檔案是已存在的】 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/yum_test.sh owner=yun group=yun mode=0600" -i ./hosts_key 7 ## 在受控機創建軟連接 8 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "src=https://www.cnblogs.com/tmp/yum_test.sh dest=/tmp/yum_link.sh owner=yun group=yun state=link" -i ./hosts_key 9 ## 在受控機創建硬鏈接 10 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "src=https://www.cnblogs.com/tmp/yum_test.sh dest=/tmp/yum_hard.sh owner=yun group=root state=hard" -i ./hosts_key 11 ## 在受控機,如果目標檔案不存在則創建 12 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/dest_file owner=yun group=yun state=touch" -i ./hosts_key 13 ## 在控制機,如果目標目錄不存在則創建「可創建多級目錄」 14 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/desc_dir/aaa/bbb owner=yun group=root mode=700 state=directory" -i ./hosts_key 15 ## 在控制機,改變目標目錄和目錄下所有目錄或檔案的屬性資訊「遞回修改」 16 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/desc_dir owner=yun group=zhang mode=766 state=directory recurse=yes" -i ./hosts_key 17 ## 在受控機,如果目標檔案或目錄存在,則洗掉「慎用!!!」 18 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/desc_dir state=absent " -i ./hosts_key
相關選項說明:
path:指定目標檔案或目錄
owner:指定目標檔案的屬主
group:指定目標檔案的屬組
mode:指定目標檔案的權限
state:狀態說明
file:默認值,指定檔案
link:創建軟連接
hard:創建硬鏈接
touch:如果檔案不存在則創建
directory:如果目錄不存在則創建
absent:如果目標檔案或目錄存在,則洗掉「慎用!!!」
recurse:遞回授權
lineinfile 行編輯模塊
此模塊確保檔案中有特定的行,或者使用反向參考的正則運算式替換現有的行,當您只想更改檔案中的一行時,這非常有用,
如果您想要更改多個相似的行,請查看[replace]模塊,如果你想要插入/更新/洗掉檔案中的一個行塊,請查看[blockinfile]模塊,對于其他情況,請參見[copy]或[template]模塊,
資料檔案準備
1 [yun@ansi-manager tmp]$ cat /tmp/lineinfile_test 2 # disabled - No SELinux policy is loaded. 3 SELINUX=disabled1 4 # disabled - No SELinux policy is loaded. 5 SELINUX=disabled2 6 # disabled - No SELinux policy is loaded. 7 SELINUX=disabled3 8 # SELINUXTYPE= can take one of three two values: 9 10 # httpd listen port 11 Listen 80
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc lineinfile 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權
行插入
1 # 如果檔案中沒有 line 中的字串,那么就追加在檔案末尾;有則不作任何操作, 2 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test line='# who are you?'" -i ./hosts_key 3 # 首先保證line 中的字串在檔案中沒有,如果有則不會添加 4 # 其次會使用insertafter中的正則規則進行正則匹配,匹配成功則在最后一次匹配行后面插入line,如果沒匹配成功則在檔案末尾插入 5 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertafter='SELINUX' line='insertafter test1'" -i ./hosts_key 6 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertafter='SELINUXXX' line='insertafter test2'" -i ./hosts_key 7 # 首先保證line 中的字串在檔案中沒有,如果有則不會添加 8 # 其次會使用insertbefore中的正則規則進行正則匹配,匹配成功則在最后一次匹配行前面插入line,如果沒匹配成功則在檔案末尾插入 9 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertbefore='SELINUX' line='insertbefore test1'" -i ./hosts_key 10 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertbefore='SELINUXXX' line='insertbefore test2'" -i ./hosts_key
行替換
1 # state=present時,如果多次匹配,那么最后一次匹配會被修改;如果沒有匹配成功則在檔案末尾追加,不管line是否存在, 2 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test regexp='^SELINUX=' line='SELINUX=enforcing'" -i ./hosts_key 3 # state=present時,如果多次匹配,那么最后一次匹配會被修改;如果沒有匹配成功則檔案保持不變,使用backrefs=yes, 4 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test regexp='^ELINUX=' line='SELINUX=enforcing' backrefs=yes" -i ./hosts_key
行洗掉
1 # state=absent時,如果多次匹配,那么每一次匹配都會洗掉匹配行 2 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test regexp='^SELINUX=' state=absent" -i ./hosts_key 3 # 根據line匹配,如果匹配則洗掉匹配行 4 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test line='# httpd listen port' state=absent" -i ./hosts_key
相關選項說明:
path:要修改的檔案,
line:與 state=present 配合使用;在檔案中要插入或者替換的行,
state:狀態說明
present:添加或修改,默認值
absent:洗掉
backrefs:與 state=present 配合使用;如果設定了 line 可以包含反向參考(位置和命名),當‘regexp’匹配,就會填充反向參考,
這個引數稍微改變了模塊的操作;’insertbefore’ 和 ‘insertafter’ 將被忽略,如果 ‘regexp’ 與檔案中的任何地方不匹配,檔案將保持不變,
regexp:對檔案的每行進行正則匹配;對于 state=present 只有最后的一次行匹配會被替換;對于 state=absent 只要匹配就會洗掉該行,
backup:對源檔案備份,默認:False
create:與 state=present 配合使用;如果不存在則創建檔案,默認:False
insertafter:與 state=present 配合使用;在匹配行后插入,使用正則運算式,在指定正則運算式的最后一次匹配之后插入該行,如果需要第一個匹配,則使用(firstmatch=yes),
如果沒有匹配成功,那么會在檔案末尾處插入,優先級低于 regexp,
insertbefore:與 state=present 配合使用;在匹配行前插入,使用正則運算式,在指定正則運算式的最后一次匹配之前插入該行,如果需要第一個匹配,則使用(firstmatch=yes),
如果沒有匹配成功,那么會在檔案末尾處插入,優先級低于 regexp,
firstmatch:與 insertafter 或 insertbefore 配合使用;在 insertafter 或 insertbefore 的首次正則匹配,默認:False
owner:指定遠端檔案的屬主
group:指定遠端檔案的屬組
mode:指定遠端檔案的權限
blockinfile 多行編輯模塊
該模塊可以幫助我們在指定的檔案中插入”一段文本”,這段文本是被標記過的,
換句話說就是,我們在這段文本上做了記號,以便在以后的操作中可以通過”標記”找到這段文本,然后修改或者洗掉它
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc blockinfile 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權
對不存在的檔案進行——多行插入與修改
1 # /tmp/blockinfile_test 檔案是不存在的,因此使用了create選項 2 # 插入/修改 如果沒有則插入,如果之前有資訊則修改 3 ##### 這里之前沒有,則是創建檔案并【插入】資訊 4 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m blockinfile -a 'path=/tmp/blockinfile_test block="Match User ansible-agent\nPasswordAuthentication no" create=yes' -i ./hosts_key 5 [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test # 查看檔案資訊 6 # BEGIN ANSIBLE MANAGED BLOCK 7 Match User ansible-agent 8 PasswordAuthentication no 9 # END ANSIBLE MANAGED BLOCK 10 ##### 檔案已存在,mark標記已存在,這里是【修改】 11 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m blockinfile -a 'path=/tmp/blockinfile_test block="iface eth0 inet static\n address 192.0.2.23\n netmask 255.255.255.0" create=yes' -i ./hosts_key 12 [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test # 查看檔案資訊 13 # BEGIN ANSIBLE MANAGED BLOCK 14 iface eth0 inet static 15 address 192.0.2.23 16 netmask 255.255.255.0 17 # END ANSIBLE MANAGED BLOCK
對已存在的檔案進行——多行插入與修改
1 [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test2 # 查看檔案資訊 2 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 3 <html> 4 <head> 5 <title>blockinfile info</title> 6 </head> 7 <body> 8 <h1>welcome to here.</h1> 9 </body></html> 10 ##### 插入多行標記塊資訊 這里也使用了 insertafter 選項 11 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m blockinfile -a 'path=/tmp/blockinfile_test2 marker="<!-- {mark} ANSIBLE MANAGED BLOCK -->" insertafter="<body>" block="<h1>Welcome to blockinfile</h1>\n<p>Last Login By you!</p>"' -i ./hosts_key 12 [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test2 # 查看檔案資訊 13 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 14 <html> 15 <head> 16 <title>blockinfile info</title> 17 </head> 18 <body> 19 <!-- BEGIN ANSIBLE MANAGED BLOCK --> 20 <h1>Welcome to blockinfile</h1> 21 <p>Last Login By you!</p> 22 <!-- END ANSIBLE MANAGED BLOCK --> 23 <h1>welcome to here.</h1> 24 </body></html> 25 ##### 洗掉標記塊資訊 26 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m blockinfile -a 'path=/tmp/blockinfile_test2 marker="<!-- {mark} ANSIBLE MANAGED BLOCK -->" block=""' -i ./hosts_key 27 [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test2 # 查看檔案資訊 28 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 29 <html> 30 <head> 31 <title>blockinfile info</title> 32 </head> 33 <body> 34 <h1>welcome to here.</h1> 35 </body></html>
相關選項說明:
path:要修改的檔案,
block:要插入標記行內的文本,如果該選項缺失或是一個空字串,該塊將被洗掉,就像 “state” 被指定為 “absent” ,(別名:content)
state:狀態說明
present:添加或修改,默認值
absent:洗掉
create:檔案不存在則創建,默認:False
backup:對源檔案備份,默認:False
insertafter:在匹配行后插入,使用正則運算式,在指定正則運算式的最后一次匹配之后插入該block,
如果沒有匹配成功,那么會在檔案末尾處插入,
insertbefore:在匹配行前插入,使用正則運算式,在指定正則運算式的最后一次匹配之前插入該block,
如果沒有匹配成功,那么會在檔案末尾處插入,
marker:標記線模板,’{mark}’ 將被替換為 ‘in marker_begin’ 的值【默認:BEGIN】和 ‘marker_end’ 的值【默認:END】
marker_begin:開始的標記變數資訊,默認:BEGIN
marker_end:結尾的標記變數資訊,默認:END
owner:指定遠端檔案/目錄的屬主
group:指定遠端檔案/目錄的屬組
mode:指定遠端檔案/目錄的權限
ini_file INI格式配置模塊
在一個ini的檔案中管理(添加、洗掉、更改)單獨的配置,而不必使用[template]或[assemble]來管理整個檔案,添加不存在的section,
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc ini_file 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權
添加與修改
1 # 第一次執行,如果檔案不存在,默認會創建 添加 section 和 option 資訊 2 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks option=username value=https://www.cnblogs.com/zhanglianghhh/p/bobe mode='0644'" -i ./hosts_key 3 # 修改 option 資訊 4 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks option=username value=https://www.cnblogs.com/zhanglianghhh/p/alice" -i ./hosts_key 5 # 添加另外一個section資訊 6 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=base_info option=address value='https://www.cnblogs.com/zhanglianghhh/p/BeiJing'" -i ./hosts_key 7 # 添加一個option資訊,還是放在 drinks 這個section下 8 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks option=password value=https://www.cnblogs.com/zhanglianghhh/p/123456" -i ./hosts_key
洗掉
1 # 洗掉整個section, 洗掉drinks這個section 2 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks state=absent" -i ./hosts_key 3 # 洗掉指定section下的option 4 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=base_info option=address state=absent" -i ./hosts_key
相關選項說明:
path:INI格式檔案路徑,如果沒有則默認會創建,
section:INI檔案中的 section 名,當設定單個值時,如果是 ‘state=present’ 則會自動添加這個值,如果留慷訓設定為 ‘null’,’option’ 將放在第一個 ‘section’ 之前,
如果配置格式不支持 section,也需要使用 “null”,
option:如果設定(需要更改的 value),這是選項的名稱,如果添加/洗掉整個“section”,可以省略,默認:null
value:option 的值,洗掉 “option” 時可以省略,
state:狀態說明
present:添加或修改,默認值
absent:洗掉
backup:對源檔案備份,默認:False
create:如果不存在則創建檔案,默認:True
owner:指定遠端檔案的屬主
group:指定遠端檔案的屬組
mode:指定遠端檔案的權限
no_extra_spaces:在 = 符號前后不插入空格,默認:False
replace 多行替換模塊
對檔案所匹配的內容進行替換/洗掉,
資料檔案準備
1 [yun@ansi-manager ~]$ cat /tmp/replace_test 2 172.16.1.181 test1.zhangblog.com 3 172.16.1.182 test2.zhangblog.org 4 172.16.1.183 test3.zhangblog.net 5 6 # httpd listen port 7 Listen 80 8 ServerRoot "/etc/httpd" 9 User apache 10 Group apache
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc replace 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權 5 # 將regexp正則匹配到的行,替換為replace的內容;且這里使用了反向參考, 6 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test regexp='(\s+)test\d+\.zhangblog\.(\w+)?$' replace='\1new.host.name.\2'" -i ./hosts_key 7 # 將 after 之后的每行都替換為 replace 中的內容 8 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test after='# httpd listen port' regexp='^(.+)$' replace='after replace'" -i ./hosts_key 9 # 如果 after沒有匹配完一行,那么 after匹配之后未匹配的該行內容也會替換為replace 中的內容 10 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test after='# httpd listen' regexp='^(.+)$' replace='# after replace'" -i ./hosts_key 11 # 將 before 之前的每行都替換為 replace 中的內容 12 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test before='listen port' regexp='^(.+)$' replace='before replace'" -i ./hosts_key 13 # 如果 before沒有匹配完一行,那么 before匹配之前未匹配的該行內容也會替換為replace 中的內容 14 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test before='listen port' regexp='^(.+)$' replace='before replace'" -i ./hosts_key 15 # 洗掉匹配內容,行數不會改變,如果整行匹配,則最終為空行, 16 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test regexp='zhangblog'" -i ./hosts_key 17 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test regexp='.*test.*'" -i ./hosts_key
相關選項說明:
path:要操作的檔案路徑,
after:如果指定,只有after匹配之后的內容將被替換/洗掉,可以與before組合使用,after可能匹配一行也可能匹配一行的部分;且不支持正則匹配,
before:如果指定,只有before匹配之前的內容將被替換/洗掉,可以與after組合使用,before可能匹配一行也可能匹配一行的部分;不支持正則匹配,
regexp:要在檔案內容中查找的正則運算式,
replace:替換regexp匹配項的字串,可能包含反向參考,如果regexp匹配,將使用regexp捕獲組展開這些反向參考,如果沒有設定,則完全洗掉匹配項,
反向參考可以像 ‘\1’ 那樣含糊地使用,也可以像 ‘\g<1>’ 那樣顯式地使用,
backup:對源檔案備份,默認:False
encoding:用于讀寫檔案的字符編碼,默認:utf-8
owner:指定遠端檔案的屬主
group:指定遠端檔案的屬組
mode:指定遠端檔案的權限
sysctl 修改內核引數模塊
這個模塊操作 sysctl 條目,并在更改它們之后可選地執行 /sbin/sysctl -p ,
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc sysctl 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權 5 # 會修改 /etc/sysctl.conf 檔案并執行 /sbin/sysctl -p 使其生效 6 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m sysctl -a 'name=net.ipv4.ip_forward value=https://www.cnblogs.com/zhanglianghhh/p/1' -i ./hosts_key 7 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m sysctl -a 'name=vm.swappiness value=https://www.cnblogs.com/zhanglianghhh/p/5' -i ./hosts_key
相關選項說明:
name:內核引數變數名,(別名:key)
value:sysctl鍵的期望值,(別名:val)
reload:當為 yes 時,如果 sysctl_file 檔案被修改,那么會執行 /sbin/sysctl -p,使修改的引數生效,當為 no 時,則不多載 sysctl ,盡管 sysctl_file 已被修改,
state:狀態說明
present:添加或修改,默認值
absent:洗掉
sysctl_file:指定 sysctl.conf 檔案的絕對路徑,默認:/etc/sysctl.conf
sysctl_set:使用sysctl命令驗證令牌值,必要時使用 -w 進行設定,默認:no
ignoreerrors:使用此選項可忽略關于未知鍵的錯誤,默認:no
get_url 檔案下載模塊
通過 HTTP,HTTPS或 FTP 下載一個檔案,
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc get_url 3 ## 下載一個檔案 4 [yun@ansi-manager ansible_info]$ ansible proxyservers -m get_url -a "url='http://www.zhangblog.com/uploads/jvm/jvm-01-01.png' dest=/tmp/ mode=0640" -i ./hosts_key 5 ## 下載前會比對校驗和,如果不匹配則不下載 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -m get_url -a "url='http://www.zhangblog.com/uploads/jvm/jvm-01-01.png' dest=/tmp/jvm-001.png checksum='md5:9af3f6066ea46ea81c0b3c9d719dbce0'" -i ./hosts_key
相關選項說明:
mode:指定目標檔案的權限
url:指定檔案來源「支持 HTTP,HTTPS 和 FTP」
dest:指定目標存放的目錄或檔案
checksum:校驗和「支持 sha256 和 md5」
timeout:請求超時時間,默認 10 秒,
owner:指定遠端檔案的屬主
group:指定遠端檔案的屬組
mode:指定遠端檔案的權限
backup:源檔案備份
service、systemd 服務管理模塊
如果在 CentOS 6 及以下版本,優先使用 service ,
如果在 CentOS 7 及以上版本,優先使用 systemd ,
這里考慮到我們使用的 CentOS 7,因此使用的是 systemd ,至于 service 請自行查看檔案,
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc service 3 [yun@ansi-manager ansible_info]$ ansible-doc systemd 4 # 由于我們使用的是 yun 普通用戶 5 # 因此有時需要使用 -b 選擇進行提權 6 ## 啟動 httpd 服務,并且加入開機自啟動 7 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=httpd state=started enabled=yes" -i ./hosts_key 8 ## 重啟 httpd 服務,并且重新加載 /usr/lib/systemd/system/httpd.service 服務組態檔,且加入開機自啟動 9 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=httpd state=restarted daemon_reload=yes enabled=yes" -i ./hosts_key 10 ## 停止 httpd 服務,并且不加入開機自啟動 11 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=httpd state=stopped enabled=no" -i ./hosts_key
相關選項說明:
name:服務名稱
state:服務狀態
started:啟動服務
stopped:停止服務
reloaded:重加載服務
restarted:重啟動服務
enabled:是否加入開機自啟動「yes 加入, no 不加入, 默認 null」
daemon_reload:當我們修改了服務管理組態檔,是否重加載其配置「yes 重加載服務組態檔, no 不加載,默認值」
group 組模塊
創建或洗掉用戶組
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc group 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權 5 ## 創建 test 組,并指定組ID 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m group -a " name=test gid=9001" -i ./hosts_key 7 ## 創建 testsystem 組,并指定為系統組 8 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m group -a "name=testsystem system=true" -i ./hosts_key 9 ## 洗掉 testsystem 組 10 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m group -a "name=testsystem state=absent" -i ./hosts_key
相關選項說明:
gid:指定組ID,默認 null
name:指定組名稱
state:組狀態
present:創建組,默認
absent:洗掉組
system:是否為系統組
true:是系統組
false:不是系統組
user 用戶模塊
創建或洗掉用戶
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc user 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權
1、創建用戶,指定 UID,指定附加組,不創建家目錄,不可以登錄
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m user -a "name=zhangtest uid=1005 groups=zhang,yun create_home=no shell=/sbin/nologin" -i ./hosts_key
受控機查看資訊
1 [yun@ansi-haproxy02 ~]$ id zhangtest 2 uid=1005(zhangtest) gid=1005(zhangtest) groups=1005(zhangtest),1000(zhang),1050(yun) 3 [yun@ansi-haproxy02 ~]$ tail -n1 /etc/passwd 4 zhangtest:x:1005:1005::/home/zhangtest:/sbin/nologin # /home/zhangtest 該目錄不存在
2、洗掉用戶,但不洗掉用戶的家目錄
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m user -a "name=zhangtest state=absent" -i ./hosts_key
3、為用戶創建密碼或SSH key 秘鑰
[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m user -a "name=zhangtest2 generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa" -i ./hosts_key
4、為用戶創建密碼
1 # 得到密碼串 2 [yun@ansi-manager ansible_info]$ ansible localhost -m debug -a "msg={{ '123456' | password_hash('sha512', 'salt') }}" 3 localhost | SUCCESS => { 4 "msg": "$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w.igcOo1R7vBYR65JquIQ/7siC7VRpmteKvZmfSkNc69." 5 } 6 ## 注意 -a '' 是單引號,而不是雙引號,如果使用雙引號,特殊字符會被決議 7 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m user -a 'name=zhangtest2 password=$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w.igcOo1R7vBYR65JquIQ/7siC7VRpmteKvZmfSkNc69.' -i ./hosts_key
相關選項說明:
name:用戶名稱
state:用戶狀態
present:默認值,創建用戶
absent:洗掉用戶
password:用戶密碼,默認:null
shell:設定用戶的shell
uid:指定用戶 UID
group:設定用戶主組,默認:null
groups:設定用戶附加組,默認:null
system:如果為 yes 則創建系統用戶,默認:false
home:設定用戶家目錄
create_home:是否創建家目錄,默認:true,如果不創建為:no
comment:用戶描述,默認:null
expires:用戶賬號失效日期,默認:null
update_password:更新密碼
always:如果密碼不同,則更新,默認值
on_create:只有新建用戶時使用
remove:只有在 state=absent 時生效,作用:洗掉用戶家目錄
generate_ssh_key:是否生成SSH key 密鑰對,默認:false
ssh_key_bits:設定 SSH key 位元組長度,默認:有 ssh-keygen 設定
ssh_key_comment:設定 SSH key 的描述,默認為:$HOSTNAME
ssh_key_file:指定 SSH key 的檔案名,默認:null 【即為:.ssh/id_rsa】
ssh_key_passphrase:指定 SSH key 密碼,如果不提供則沒有密碼,默認:null
ssh_key_type:設定 SSH key 型別,默認:rsa
cron 定時任務模塊
創建、注釋或洗掉定時任務
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc cron 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權
1 ## 創建定時任務, name 為定時任務說明 2 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m cron -a 'name="crond test" minute=0 hour="2,5" job="ls /tmp >/dev/null 2>&1"' -i ./hosts_key 3 ## 注釋指定定時任務,其中 name ,時間引數,和 job 都需要, 4 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m cron -a 'name="crond test" minute=0 hour="2,5" job="ls /tmp >/dev/null 2>&1" disabled=true' -i ./hosts_key 5 ## 洗掉定時任務 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m cron -a 'name="crond test" state=absent' -i ./hosts_key
相關選項說明:
name:定時任務描述
state:狀態
present:添加,默認值
absent:洗掉
user:指定哪個用戶的定時任務會修改,默認是 root 用戶,默認:null
minute:哪個分鐘執行 ( 0-59, *, */2, etc ),默認:*
hour:哪個小時執行 ( 0-23, *, */2, etc ),默認 *
day:每月的哪天執行 ( 1-31, *, */2, 等 ),默認:*
month:哪個月執行 ( 1-12, *, */2, etc ),默認:*
weekday:每周的哪天執行 ( 0-6 為 Sunday-Saturday, *, etc ),默認:*
disabled:是否注釋指定定時任務,默認:false
job:定時任務要操作的具體資訊
mount 檔案系統掛載模塊
檔案系統的掛載與取消,
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc mount 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權
案例示例:
在 ansi-manager 機器作為 NFS 的服務端,ansi-haproxy01、ansi-haproxy02 作為 NFS 的客戶端,
1、在所有機器安裝 NFS 必要的包
[yun@ansi-manager ansible_info]$ ansible manageservers,proxyservers -b -m yum -a "name=nfs-utils,rpcbind state=present" -i ./hosts_key
2、NFS 服務端配置與啟動
1 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m copy -a 'content="/data 172.16.1.0/24(rw,sync,root_squash,all_squash)\n" dest=/etc/exports' -i ./hosts_key 2 # 創建 /data 目錄,屬主、屬組為 nfsnobody 3 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m file -a "path=/data owner=nfsnobody group=nfsnobody state=directory" -i ./hosts_key 4 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m systemd -a "name=rpcbind state=started enabled=yes" -i ./hosts_key 5 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m systemd -a "name=nfs state=started enabled=yes" -i ./hosts_key 6 ## 查看 Export list 資訊 7 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m shell -a "showmount -e" -i ./hosts_key
3、NFS 客戶端操作
1 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=rpcbind state=started enabled=yes" -i ./hosts_key 2 ## 檢查共享資訊 3 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m shell -a "showmount -e 172.16.1.180" -i ./hosts_key
4、NFS 客戶端掛載
1 ## 不掛載設備,僅在 /etc/fstab 中寫入掛載配置資訊 2 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=https://www.cnblogs.com/zhanglianghhh/p/172.16.1.180:/data path=/mnt fstype=nfs state=present backup=yes" -i ./hosts_key 3 ## 掛載設備,并在 /etc/fstab 中寫入掛載配置資訊 4 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=https://www.cnblogs.com/zhanglianghhh/p/172.16.1.180:/data path=/mnt fstype=nfs state=mounted" -i ./hosts_key 5 ## 不卸載設備,僅在 /etc/fstab 中洗掉掛載配置資訊 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=https://www.cnblogs.com/zhanglianghhh/p/172.16.1.180:/data path=/mnt fstype=nfs state=unmounted" -i ./hosts_key 7 ## 卸載設備,并在 /etc/fstab 中洗掉掛載配置資訊 8 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=https://www.cnblogs.com/zhanglianghhh/p/172.16.1.180:/data path=/mnt fstype=nfs state=absent" -i ./hosts_key
相關選項說明:
src:要掛在的設備/磁盤
path:掛載點
opts:掛載引數選項,如:ro,noauto;默認:null
fstype:檔案系統型別
state:狀態
present:不掛載設備,僅在 /etc/fstab 中寫入掛載配置資訊
mounted:掛載設備,并在 /etc/fstab 中寫入掛載配置資訊
unmounted:不卸載設備,僅在 /etc/fstab 中洗掉掛載配置資訊
absent:卸載設備,并在 /etc/fstab 中洗掉掛載配置資訊
backup:對之前的檔案備份
debug 除錯模塊與 register 變數
這里會使用 playbook 書寫,具體的 playbook 詳解,參見后面的文章,
涉及到 playbook、變數和 Jinja ,這些在后面的文章會有詳解,
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc debug 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權 5 # Ad-Hoc 方式 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m debug -i ./hosts_key 7 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m debug -a 'msg="print customized message"' -i ./hosts_key 8 ################################################## 9 # Playbooks 方式 10 [yun@ansi-manager ansible_info]$ pwd 11 /app/ansible_info 12 [yun@ansi-manager ansible_info]$ ll 13 total 24 14 -rw-rw-r-- 1 yun yun 483 Aug 18 09:12 hosts_key 15 -rw-rw-r-- 1 yun yun 245 Aug 18 21:55 test_debug_register.yml 16 [yun@ansi-manager ansible_info]$ cat test_debug_register.yml 17 --- 18 # 如何使用 debug 模塊與 register 變數 19 - hosts: proxyservers 20 21 tasks: 22 - name: "get host port info" 23 shell: netstat -lntp 24 register: host_port 25 26 - name: "print host port" 27 debug: 28 #msg: "{{ host_port }}" # 輸出全部資訊 29 #msg: "{{ host_port.cmd }}" # 參考方式一 30 msg: "{{ host_port['stdout_lines'] }}" # 參考方式二 31 32 [yun@ansi-manager ansible_info]$ ansible-playbook -b -i ./hosts_key test_debug_register.yml
第一個 task 中,使用了 register 注冊變數,名為 host_port ;當 shell 模塊執行完畢后,會將資料放到該變數中,
第二給 task 中,使用了 debug 模塊,并從 host_port 中獲取資料,
assert 斷言模塊【了解】
對自定義訊息斷言,
涉及到 playbook、變數和 Jinja ,這些在后面的文章會有詳解,
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc assert 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權 5 # Ad-Hoc 方式 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 == 3' success_msg=ok fail_msg=fail" -i ./hosts_key # 斷言失敗 7 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 <= 3' success_msg=ok fail_msg=fail" -i ./hosts_key # 斷言成功 8 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 < 3' success_msg=ok fail_msg=fail" -i ./hosts_key # 斷言成功 9 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 < 3 and 4 == 4' success_msg=ok fail_msg=fail quiet=yes" -i ./hosts_key # 斷言成功 10 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 < 3 and 4 > 4' success_msg=ok fail_msg=fail quiet=yes" -i ./hosts_key # 斷言失敗 11 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='3 < 3 or 4 == 4' success_msg=ok fail_msg=fail quiet=yes" -i ./hosts_key # 斷言成功 12 ################################################## 13 # Playbooks 方式 14 [yun@ansi-manager ansible_info]$ pwd 15 /app/ansible_info 16 [yun@ansi-manager ansible_info]$ ll 17 total 12 18 -rw-rw-r-- 1 yun yun 226 Oct 8 16:07 hosts_key 19 -rw-rw-r-- 1 yun yun 902 Oct 11 10:57 test_assert.yml 20 [yun@ansi-manager ansible_info]$ cat test_assert.yml # playbook 資訊 21 --- 22 # assert 示例 23 - hosts: proxyservers 24 # 使用如下變數,分別測驗下 25 vars: 26 #- my_param: 20 27 #- my_param: -2 28 - my_param: 200 29 30 tasks: 31 - name: "assert example 1" 32 assert: 33 # ansible_os_family 為 facts 中的變數資訊 34 that: 35 - ansible_os_family == "RedHat" 36 success_msg: "success info" 37 fail_msg: "fail info" 38 39 - name: "assert example 2" 40 assert: 41 # that 下面的串列,為 && 關系 42 that: 43 - my_param >= 0 44 - my_param <= 100 45 fail_msg: "'my_param' must be between 0 and 100" 46 success_msg: "success info" 47 # 是否忽略該 task 的錯誤 48 ignore_errors: True 49 50 - name: "assert example 3" 51 assert: 52 that: 53 - my_param <= 10 or my_param >= 100 54 fail_msg: "'my_param' must be <= 10 or >= 100" 55 success_msg: "success info" 56 57 [yun@ansi-manager ansible_info]$ ansible-playbook -b -i ./hosts_key test_assert.yml # 執行
相關選項說明:
that:串列字串運算式
success_msg:當斷言成功時輸出的資訊
fail_msg:別名 msg,當斷言失敗時輸出的資訊
quiet:默認 False,設定為 yes 避免冗長輸出
selinux 安全模塊
配置 SELinux ,
1 # 查看 yum 模塊方法「可優先查看 EXAMPLES 資訊的使用案例,知曉如何使用」 2 [yun@ansi-manager ansible_info]$ ansible-doc selinux 3 # 由于我們使用的是 yun 普通用戶 4 # 因此有時需要使用 -b 選擇進行提權 5 ## 關閉 selinux 6 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m selinux -a "state=disabled" -i ./hosts_key
相關選項說明:
state:狀態
disabled:不可用
enforcing:強制執行
permissive:會提醒
———END———
如果覺得不錯就關注下唄 (-^O^-) !

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/123994.html
標籤:Linux
上一篇:集群應用系統
下一篇:基礎命令
