日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ansible Ad-Hoc与常用模块

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ansible Ad-Hoc与常用模块 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ansible 執(zhí)行結(jié)果信息–各顏色說明;ansible Ad-Hoc 說明;ansible 如何查看幫助文檔與常用模塊詳解

主機(jī)規(guī)劃

主機(jī)名稱操作系統(tǒng)版本內(nèi)網(wǎng)IP外網(wǎng)IP(模擬)安裝軟件
ansi-managerCentOS7.5172.16.1.18010.0.0.180ansible
ansi-haproxy01CentOS7.5172.16.1.18110.0.0.181
ansi-haproxy02CentOS7.5172.16.1.18210.0.0.182
ansi-web01CentOS7.5172.16.1.18310.0.0.183
ansi-web02CentOS7.5172.16.1.18410.0.0.184
ansi-web03CentOS7.5172.16.1.18510.0.0.185

添加用戶賬號

說明:

1、 運(yùn)維人員使用的登錄賬號;

2、 所有的業(yè)務(wù)都放在 /app/ 下「yun用戶的家目錄」,避免業(yè)務(wù)數(shù)據(jù)亂放;

3、 該用戶也被 ansible 使用,因?yàn)閹缀跛械纳a(chǎn)環(huán)境都是禁止 root 遠(yuǎn)程登錄的(因此該 yun 用戶也進(jìn)行了 sudo 提權(quán))。

# 使用一個(gè)專門的用戶,避免直接使用root用戶 # 添加用戶、指定家目錄并指定用戶密碼 # sudo提權(quán) # 讓其它普通用戶可以進(jìn)入該目錄查看信息 useradd -u 1050 -d /app yun && echo '123456' | /usr/bin/passwd --stdin yun echo "yun ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers chmod 755 /app/

Ansible 配置清單Inventory

之后文章都是如下主機(jī)配置清單

[yun@ansi-manager ansible_info]$ pwd /app/ansible_info [yun@ansi-manager ansible_info]$ cat hosts_key # 方式1、主機(jī) + 端口 + 密鑰 [manageservers] 172.16.1.180:22[proxyservers] 172.16.1.18[1:2]:22# 方式2:別名 + 主機(jī) + 端口 + 密碼 [webservers] web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=22 web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=22 web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22

Ansible執(zhí)行返回 => 顏色信息說明

黃色:成功執(zhí)行并且伴隨著狀態(tài)的改變

ansible proxyservers -m command -a 'cat /etc/hosts' -i hosts_key

綠色:成功執(zhí)行并且沒有發(fā)生狀態(tài)的改變,或者只是對遠(yuǎn)程節(jié)點(diǎn)狀態(tài)信息進(jìn)行查看

ansible proxyservers -m ping -i hosts_key

紅色:操作執(zhí)行命令有異常

ansible proxyservers -m command -a 'll /tmp' -i hosts_key

紫色:表示對命令執(zhí)行發(fā)出警告信息(可能存在的問題,給你一下建議)

# 其中 hosts_kkk 文件不存在 ansible proxyservers -m command -a 'll /tmp' -i hosts_kkk

Ansible 之 Ad-Hoc

Ansible中有兩種模式, 分別是 Ad-Hoc 模式和 Playbooks 模式。

ad-hoc簡而言之,就是“臨時(shí)命令”,不會保存。

ad-hoc模式的使用場景

場景一,在多臺機(jī)器上,查看某個(gè)進(jìn)程是否啟動(dòng)

場景二,在多臺機(jī)器上,拷貝指定日志文件到本地,等等

ad-hoc模式的命令使用

Ansible查看幫助方法

[yun@ansi-manager ~]$ ansible-doc -l # 查看所有模塊與簡要說明 [yun@ansi-manager ~]$ ansible-doc copy # 查看指定模塊方法「可優(yōu)先查看 EXAMPLES 信息」★★★★★ [yun@ansi-manager ~]$ ansible-doc -s copy # 查看指定模塊的 Playbooks 代碼段

Ansible常用模塊

工作目錄與主機(jī)清單

當(dāng)前所在的工作目錄和主機(jī)清單

[yun@ansi-manager ansible_info]$ pwd /app/ansible_info [yun@ansi-manager ansible_info]$ ll total 4 -rw-rw-r-- 1 yun yun 226 Oct 8 16:07 hosts_key [yun@ansi-manager ansible_info]$ cat hosts_key # 方式1、主機(jī) + 端口 + 密鑰 [manageservers] 172.16.1.180:22[proxyservers] 172.16.1.18[1:2]:22# 方式2:別名 + 主機(jī) + 端口 + 密碼 [webservers] web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=22 web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=22 web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22

command 命令模塊

默認(rèn)模塊, 用于執(zhí)行命令。但不支持管道或重定向。

正常示例

[yun@ansi-manager ansible_info]$ ansible proxyservers -a 'df -h' -i hosts_key # 或者 [yun@ansi-manager ansible_info]$ ansible proxyservers -m command -a 'df -h' -i hosts_key

異常示例

# 重定向不支持 ansible proxyservers -m command -a 'df -h > /tmp/df.info' -i hosts_key # 管道不支持 ansible proxyservers -m command -a "df -h | grep 'boot'" -i hosts_key

shell 命令模塊

功能和 command 相同,且支持管道和重定向。與 command 相比,優(yōu)先使用該模塊。

示例

ansible proxyservers -m shell -a "df -h | grep 'boot'" -i hosts_key ansible proxyservers -m shell -a "df -h > /tmp/df.info" -i hosts_key

script 腳本模塊

在本地運(yùn)行模塊,等同于在遠(yuǎn)程執(zhí)行。且不需要將腳本文件推送到目標(biāo)主機(jī)進(jìn)行執(zhí)行。

示例

腳本中有 sudo 提權(quán)

# 在 ansible 管理機(jī)操作 [yun@ansi-manager ansible_info]$ cat /app/yunwei/yum_test.sh #!/bin/sh # 由于使用的是 yun 用戶,而不是 root 用戶,因此需要 sudo 提權(quán) sudo yum install -y iftop [yun@ansi-manager ansible_info]$ ansible proxyservers -m script -a "/app/yunwei/yum_test.sh" -i hosts_key

腳本中無 sudo 提權(quán)

# 在 ansible 管理機(jī)操作 [yun@ansi-manager ansible_info]$ cat /app/yunwei/yum_test.sh #!/bin/sh yum install -y iftop ####################################### # 由于我們使用的是 yun 普通用戶 # 因此這里需要使用 -b 選擇進(jìn)行提權(quán),這樣在遠(yuǎn)程會以 root 用戶執(zhí)行 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m script -a "/app/yunwei/yum_test.sh" -i hosts_key

在目標(biāo)機(jī)器查看是否在 yum 安裝 iftop

[root@ansi-haproxy01 ~]# ps -ef | grep 'iftop' root 3867 3866 0 23:25 pts/1 00:00:00 sudo yum install -y iftop root 3868 3867 48 23:25 pts/1 00:00:12 /usr/bin/python /bin/yum install -y iftop root 4144 3155 0 23:25 pts/0 00:00:00 grep --color=auto iftop

yum 安裝軟件模塊

在目標(biāo)機(jī)器實(shí)現(xiàn) yum 安裝軟件

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc yum # 由于我們使用的是 yun 普通用戶 # 因此必須使用 -b 選擇進(jìn)行提權(quán) [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m yum -a 'name=httpd state=present' -i ./hosts_key

相關(guān)選項(xiàng)說明:

name:要安裝軟件包的名稱

state:狀態(tài)說明

???? ‘present’ 和 ‘installed’ 簡單地確保安裝了所需的包。「優(yōu)先使用 present」

???? ‘latest’ 將更新指定的軟件包,如果它不是最新可用的版本。

???? ‘a(chǎn)bsent’ and ‘removed’ 將刪除指定的包【慎用!!!】。「如要使用優(yōu)先使用 absent」

download_only:只下載包,不安裝

copy 文件拷貝模塊「本地到遠(yuǎn)端」

將控制機(jī)的文件或目錄拷貝到受控機(jī),并且可以指定目標(biāo)文件/目錄的屬性信息。

控制機(jī)操作

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc copy # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) # 將 content 中的內(nèi)容直接寫入目標(biāo)文件中 [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 ## 拷貝文件 [yun@ansi-manager ansible_info]$ cat /tmp/copy_test 111111 222222 333333 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m copy -a "src=/tmp/copy_test dest=/tmp/ owner=root group=root mode=0644 backup=yes" -i ./hosts_key ## 拷貝目錄 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m copy -a "src=/app/yunwei dest=/tmp/ owner=root group=root mode=0644 backup=yes" -i ./hosts_key

被控端查看

[yun@ansi-haproxy01 tmp]$ cat copy_test2 123 [yun@ansi-haproxy01 tmp]$ cat /tmp/copy_test 111111 222222 333333

相關(guān)選項(xiàng)說明:

src:源文件「可以是絕對路徑或相對路徑」

remote_src:為 False「默認(rèn)」,則源文件在本地;為 True ,則源文件在遠(yuǎn)端「了解」

dest:推送數(shù)據(jù)的目標(biāo)路徑或目標(biāo)文件

owner:指定遠(yuǎn)端文件的屬主

group:指定遠(yuǎn)端文件的屬組

mode:指定遠(yuǎn)端文件的權(quán)限

backup:如果推送的目標(biāo)文件存在且與源文件內(nèi)容不同,那么會對目標(biāo)文件進(jìn)行備份「通過 checksum 校驗(yàn)」

content:將 content 中的內(nèi)容直接寫入目標(biāo)文件中

注意事項(xiàng):

1、同一個(gè)源文件,如果源文件內(nèi)容沒有任何修改,那么進(jìn)行第二次相同的操作時(shí),檢測到要拷貝的文件和目標(biāo)文件內(nèi)容相同「通過 checksum 校驗(yàn)」,且目標(biāo)文件屬性前后未發(fā)生改變,那么就不會進(jìn)行拷貝。由于目標(biāo)文件屬性未發(fā)生改變,所以返回?cái)?shù)據(jù)顏色為綠色。如下圖所示。

2、同一個(gè)源文件,如果源文件內(nèi)容沒有任何修改,那么進(jìn)行第二次相同的操作時(shí),如果源文件和目標(biāo)文件內(nèi)容相同「通過 checksum 校驗(yàn)」,但目標(biāo)文件屬性前后要求發(fā)生改變「屬主、屬組、權(quán)限」,那樣也不會進(jìn)行拷貝。但由于目標(biāo)文件屬性發(fā)生改變,所以返回?cái)?shù)據(jù)顏色為黃色。

fetch 文件拷貝模塊「遠(yuǎn)端到本地」

該模塊功能類似于 copy 模塊,但是是反向的。將遠(yuǎn)端的文件拷貝到本地。備注:當(dāng)前僅支持文件,暫不支持遞歸拷貝。

由于ansible使用的是 yun 用戶,因此從遠(yuǎn)端拷貝過來的文件屬主、屬組都是 yun。

控制機(jī)操作

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc fetch # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán)

被控端文件準(zhǔn)備1

[test1@ansi-haproxy01 tmp]$ ll /tmp/test1 -rw-rw-r-- 1 test1 test1 20 Nov 2 11:04 /tmp/test1 [test1@ansi-haproxy01 tmp]$ cat /tmp/test1 111 222 333 aaa bbb

被控端文件準(zhǔn)備2

[test1@ansi-haproxy02 tmp]$ ll /tmp/test1 -rw-rw-r-- 1 test1 test1 20 Nov 2 11:04 /tmp/test1 [test1@ansi-haproxy02 tmp]$ cat /tmp/test1 1111

拷貝方式1

[yun@ansi-manager ansible_info]$ ansible 172.16.1.181 -b -m fetch -a "src=/tmp/test1 dest=/tmp/" -i ./hosts_key # 拷貝 172.16.1.181 主機(jī)的 或者 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m fetch -a "src=/tmp/test1 dest=/tmp/" -i ./hosts_key # 拷貝 proxyservers 主機(jī)組的 ## 查看拷貝結(jié)果「注意目錄層次」 [yun@ansi-manager ansible_info]$ ll /tmp/ total 4 drwxrwxr-x 3 yun yun 17 Nov 2 11:21 172.16.1.181 drwxrwxr-x 3 yun yun 17 Nov 2 11:23 172.16.1.182 [yun@ansi-manager ansible_info]$ tree /tmp/172.16.1.18* /tmp/172.16.1.181 └── tmp└── test1 /tmp/172.16.1.182 └── tmp└── test12 directories, 2 files

拷貝方式2

# 如果使用 flat=yes,那么最好只拷貝一臺遠(yuǎn)端主機(jī)的文件,如果是多臺那么后面執(zhí)行的結(jié)果,會把前面的覆蓋掉。 # dest 路徑有 / 結(jié)尾 [yun@ansi-manager ansible_info]$ ansible 172.16.1.181 -b -m fetch -a "src=/tmp/test1 dest=/tmp/kkk2/ flat=yes" -i ./hosts_key # 推薦,只拷貝一臺 # dest 路徑無 / 結(jié)尾 [yun@ansi-manager ansible_info]$ ansible 172.16.1.181 -b -m fetch -a "src=/tmp/test1 dest=/tmp/kkk flat=yes" -i ./hosts_key # 推薦,只拷貝一臺 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m fetch -a "src=/tmp/test1 dest=/tmp/kkk flat=yes" -i ./hosts_key # 不推薦,會產(chǎn)生覆蓋 ## 查看拷貝結(jié)果 [yun@ansi-manager ansible_info]$ cat /tmp/kkk2/test1 111 222 333 aaa bbb [yun@ansi-manager ansible_info]$ ll /tmp/kkk -rw-rw-r-- 1 yun yun 20 Nov 2 11:25 /tmp/kkk [yun@ansi-manager ansible_info]$ cat /tmp/kkk # 該文件沒有 "11111"信息; 產(chǎn)生了覆蓋效應(yīng) 111 222 333 aaa bbb

相關(guān)選項(xiàng)說明:

src:源文件,當(dāng)前僅支持文件,不支持目錄

dest:推送數(shù)據(jù)的目標(biāo)路徑,默認(rèn)為:dest[路徑]/hostname/src[路徑]。參見上面示例

flat: 默認(rèn) False。當(dāng)為 yes/True 時(shí),那么拷貝效果類似于本地的 copy。

template 模板使用

該模塊功能類似于 copy 模塊,但 copy 模塊不支持變量,不支持模板。

template 模塊支持變量,支持 Jinja 模板。因此如果生成中的配置文件涉及變量,那么請使用 template 模塊。

涉及到 playbook、變量和 Jinja ,這些在后面的文章會有詳解。

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc template # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) # palybook [yun@ansi-manager ansible_info]$ pwd /app/ansible_info [yun@ansi-manager ansible_info]$ ll total 16 drwxrwxr-x 2 yun yun 35 Oct 11 11:23 file -rw-rw-r-- 1 yun yun 226 Oct 8 16:07 hosts_key -rw-rw-r-- 1 yun yun 304 Oct 11 11:40 test_template.yml [yun@ansi-manager ansible_info]$ ll file/ # 涉及的文件 total 4 -rw-rw-r-- 1 yun yun 175 Oct 11 11:23 test_template.conf.j2 [yun@ansi-manager ansible_info]$ cat file/test_template.conf.j2 # facts 變量 dns_info={{ ansible_dns['nameservers'][0] }} mem_total={{ ansible_memtotal_mb }} # 自定義變量 listen_port={{ listen_port }} access_addr={{ access_addr }}[yun@ansi-manager ansible_info]$ [yun@ansi-manager ansible_info]$ cat test_template.yml # 涉及的 playbook --- # template 示例 - hosts: proxyserversvars:- listen_port: 8080- access_addr: zhangblog.comtasks:- name: "template conf"template:src: ./file/test_template.conf.j2dest: /tmp/test_template.confowner: rootgroup: yunmode: '0600' [yun@ansi-manager ansible_info]$ ansible-playbook -b -i ./hosts_key test_template.yml # 執(zhí)行

目標(biāo)機(jī)器查看

[root@ansi-haproxy01 tmp]# pwd /tmp [root@ansi-haproxy01 tmp]# cat test_template.conf # facts 變量 dns_info=223.5.5.5 mem_total=1821 # 自定義變量 listen_port=8080 access_addr=zhangblog.com

相關(guān)選項(xiàng)說明:

src:源文件「可以是絕對路徑或相對路徑」

dest:推送數(shù)據(jù)的目標(biāo)路徑或目標(biāo)文件

owner:指定遠(yuǎn)端文件的屬主

group:指定遠(yuǎn)端文件的屬組

mode:指定遠(yuǎn)端文件的權(quán)限

backup:如果推送的目標(biāo)文件存在且與源文件內(nèi)容不同,那么會對目標(biāo)文件進(jìn)行備份

file 文件配置模塊

在受控機(jī)創(chuàng)建文件或目錄,或修改屬性信息「如:屬主、屬組、權(quán)限」

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc file # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) ## 在受控機(jī)改變目標(biāo)文件的屬性【該文件是已存在的】 [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 ## 在受控機(jī)創(chuàng)建軟連接 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "src=/tmp/yum_test.sh dest=/tmp/yum_link.sh owner=yun group=yun state=link" -i ./hosts_key ## 在受控機(jī)創(chuàng)建硬鏈接 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "src=/tmp/yum_test.sh dest=/tmp/yum_hard.sh owner=yun group=root state=hard" -i ./hosts_key ## 在受控機(jī),如果目標(biāo)文件不存在則創(chuàng)建 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/dest_file owner=yun group=yun state=touch" -i ./hosts_key ## 在控制機(jī),如果目標(biāo)目錄不存在則創(chuàng)建「可創(chuàng)建多級目錄」 [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 ## 在控制機(jī),改變目標(biāo)目錄和目錄下所有目錄或文件的屬性信息「遞歸修改」 [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 ## 在受控機(jī),如果目標(biāo)文件或目錄存在,則刪除「慎用!!!」 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m file -a "path=/tmp/desc_dir state=absent " -i ./hosts_key

相關(guān)選項(xiàng)說明:

path:指定目標(biāo)文件或目錄

owner:指定目標(biāo)文件的屬主

group:指定目標(biāo)文件的屬組

mode:指定目標(biāo)文件的權(quán)限

state:狀態(tài)說明

????file:默認(rèn)值,指定文件

????link:創(chuàng)建軟連接

????hard:創(chuàng)建硬鏈接

????touch:如果文件不存在則創(chuàng)建

????directory:如果目錄不存在則創(chuàng)建

????absent:如果目標(biāo)文件或目錄存在,則刪除「慎用!!!」

recurse:遞歸授權(quán)

lineinfile 行編輯模塊

此模塊確保文件中有特定的行,或者使用反向引用的正則表達(dá)式替換現(xiàn)有的行。當(dāng)您只想更改文件中的一行時(shí),這非常有用。

如果您想要更改多個(gè)相似的行,請查看[replace]模塊。如果你想要插入/更新/刪除文件中的一個(gè)行塊,請查看[blockinfile]模塊。對于其他情況,請參見[copy]或[template]模塊。

數(shù)據(jù)文件準(zhǔn)備

[yun@ansi-manager tmp]$ cat /tmp/lineinfile_test # disabled - No SELinux policy is loaded. SELINUX=disabled1 # disabled - No SELinux policy is loaded. SELINUX=disabled2 # disabled - No SELinux policy is loaded. SELINUX=disabled3 # SELINUXTYPE= can take one of three two values:# httpd listen port Listen 80 # 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc lineinfile # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán)

行插入

# 如果文件中沒有 line 中的字符串,那么就追加在文件末尾;有則不作任何操作。 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test line='# who are you?'" -i ./hosts_key # 首先保證line 中的字符串在文件中沒有,如果有則不會添加 # 其次會使用insertafter中的正則規(guī)則進(jìn)行正則匹配,匹配成功則在最后一次匹配行后面插入line,如果沒匹配成功則在文件末尾插入 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertafter='SELINUX' line='insertafter test1'" -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertafter='SELINUXXX' line='insertafter test2'" -i ./hosts_key # 首先保證line 中的字符串在文件中沒有,如果有則不會添加 # 其次會使用insertbefore中的正則規(guī)則進(jìn)行正則匹配,匹配成功則在最后一次匹配行前面插入line,如果沒匹配成功則在文件末尾插入 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertbefore='SELINUX' line='insertbefore test1'" -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test insertbefore='SELINUXXX' line='insertbefore test2'" -i ./hosts_key

行替換

# state=present時(shí),如果多次匹配,那么最后一次匹配會被修改;如果沒有匹配成功則在文件末尾追加,不管line是否存在。 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test regexp='^SELINUX=' line='SELINUX=enforcing'" -i ./hosts_key # state=present時(shí),如果多次匹配,那么最后一次匹配會被修改;如果沒有匹配成功則文件保持不變,使用backrefs=yes。 [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

行刪除

# state=absent時(shí),如果多次匹配,那么每一次匹配都會刪除匹配行 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test regexp='^SELINUX=' state=absent" -i ./hosts_key # 根據(jù)line匹配,如果匹配則刪除匹配行 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m lineinfile -a "path=/tmp/lineinfile_test line='# httpd listen port' state=absent" -i ./hosts_key

相關(guān)選項(xiàng)說明:

path:要修改的文件。

line:與 state=present 配合使用;在文件中要插入或者替換的行。

state:狀態(tài)說明

????present:添加或修改,默認(rèn)值

????absent:刪除

backrefs:與 state=present 配合使用;如果設(shè)置了 line 可以包含反向引用(位置和命名),當(dāng)‘regexp’匹配,就會填充反向引用。

????這個(gè)參數(shù)稍微改變了模塊的操作;‘insertbefore’ 和 ‘insertafter’ 將被忽略,如果 ‘regexp’ 與文件中的任何地方不匹配,文件將保持不變

regexp:對文件的每行進(jìn)行正則匹配;對于 state=present 只有最后的一次行匹配會被替換;對于 state=absent 只要匹配就會刪除該行。

backup:對源文件備份。默認(rèn):False

create:與 state=present 配合使用;如果不存在則創(chuàng)建文件。默認(rèn):False

insertafter:與 state=present 配合使用;在匹配行后插入。使用正則表達(dá)式,在指定正則表達(dá)式的最后一次匹配之后插入該行。如果需要第一個(gè)匹配,則使用(firstmatch=yes)。

????如果沒有匹配成功,那么會在文件末尾處插入。優(yōu)先級低于 regexp。

insertbefore:與 state=present 配合使用;在匹配行前插入。使用正則表達(dá)式,在指定正則表達(dá)式的最后一次匹配之前插入該行。如果需要第一個(gè)匹配,則使用(firstmatch=yes)。

????如果沒有匹配成功,那么會在文件末尾處插入。優(yōu)先級低于 regexp。

firstmatch:與 insertafter 或 insertbefore 配合使用;在 insertafter 或 insertbefore 的首次正則匹配。默認(rèn):False

owner:指定遠(yuǎn)端文件的屬主

group:指定遠(yuǎn)端文件的屬組

mode:指定遠(yuǎn)端文件的權(quán)限

blockinfile 多行編輯模塊

該模塊可以幫助我們在指定的文件中插入"一段文本",這段文本是被標(biāo)記過的。

換句話說就是,我們在這段文本上做了記號,以便在以后的操作中可以通過"標(biāo)記"找到這段文本,然后修改或者刪除它

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc blockinfile # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán)

對不存在的文件進(jìn)行——多行插入與修改

# /tmp/blockinfile_test 文件是不存在的,因此使用了create選項(xiàng) # 插入/修改 如果沒有則插入,如果之前有信息則修改 ##### 這里之前沒有,則是創(chuàng)建文件并【插入】信息 [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 [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test # 查看文件信息 # BEGIN ANSIBLE MANAGED BLOCK Match User ansible-agent PasswordAuthentication no # END ANSIBLE MANAGED BLOCK ##### 文件已存在,mark標(biāo)記已存在,這里是【修改】 [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 [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test # 查看文件信息 # BEGIN ANSIBLE MANAGED BLOCK iface eth0 inet staticaddress 192.0.2.23netmask 255.255.255.0 # END ANSIBLE MANAGED BLOCK

對已存在的文件進(jìn)行——多行插入與修改

[root@ansi-manager ansible_info]# cat /tmp/blockinfile_test2 # 查看文件信息 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head> <title>blockinfile info</title> </head> <body> <h1>welcome to here.</h1> </body></html> ##### 插入多行標(biāo)記塊信息 這里也使用了 insertafter 選項(xiàng) [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 [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test2 # 查看文件信息 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head> <title>blockinfile info</title> </head> <body> <!-- BEGIN ANSIBLE MANAGED BLOCK --> <h1>Welcome to blockinfile</h1> <p>Last Login By you!</p> <!-- END ANSIBLE MANAGED BLOCK --> <h1>welcome to here.</h1> </body></html> ##### 刪除標(biāo)記塊信息 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m blockinfile -a 'path=/tmp/blockinfile_test2 marker="<!-- {mark} ANSIBLE MANAGED BLOCK -->" block=""' -i ./hosts_key [root@ansi-manager ansible_info]# cat /tmp/blockinfile_test2 # 查看文件信息 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head> <title>blockinfile info</title> </head> <body> <h1>welcome to here.</h1> </body></html>

相關(guān)選項(xiàng)說明:

path:要修改的文件。

block:要插入標(biāo)記行內(nèi)的文本。如果該選項(xiàng)缺失或是一個(gè)空字符串,該塊將被刪除,就像 “state” 被指定為 “absent” 。(別名:content)

state:狀態(tài)說明

????present:添加或修改,默認(rèn)值

????absent:刪除

create:文件不存在則創(chuàng)建。默認(rèn):False

backup:對源文件備份。默認(rèn):False

insertafter:在匹配行后插入。使用正則表達(dá)式,在指定正則表達(dá)式的最后一次匹配之后插入該block。

????如果沒有匹配成功,那么會在文件末尾處插入。

insertbefore:在匹配行前插入。使用正則表達(dá)式,在指定正則表達(dá)式的最后一次匹配之前插入該block。

????如果沒有匹配成功,那么會在文件末尾處插入。

marker:標(biāo)記線模板。’{mark}’ 將被替換為 ‘in marker_begin’ 的值【默認(rèn):BEGIN】和 ‘marker_end’ 的值【默認(rèn):END】

marker_begin:開始的標(biāo)記變量信息。默認(rèn):BEGIN

marker_end:結(jié)尾的標(biāo)記變量信息。默認(rèn):END

owner:指定遠(yuǎn)端文件/目錄的屬主

group:指定遠(yuǎn)端文件/目錄的屬組

mode:指定遠(yuǎn)端文件/目錄的權(quán)限

ini_file INI格式配置模塊

在一個(gè)ini的文件中管理(添加、刪除、更改)單獨(dú)的配置,而不必使用[template]或[assemble]來管理整個(gè)文件。添加不存在的section。

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc ini_file # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán)

添加與修改

# 第一次執(zhí)行,如果文件不存在,默認(rèn)會創(chuàng)建 添加 section 和 option 信息 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks option=username value=bobe mode='0644'" -i ./hosts_key # 修改 option 信息 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks option=username value=alice" -i ./hosts_key # 添加另外一個(gè)section信息 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=base_info option=address value='BeiJing'" -i ./hosts_key # 添加一個(gè)option信息,還是放在 drinks 這個(gè)section下 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks option=password value=123456" -i ./hosts_key

刪除

# 刪除整個(gè)section, 刪除drinks這個(gè)section [yun@ansi-manager ansible_info]$ ansible manageservers -b -m ini_file -a "path=/tmp/test.ini section=drinks state=absent" -i ./hosts_key # 刪除指定section下的option [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

相關(guān)選項(xiàng)說明:

path:INI格式文件路徑。如果沒有則默認(rèn)會創(chuàng)建。

section:INI文件中的 section 名。當(dāng)設(shè)置單個(gè)值時(shí),如果是 ‘state=present’ 則會自動(dòng)添加這個(gè)值。如果留空或設(shè)置為 ‘null’,‘option’ 將放在第一個(gè) ‘section’ 之前。

????如果配置格式不支持 section,也需要使用 “null”。

option:如果設(shè)置(需要更改的 value),這是選項(xiàng)的名稱。如果添加/刪除整個(gè)“section”,可以省略。默認(rèn):null

value:option 的值。刪除 “option” 時(shí)可以省略。

state:狀態(tài)說明

????present:添加或修改,默認(rèn)值

????absent:刪除

backup:對源文件備份。默認(rèn):False

create:如果不存在則創(chuàng)建文件。默認(rèn):True

owner:指定遠(yuǎn)端文件的屬主

group:指定遠(yuǎn)端文件的屬組

mode:指定遠(yuǎn)端文件的權(quán)限

no_extra_spaces:在 = 符號前后不插入空格。默認(rèn):False

replace 多行替換模塊

對文件所匹配的內(nèi)容進(jìn)行替換/刪除。

數(shù)據(jù)文件準(zhǔn)備

[yun@ansi-manager ~]$ cat /tmp/replace_test 172.16.1.181 test1.zhangblog.com 172.16.1.182 test2.zhangblog.org 172.16.1.183 test3.zhangblog.net# httpd listen port Listen 80 ServerRoot "/etc/httpd" User apache Group apache # 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc replace # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) # 將regexp正則匹配到的行,替換為replace的內(nèi)容;且這里使用了反向引用。 [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 # 將 after 之后的每行都替換為 replace 中的內(nèi)容 [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 # 如果 after沒有匹配完一行,那么 after匹配之后未匹配的該行內(nèi)容也會替換為replace 中的內(nèi)容 [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 # 將 before 之前的每行都替換為 replace 中的內(nèi)容 [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 # 如果 before沒有匹配完一行,那么 before匹配之前未匹配的該行內(nèi)容也會替換為replace 中的內(nèi)容 [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 # 刪除匹配內(nèi)容,行數(shù)不會改變。如果整行匹配,則最終為空行。 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test regexp='zhangblog'" -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible manageservers -b -m replace -a "path=/tmp/replace_test regexp='.*test.*'" -i ./hosts_key

相關(guān)選項(xiàng)說明:

path:要操作的文件路徑。

after:如果指定,只有after匹配之后的內(nèi)容將被替換/刪除。可以與before組合使用。after可能匹配一行也可能匹配一行的部分;且不支持正則匹配。

before:如果指定,只有before匹配之前的內(nèi)容將被替換/刪除。可以與after組合使用。before可能匹配一行也可能匹配一行的部分;不支持正則匹配。

regexp:要在文件內(nèi)容中查找的正則表達(dá)式。

replace:替換regexp匹配項(xiàng)的字符串。可能包含反向引用,如果regexp匹配,將使用regexp捕獲組展開這些反向引用。如果沒有設(shè)置,則完全刪除匹配項(xiàng)。

????反向引用可以像 ‘\1’ 那樣含糊地使用,也可以像 ‘\g<1>’ 那樣顯式地使用。

backup:對源文件備份。默認(rèn):False

encoding:用于讀寫文件的字符編碼。默認(rèn):utf-8

owner:指定遠(yuǎn)端文件的屬主

group:指定遠(yuǎn)端文件的屬組

mode:指定遠(yuǎn)端文件的權(quán)限

sysctl 修改內(nèi)核參數(shù)模塊

這個(gè)模塊操作 sysctl 條目,并在更改它們之后可選地執(zhí)行 /sbin/sysctl -p 。

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc sysctl # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) # 會修改 /etc/sysctl.conf 文件并執(zhí)行 /sbin/sysctl -p 使其生效 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m sysctl -a 'name=net.ipv4.ip_forward value=1' -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible manageservers -b -m sysctl -a 'name=vm.swappiness value=5' -i ./hosts_key

相關(guān)選項(xiàng)說明:

name:內(nèi)核參數(shù)變量名。(別名:key)

value:sysctl鍵的期望值。(別名:val)

reload:當(dāng)為 yes 時(shí),如果 sysctl_file 文件被修改,那么會執(zhí)行 /sbin/sysctl -p,使修改的參數(shù)生效。當(dāng)為 no 時(shí),則不重載 sysctl ,盡管 sysctl_file 已被修改。

state:狀態(tài)說明

????present:添加或修改,默認(rèn)值

????absent:刪除

sysctl_file:指定 sysctl.conf 文件的絕對路徑。默認(rèn):/etc/sysctl.conf

sysctl_set:使用sysctl命令驗(yàn)證令牌值,必要時(shí)使用 -w 進(jìn)行設(shè)置。默認(rèn):no

ignoreerrors:使用此選項(xiàng)可忽略關(guān)于未知鍵的錯(cuò)誤。默認(rèn):no

get_url 文件下載模塊

通過 HTTP,HTTPS或 FTP 下載一個(gè)文件。

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc get_url ## 下載一個(gè)文件 [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 ## 下載前會比對校驗(yàn)和,如果不匹配則不下載 [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

相關(guān)選項(xiàng)說明:

mode:指定目標(biāo)文件的權(quán)限

url:指定文件來源「支持 HTTP,HTTPS 和 FTP」

dest:指定目標(biāo)存放的目錄或文件

checksum:校驗(yàn)和「支持 sha256 和 md5」

timeout:請求超時(shí)時(shí)間,默認(rèn) 10 秒。

owner:指定遠(yuǎn)端文件的屬主

group:指定遠(yuǎn)端文件的屬組

mode:指定遠(yuǎn)端文件的權(quán)限

backup:源文件備份

service、systemd 服務(wù)管理模塊

如果在 CentOS 6 及以下版本,優(yōu)先使用 service 。

如果在 CentOS 7 及以上版本,優(yōu)先使用 systemd 。

這里考慮到我們使用的 CentOS 7,因此使用的是 systemd 。至于 service 請自行查看文檔。

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc service [yun@ansi-manager ansible_info]$ ansible-doc systemd # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) ## 啟動(dòng) httpd 服務(wù),并且加入開機(jī)自啟動(dòng) [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=httpd state=started enabled=yes" -i ./hosts_key ## 重啟 httpd 服務(wù),并且重新加載 /usr/lib/systemd/system/httpd.service 服務(wù)配置文件,且加入開機(jī)自啟動(dòng) [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=httpd state=restarted daemon_reload=yes enabled=yes" -i ./hosts_key ## 停止 httpd 服務(wù),并且不加入開機(jī)自啟動(dòng) [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=httpd state=stopped enabled=no" -i ./hosts_key

相關(guān)選項(xiàng)說明:

name:服務(wù)名稱

state:服務(wù)狀態(tài)

????started:啟動(dòng)服務(wù)

????stopped:停止服務(wù)

????reloaded:重加載服務(wù)

????restarted:重啟動(dòng)服務(wù)

enabled:是否加入開機(jī)自啟動(dòng)「yes 加入, no 不加入, 默認(rèn) null」

daemon_reload:當(dāng)我們修改了服務(wù)管理配置文件,是否重加載其配置「yes 重加載服務(wù)配置文件, no 不加載,默認(rèn)值」

group 組模塊

創(chuàng)建或刪除用戶組

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc group # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) ## 創(chuàng)建 test 組,并指定組ID [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m group -a " name=test gid=9001" -i ./hosts_key ## 創(chuàng)建 testsystem 組,并指定為系統(tǒng)組 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m group -a "name=testsystem system=true" -i ./hosts_key ## 刪除 testsystem 組 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m group -a "name=testsystem state=absent" -i ./hosts_key

相關(guān)選項(xiàng)說明:

gid:指定組ID,默認(rèn) null

name:指定組名稱

state:組狀態(tài)

????present:創(chuàng)建組,默認(rèn)

????absent:刪除組

system:是否為系統(tǒng)組

????true:是系統(tǒng)組

????false:不是系統(tǒng)組

user 用戶模塊

創(chuàng)建或刪除用戶

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc user # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán)

1、創(chuàng)建用戶,指定 UID,指定附加組,不創(chuàng)建家目錄,不可以登錄

[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

受控機(jī)查看信息

[yun@ansi-haproxy02 ~]$ id zhangtest uid=1005(zhangtest) gid=1005(zhangtest) groups=1005(zhangtest),1000(zhang),1050(yun) [yun@ansi-haproxy02 ~]$ tail -n1 /etc/passwd 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、為用戶創(chuàng)建密碼或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、為用戶創(chuàng)建密碼

# 得到密碼串 [yun@ansi-manager ansible_info]$ ansible localhost -m debug -a "msg={{ '123456' | password_hash('sha512', 'salt') }}" localhost | SUCCESS => {"msg": "$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w.igcOo1R7vBYR65JquIQ/7siC7VRpmteKvZmfSkNc69." } ## 注意 -a '' 是單引號,而不是雙引號。如果使用雙引號,特殊字符會被解析 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m user -a 'name=zhangtest2 password=$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w.igcOo1R7vBYR65JquIQ/7siC7VRpmteKvZmfSkNc69.' -i ./hosts_key

相關(guān)選項(xiàng)說明:

name:用戶名稱

state:用戶狀態(tài)

????present:默認(rèn)值,創(chuàng)建用戶

????absent:刪除用戶

password:用戶密碼,默認(rèn):null

shell:設(shè)置用戶的shell

uid:指定用戶 UID

group:設(shè)置用戶主組,默認(rèn):null

groups:設(shè)置用戶附加組,默認(rèn):null

system:如果為 yes 則創(chuàng)建系統(tǒng)用戶,默認(rèn):false

home:設(shè)置用戶家目錄

create_home:是否創(chuàng)建家目錄,默認(rèn):true,如果不創(chuàng)建為:no

comment:用戶描述,默認(rèn):null

expires:用戶賬號失效日期,默認(rèn):null

update_password:更新密碼

????always:如果密碼不同,則更新,默認(rèn)值

????on_create:只有新建用戶時(shí)使用

remove:只有在 state=absent 時(shí)生效,作用:刪除用戶家目錄

generate_ssh_key:是否生成SSH key 密鑰對,默認(rèn):false

ssh_key_bits:設(shè)置 SSH key 字節(jié)長度,默認(rèn):有 ssh-keygen 設(shè)置

ssh_key_comment:設(shè)置 SSH key 的描述,默認(rèn)為:$HOSTNAME

ssh_key_file:指定 SSH key 的文件名,默認(rèn):null 【即為:.ssh/id_rsa】

ssh_key_passphrase:指定 SSH key 密碼,如果不提供則沒有密碼,默認(rèn):null

ssh_key_type:設(shè)置 SSH key 類型,默認(rèn):rsa

cron 定時(shí)任務(wù)模塊

創(chuàng)建、注釋或刪除定時(shí)任務(wù)

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc cron # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) ## 創(chuàng)建定時(shí)任務(wù), name 為定時(shí)任務(wù)說明 [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 ## 注釋指定定時(shí)任務(wù),其中 name ,時(shí)間參數(shù),和 job 都需要。 [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 ## 刪除定時(shí)任務(wù) [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m cron -a 'name="crond test" state=absent' -i ./hosts_key

相關(guān)選項(xiàng)說明:

name:定時(shí)任務(wù)描述

state:狀態(tài)

????present:添加,默認(rèn)值

????absent:刪除

user:指定哪個(gè)用戶的定時(shí)任務(wù)會修改,默認(rèn)是 root 用戶,默認(rèn):null

minute:哪個(gè)分鐘執(zhí)行 ( 0-59, *, */2, etc ),默認(rèn):*

hour:哪個(gè)小時(shí)執(zhí)行 ( 0-23, *, */2, etc ),默認(rèn) *

day:每月的哪天執(zhí)行 ( 1-31, *, */2, 等 ),默認(rèn):*

month:哪個(gè)月執(zhí)行 ( 1-12, *, */2, etc ),默認(rèn):*

weekday:每周的哪天執(zhí)行 ( 0-6 為 Sunday-Saturday, *, etc ),默認(rèn):*

disabled:是否注釋指定定時(shí)任務(wù),默認(rèn):false

job:定時(shí)任務(wù)要操作的具體信息

mount 文件系統(tǒng)掛載模塊

文件系統(tǒng)的掛載與取消。

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc mount # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán)

案例示例:

在 ansi-manager 機(jī)器作為 NFS 的服務(wù)端,ansi-haproxy01、ansi-haproxy02 作為 NFS 的客戶端。

1、在所有機(jī)器安裝 NFS 必要的包

[yun@ansi-manager ansible_info]$ ansible manageservers,proxyservers -b -m yum -a "name=nfs-utils,rpcbind state=present" -i ./hosts_key

2、NFS 服務(wù)端配置與啟動(dòng)

[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 # 創(chuàng)建 /data 目錄,屬主、屬組為 nfsnobody [yun@ansi-manager ansible_info]$ ansible manageservers -b -m file -a "path=/data owner=nfsnobody group=nfsnobody state=directory" -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible manageservers -b -m systemd -a "name=rpcbind state=started enabled=yes" -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible manageservers -b -m systemd -a "name=nfs state=started enabled=yes" -i ./hosts_key ## 查看 Export list 信息 [yun@ansi-manager ansible_info]$ ansible manageservers -b -m shell -a "showmount -e" -i ./hosts_key

3、NFS 客戶端操作

[yun@ansi-manager ansible_info]$ ansible proxyservers -b -m systemd -a "name=rpcbind state=started enabled=yes" -i ./hosts_key ## 檢查共享信息 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m shell -a "showmount -e 172.16.1.180" -i ./hosts_key

4、NFS 客戶端掛載

## 不掛載設(shè)備,僅在 /etc/fstab 中寫入掛載配置信息 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=172.16.1.180:/data path=/mnt fstype=nfs state=present backup=yes" -i ./hosts_key ## 掛載設(shè)備,并在 /etc/fstab 中寫入掛載配置信息 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=172.16.1.180:/data path=/mnt fstype=nfs state=mounted" -i ./hosts_key ## 不卸載設(shè)備,僅在 /etc/fstab 中刪除掛載配置信息 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=172.16.1.180:/data path=/mnt fstype=nfs state=unmounted" -i ./hosts_key ## 卸載設(shè)備,并在 /etc/fstab 中刪除掛載配置信息 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m mount -a "src=172.16.1.180:/data path=/mnt fstype=nfs state=absent" -i ./hosts_key

相關(guān)選項(xiàng)說明:

src:要掛在的設(shè)備/磁盤

path:掛載點(diǎn)

opts:掛載參數(shù)選項(xiàng),如:ro,noauto;默認(rèn):null

fstype:文件系統(tǒng)類型

state:狀態(tài)

????present:不掛載設(shè)備,僅在 /etc/fstab 中寫入掛載配置信息

????mounted:掛載設(shè)備,并在 /etc/fstab 中寫入掛載配置信息

????unmounted:不卸載設(shè)備,僅在 /etc/fstab 中刪除掛載配置信息

????absent:卸載設(shè)備,并在 /etc/fstab 中刪除掛載配置信息

backup:對之前的文件備份

debug 調(diào)試模塊與 register 變量

這里會使用 playbook 書寫。具體的 playbook 詳解,參見后面的文章。

涉及到 playbook、變量和 Jinja ,這些在后面的文章會有詳解。

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc debug # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) # Ad-Hoc 方式 [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m debug -i ./hosts_key [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m debug -a 'msg="print customized message"' -i ./hosts_key ################################################## # Playbooks 方式 [yun@ansi-manager ansible_info]$ pwd /app/ansible_info [yun@ansi-manager ansible_info]$ ll total 24 -rw-rw-r-- 1 yun yun 483 Aug 18 09:12 hosts_key -rw-rw-r-- 1 yun yun 245 Aug 18 21:55 test_debug_register.yml [yun@ansi-manager ansible_info]$ cat test_debug_register.yml --- # 如何使用 debug 模塊與 register 變量 - hosts: proxyserverstasks:- name: "get host port info"shell: netstat -lntpregister: host_port- name: "print host port"debug:#msg: "{{ host_port }}" # 輸出全部信息#msg: "{{ host_port.cmd }}" # 引用方式一msg: "{{ host_port['stdout_lines'] }}" # 引用方式二[yun@ansi-manager ansible_info]$ ansible-playbook -b -i ./hosts_key test_debug_register.yml

第一個(gè) task 中,使用了 register 注冊變量,名為 host_port ;當(dāng) shell 模塊執(zhí)行完畢后,會將數(shù)據(jù)放到該變量中。

第二給 task 中,使用了 debug 模塊,并從 host_port 中獲取數(shù)據(jù)。

assert 斷言模塊【了解】

對自定義消息斷言。

涉及到 playbook、變量和 Jinja ,這些在后面的文章會有詳解。

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc assert # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) # Ad-Hoc 方式 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 == 3' success_msg=ok fail_msg=fail" -i ./hosts_key # 斷言失敗 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 <= 3' success_msg=ok fail_msg=fail" -i ./hosts_key # 斷言成功 [yun@ansi-manager ansible_info]$ ansible proxyservers -m assert -a "that='2 < 3' success_msg=ok fail_msg=fail" -i ./hosts_key # 斷言成功 [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 # 斷言成功 [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 # 斷言失敗 [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 # 斷言成功 ################################################## # Playbooks 方式 [yun@ansi-manager ansible_info]$ pwd /app/ansible_info [yun@ansi-manager ansible_info]$ ll total 12 -rw-rw-r-- 1 yun yun 226 Oct 8 16:07 hosts_key -rw-rw-r-- 1 yun yun 902 Oct 11 10:57 test_assert.yml [yun@ansi-manager ansible_info]$ cat test_assert.yml # playbook 信息 --- # assert 示例 - hosts: proxyservers# 使用如下變量,分別測試下vars:#- my_param: 20#- my_param: -2- my_param: 200tasks:- name: "assert example 1"assert:# ansible_os_family 為 facts 中的變量信息that:- ansible_os_family == "RedHat"success_msg: "success info"fail_msg: "fail info"- name: "assert example 2"assert:# that 下面的列表,為 && 關(guān)系that:- my_param >= 0- my_param <= 100fail_msg: "'my_param' must be between 0 and 100"success_msg: "success info"# 是否忽略該 task 的錯(cuò)誤ignore_errors: True- name: "assert example 3"assert:that:- my_param <= 10 or my_param >= 100fail_msg: "'my_param' must be <= 10 or >= 100"success_msg: "success info"[yun@ansi-manager ansible_info]$ ansible-playbook -b -i ./hosts_key test_assert.yml # 執(zhí)行

相關(guān)選項(xiàng)說明:

that:列表字符串表達(dá)式

success_msg:當(dāng)斷言成功時(shí)輸出的信息

fail_msg:別名 msg,當(dāng)斷言失敗時(shí)輸出的信息

quiet:默認(rèn) False,設(shè)置為 yes 避免冗長輸出

selinux 安全模塊

配置 SELinux 。

# 查看 yum 模塊方法「可優(yōu)先查看 EXAMPLES 信息的使用案例,知曉如何使用」 [yun@ansi-manager ansible_info]$ ansible-doc selinux # 由于我們使用的是 yun 普通用戶 # 因此有時(shí)需要使用 -b 選擇進(jìn)行提權(quán) ## 關(guān)閉 selinux [yun@ansi-manager ansible_info]$ ansible proxyservers -b -m selinux -a "state=disabled" -i ./hosts_key

相關(guān)選項(xiàng)說明:

state:狀態(tài)

????disabled:不可用

????enforcing:強(qiáng)制執(zhí)行

????permissive:會提醒


———END——— 如果覺得不錯(cuò)就關(guān)注下唄 (-^O^-) !

總結(jié)

以上是生活随笔為你收集整理的Ansible Ad-Hoc与常用模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。