国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站優(yōu)化試卷chrome谷歌瀏覽器官方下載

網(wǎng)站優(yōu)化試卷,chrome谷歌瀏覽器官方下載,漳州網(wǎng)站開發(fā)點博大a優(yōu),龍崗網(wǎng)絡(luò)推廣深圳網(wǎng)站建設(shè)Ansible自動化運維這部分我將會分為五個部分來為大家講解 (一)介紹、無密鑰登錄、安裝部署、設(shè)置主機(jī)清單 (二)Ansible 中的 ad-hoc 模式 模塊詳解(15)個 (三)Playbook 模式詳解 …

Ansible自動化運維這部分我將會分為五個部分來為大家講解

(一)介紹、無密鑰登錄、安裝部署、設(shè)置主機(jī)清單

(二)Ansible 中的 ad-hoc 模式 模塊詳解(15)個

(三)Playbook 模式詳解

(四)jinja2 模板 Roles角色詳解

(五)運維實戰(zhàn)

相關(guān)文章大家在最后可以看到

目錄

一、Ansible 中的 Playbook 模式

1.1?Playbook 的優(yōu)勢

1.2 Playbook 的組成

1.3 Playbook命令

1.4 Playbook的語法

1、權(quán)限

2、通知與觸發(fā)

1.5 Playbook中的變量

1.1 通過vars 定義變量

1.2 通過vars_files定義變量

1.3命令行定義變量

1.4?官方推薦定義變量方法(推薦)

1.6 debug

1.7 facts緩存

二、Playbook中的流程控制

Playbook條件

1.1 條件判斷

1.2 組合判斷

1.3 操作實例

Playbook的循環(huán)

1.1 批量安裝軟件包

1.2 批量創(chuàng)建用戶

1.3 批量創(chuàng)建組

1.4 批量刪除用戶和組

1.5 批量復(fù)制文件

異常處理:

Tags標(biāo)簽

1、打標(biāo)簽的用法

1.1 打標(biāo)簽的方式

1.2 標(biāo)簽的使用,

1.3 標(biāo)簽的作用


一、Ansible 中的 Playbook 模式

? ? ? ? ? Playbook不同于使用單個模塊操作遠(yuǎn)程服務(wù)器,Playbook的功能更加強(qiáng)大。如果說單個模塊執(zhí)行類似于Linux系統(tǒng)中的命令,那么Playbook就類似于shell腳本,將多個模塊組合起來實現(xiàn)一組的操作。

Playbook還是會用到ad-hoc模式中的模塊及參數(shù),只不過Playbook與ad-hoc的寫法不一樣。

1.1?Playbook 的優(yōu)勢

功能比ad-hoc更全
能很好的控制先后執(zhí)行順序, 以及依賴關(guān)系
語法展現(xiàn)更加的直觀
ad-hoc無法持久使用,playbook可以持久使用

1.2 Playbook 的組成

play:一個完整的部署任務(wù),并且必須包含以下前兩項:
hosts:定義對哪些主機(jī)進(jìn)程操作
tasks:定義的是具體執(zhí)行的任務(wù)
become:表示是否要以特權(quán)用戶(通常是root)身份執(zhí)行任務(wù)。如果設(shè)置為yes,則任務(wù)會以特權(quán)身份執(zhí)行。
playbook: 由一個或多個play組成,一個play可以包含多個task任務(wù)

說明:Ansible 中的 Playbook 文件結(jié)尾為.yml 格式

示例:安裝host1節(jié)點?httpd 服務(wù)并且在host3節(jié)點上重啟nginx并且檢查他們的服務(wù)狀態(tài)

[root@server ~]# vi httpd.yml
[root@server ~]# cat httpd.yml
---- hosts: node1become: yestasks:# 使用yum模塊在node1主機(jī)上安裝httpd服務(wù) ?- name: Install httpd Serveryum:name: httpdstate: present

解析:
name:定義一個Playbook的名稱,用于標(biāo)識Playbook的用途;
hosts:指定要在哪個主機(jī)上執(zhí)行,也是寫主機(jī)或主機(jī)組名,
需要提前在/etc/ansible/hosts中配置好;
become:yes表示使用特權(quán)用戶;
tasks:屬于是一個任務(wù)列表,主要寫具體執(zhí)行什么的(可以有多個);
name:每個任務(wù)的名稱,用于描述干什么的;上述yml中則是安裝httpd服務(wù);
yum:表示使用哪個模塊來進(jìn)行操作;
模塊的參數(shù)可以看ad-hoc中的,用的都是一樣的,寫法不一樣就是;
name:要安裝的服務(wù)名稱,我們這里是httpd:
state:要進(jìn)行的操作,可以是安裝、卸載、更新;
其實tasks就是Ansible的模塊以YAML語法寫入到playbook中。
生產(chǎn)環(huán)境中為了可讀性與可維護(hù)性通常一個playbook中只編寫一個play,如果某些主機(jī)需要執(zhí)行多個play,那么可以使用include關(guān)鍵字在一個playbook中導(dǎo)入其他的playbook。

1.3 Playbook命令

格式:

ansible-playbook [選項] playbook.yml 

常用選項:

選項/參數(shù)

選項/參數(shù)/分析

-T

建立SSH連接的超時時間

-i

指定Inventory文件

- -list-hosts

匹配的服務(wù)器列表

- -list-tasks

列出任務(wù)列表

- -step

每執(zhí)行一個任務(wù)后停止,等待用戶確認(rèn)

- -syntax-check

語法檢測

- -list-tags

列出此yml文件中的所有tag標(biāo)簽

- -skip-tags

執(zhí)行–skip-tags之外的標(biāo)簽任務(wù)

-C

檢查當(dāng)前這個Playbook是否會修改受控端,模擬執(zhí)行

-f

并發(fā)執(zhí)行的進(jìn)程數(shù),默認(rèn)為5

1.4 Playbook的語法

1、權(quán)限

remote_user指定playbook運行時的用戶身份,可以寫在hosts下,也可以每個tasks做定義;
become 該選項為布爾值,當(dāng)?shù)扔趛es表示以管理員身份通常與become_method一起使用;
become_method:su或sudo

# 指定使用哪個用戶執(zhí)行此任務(wù)
remote_user: root
# 是否使用特權(quán)用戶
become: yes

2、通知與觸發(fā)

notify: 如果指定的操作執(zhí)行了,會觸發(fā)handlers的操作,指定的是handler的名稱;
handlers和notify指定的名稱必須相同,否則無法觸發(fā)。
handlers 中需要- name指定名稱 ,handlers只會在所有的tasks執(zhí)行完后執(zhí)行,
并且,即便一個handlers被觸發(fā)多次,也只會執(zhí)行一次。 handlers是一種特殊的tasks。

handlers(觸發(fā)事件)

notify: 觸發(fā)
handlers:觸發(fā)的動作
# 兩者的名稱一定要相同,否則無法觸發(fā)。

使用上場景:一般都是修改配置文件時
正常情況時handlers是不會執(zhí)行的,除非觸發(fā)任務(wù),才會執(zhí)行
任務(wù)導(dǎo)致系統(tǒng)狀態(tài)發(fā)生變化(例如,配置文件被修改),則將觸發(fā)名為restart的處理器。

- hosts: node1tasks:- name: installredisyum: name=redis- name: copyfiletemplate: src=redis.conf dest=/etc/redis.conftags: copyfilenotify: restart ? # 觸發(fā):觸發(fā)名稱- name: startservice:name: redisstate: startedenabled: yeshandlers: ? ? ? # 觸發(fā)動作- name: restartservice:name: redisstate: restarted

這是我又自己隨便寫的一個比較簡單的
下載nginx并啟動,啟動成功后會自動執(zhí)行關(guān)閉防火墻并且檢查運行狀態(tài)

[root@server ~]# cat nginx3.yml 
---- hosts: node3become: yestasks:- name: install_nginxyum:name: nginx state: present- name: Start_nginxservice:name: nginxstate: startednotify: - stop_firewalld- check_status_nginx ?- display nginx status ? ? ?changed_when: true ?# 強(qiáng)制標(biāo)記任務(wù)為已改變 ?handlers:- name: stop_firewalldservice: name: firewalldstate: stoppedenabled: no- name: check_status_nginxcommand: systemctl status nginxregister: nginx_statuschanged_when: false- name: display nginx statusdebug:var: nginx_status.stdout_lines

在Ansible中,處理器(handlers)只有在任務(wù)狀態(tài)發(fā)生變化時才會被觸發(fā)。例如,如果Nginx服務(wù)之前已經(jīng)是運行狀態(tài),那么Start_nginx任務(wù)不會被視為“改變”系統(tǒng)狀態(tài),因此不會觸發(fā)處理器。

為了確保處理器能夠被觸發(fā),你可以使用changed_when參數(shù)來強(qiáng)制標(biāo)記任務(wù)為已改變,或者使用meta: flush_handlers來強(qiáng)制執(zhí)行所有處理器。

1.5 Playbook中的變量

變量提供了便捷的方式來管理Ansible playbook的每一個項目中的動態(tài)值,比如nginx-1.6.3這個軟件包的版本,在其它地方或許會反復(fù)使用,那么如果將此值設(shè)置為變量,然后再在其他的playbook中調(diào)用,會方便許多。如此一來還方便維護(hù),減少維護(hù)的成本。

變量的定義方式

1.通過命令行進(jìn)行變量定義
2.在play文件中進(jìn)行變量定義
3.通過Inventory主機(jī)信息文件中進(jìn)行變量定義

變量讀取的優(yōu)先級為:?命令行 > playbook文件 > Inventory文件

1.1 通過vars 定義變量

---
- name: LAMPhosts: node1vars:packages_name:- httpd- mariadb-server- php- php-mysqltasks:- name: install LAMPyum:name: "{{packages_name}}"state: present

執(zhí)行此yml:

# 語法校驗
ansible-playbook --syntax-check LAMP.yml
# 執(zhí)行yml
ansible-playbook LAMP.yml(定義的yml文件名)

1.2 通過vars_files定義變量

當(dāng)變量較少時,使用vars定義沒有問題,當(dāng)變量較多時,可以將變量保存到一個獨立的文件中;
需要多個yml文件,一個主文件,需要調(diào)用其他yml獨立文件,主要是最后運行的;其他是定義包名的yml文件。

[root@server ansible]# cat rzc.yml 
---
httpd_package: httpd
mariadb_package: mariadb-server
[root@server ansible]# vi nginx4.yml
[root@server ansible]# cat nginx4.yml 
---- name: nginxhosts: node3become: yesvars_files:- rzc.ymltasks:- name: Install httpdyum:name: "{{ httpd_package }}"state: present- name: Install mariadb-serveryum:name: "{{ mariadb_package }}"state: present

執(zhí)行此yml:

# 語法校驗
ansible-playbook --syntax-check apache.yml
# 執(zhí)行yml
ansible-playbook apache.yml(定義的yml文件名)

1.3命令行定義變量

ansible-playbook命令提供-e選項,用于在命令行定義變量,命令行定義變量的優(yōu)先級最高

# 執(zhí)行:命令行定義變量
[root@localhost yml]# vi test.yml
---
- name: apache hosts: webbecome: yesvars: httpd_package:- httpdtasks:- name: install httpd serviceyum:name: "{{ httpd_package }}"state: present
#定義階段
[root@ansible ~]# ansible-playbook test.yml -e "httpd_package=httpd"

命令行指定多個變量。

ansible-playbook test.yml -e "file=command" -e "file2=command2"

1.4?官方推薦定義變量方法(推薦)

之前的幾種變量定義都不是很好用,比較好用的是在Ansible項目目錄下創(chuàng)建兩個變量目錄:

host_vars
group_vars

目錄名字一定要一致,不能做任何修改。
??理解如何設(shè)置和使用host_vars和group_vars可以使你的Ansible管理更加靈活和有組織。以下是更詳細(xì)的步驟,從設(shè)置目錄結(jié)構(gòu)到創(chuàng)建Playbook的執(zhí)行:

1.目錄結(jié)構(gòu)

your_ansible_project/
├── group_vars/
│ ??└── web-servers.yml
├── host_vars/
│ ??└── web-server.yml
├── playbook.yml
└── inventory.ini

group_vars目錄用于存放組級別的變量定義。
host_vars目錄用于存放主機(jī)級別的變量定義。
playbook.yml是你的Ansible Playbook。
inventory.ini是Ansible的主機(jī)清單文件,其中列出了你的主機(jī)和主機(jī)組。

2.清單文件(inventory.ini):

在這里添加你的主機(jī)和主機(jī)組

[root@server ~]# cat /etc/ansible/inventory.ini 
[node1]
host1
[node2]
host2
[node3]
host3
[node4]
host1
host3

3.組級別變量

group_vars/web-servers.yml

[root@server ~]# cd /etc/ansible/
[root@server ~]# mkdir -p /etc/ansible/group_vars
[root@server group_vars]# vi node4.yml
[root@server group_vars]# cat node4.yml 
---
httpd_package: httpd
mariadb_package: mariadb-server
nginx_package: nginx

4.主機(jī)級別變量

host_vars/web-server.yml
在host_vars目錄下創(chuàng)建一個YAML文件,例如node1.yml,并在其中定義主機(jī)級別的變量,如: ?

[root@server ~]# cd /etc/ansible/
[root@server ~]# mkdir -p /etc/ansible/host_vars
[root@server ansible]# cd host_vars/
[root@server host_vars]# vi node3.yml
[root@server host_vars]# cat node3.yml 
---
nginx_package= nginx

5.Playbook(playbook.yml)

創(chuàng)建你的Ansible Playbook,例如:

[root@server ansible]# vi nginx4.yml 
[root@server ansible]# cat nginx4.yml 
---- name: nginxhosts: node3become: yestasks:- name: Install nginxyum:name: "{{ nginx_package }}"state: present

6.運行playbook:

格式:

ansible-playbook -i inventory.ini playbook.yml

inventory.ini?: 這里面表示你設(shè)置的主機(jī)分組
playbook.yml:你創(chuàng)造的腳本名稱

此時,Ansible會自動加載group_vars和host_vars目錄中的變量,你的Playbook將使用這些變量來配置主機(jī)。
通過這種方式,你可以更加有組織地管理變量,特別是對于多主機(jī)和多組的環(huán)境。你可以為不同的組或主機(jī)設(shè)置特定的變量,而不必在Playbook中硬編碼這些值,提高了可維護(hù)性和可讀性。

1.6 debug

將上一步任務(wù)執(zhí)行的結(jié)果打印出來,不管成功還是失敗都會返回;

- name: Check the status of httpd service command: systemctl status httpd register: httpd_status  # 存儲到http_status變量中changed_when: false # 確保此任務(wù)不被標(biāo)記為改變了系統(tǒng)狀態(tài) - debug: # 輸出httpd服務(wù)的狀態(tài)信息 var: httpd_status.stdout_linesno_log: true  # 禁止記錄此任務(wù)的輸出

1.7 facts緩存

Ansible facts是在被管理主機(jī)上通過Ansible自動采集發(fā)現(xiàn)的變量。facts包含每臺特定的主機(jī)信息。比如:被控端的主機(jī)名、IP地址、系統(tǒng)版本、CPU數(shù)量、內(nèi)存狀態(tài)、磁盤狀態(tài)等等。

facts變量的使用場景

通過facts緩存檢查CPU,來生成對應(yīng)的nginx配置文件
通過facts緩存檢查主機(jī)名,生成不同的zabbix配置文件
通過facts緩存檢索物理機(jī)的內(nèi)存大小來生成不同的mysql配置文件

可以使用setup模塊查看facts變量列表:

[root@server ~]# ansible node1 -m setup
host1 | SUCCESS => {"ansible_facts": {"ansible_all_ipv4_addresses": ["192.168.232.101"], "ansible_all_ipv6_addresses": ["fe80::cc52:8279:7d75:72a2", "fe80::bfc3:2b7c:6878:575a", "fe80::75a4:11da:7c98:fc74"], 

下面省略,有好多;

顯示 ipv4的所有地址:

[root@server ansible]# vi facts.yml
[root@server ansible]# cat facts.yml 
---
- hosts: node1become: yestasks:- shell: echo {{ ansible_all_ipv4_addresses }}register: my_vars- debug:var: my_vars.stdout_lines
[root@server ansible]# ansible-playbook -i inventory.ini facts.yml 

在playbook中引用facts變量:

二、Playbook中的流程控制

Playbook條件

1.1 條件判斷

when的值是一個條件表達(dá)式,如果條件判斷成立,這個task就執(zhí)行,如果判斷不成立,則task不執(zhí)行,并且跳過此步驟。
例:host3主機(jī)系統(tǒng)必須為 Centos系統(tǒng)

[root@server ansible]# cat when.yml 
---
- hosts: node3tasks: - name: whenshell: echo "hello world"when:- ansible_facts.distribution == 'CentOS'register: hhh- debug:var: hhh.stdout_lines

執(zhí)行:

?ansible-playbook -i inventory.ini when.yml

執(zhí)行成功

如果被控主機(jī)不是CentOS系統(tǒng),條件不符,會出現(xiàn)什么狀況呢?
這里我拿Ubuntu來為大家舉例:

[root@server ansible]# cat when.yml 
---
- hosts: node3tasks: - name: whenshell: echo "hello world"when:- ansible_facts.distribution == 'Ubuntu'register: hhh- debug:var: hhh.stdout_lines

執(zhí)行:

ansible-playbook -i inventory.ini when.yml

這里可以看到,when條件不符,所以并沒有執(zhí)行,而是跳過了這步。

1.2 組合判斷

在Ansible中,when 語句可以用于組合多個條件判斷,以實現(xiàn)更復(fù)雜的邏輯控制。以下是幾種常用的 when 條件組合方式及其應(yīng)用場景:

1、使用 and 組合條件

當(dāng)所有條件都必須為真時才執(zhí)行任務(wù),可以使用 and 關(guān)鍵字。

cat lifeng1.yml
[root@server ansible]# cat lifeng1.yml
---- hosts: host1,host3become: yestasks:- name: Print message for CentOSdebug:msg: "恭喜你執(zhí)行成功"when: >ansible_facts.distribution == 'CentOS' and ansible_facts.distribution == 'CentOS'

執(zhí)行:

ansible-playbook -i inventory.ini lifeng1.yml

2、使用 or 組合條件

當(dāng)只要有一個條件為真時就執(zhí)行任務(wù),可以使用 or 關(guān)鍵字。
示例:檢查操作系統(tǒng)是否為Ubuntu或CentOS

[root@server ansible]# cat rzc.yml 
---
- hosts: node1become: yestasks:- name: Print message for Ubuntu or CentOSdebug:msg: "This is either Ubuntu or CentOS"when: >ansible_facts.distribution == 'Ubuntu' or ansible_facts.distribution == 'CentOS'

執(zhí)行:

ansible-playbook -i inventory.ini rzc.yml 

3、使用not進(jìn)行否定條件

not可以用來否定一個條件,當(dāng)條件不滿足時執(zhí)行任務(wù)。
舉例:我的系統(tǒng)是 CentOS
我的條件判斷是當(dāng)系統(tǒng)不是Ubuntu時,輸出“hello world”

[root@server ansible]# cat when.yml
[root@server ansible]# cat when.yml 
---
- hosts: node3tasks: - name: whenshell: echo "hello world"when:- not (ansible_facts.distribution == 'Ubuntu')register: hhh- debug:var: hhh.stdout_lines

去執(zhí)行:

ansible-playbook -i inventory.ini when.yml

4、混合使用and、or和not

你可以混合使用這些運算符來創(chuàng)建更復(fù)雜的條件表達(dá)式。

[root@server ansible]# cat when.yml
[root@server ansible]# cat when.yml 
---
- hosts: node3tasks: - name: whenshell: echo "hello world"when: >ansible_facts.distribution == 'CentOS' andansible_facts.distribution == 'CentOS' oransible_facts.distribution != 'Ubuntu'register: hhh- debug:var: hhh.stdout_lines

這實際上對于CentOS總是成立,所以這個例子有點多余,但為了演示目的):

and前后必須都要滿足條件才能執(zhí)行,and后面由于添加了or所以它前后其中一個成立即可

1.3 操作實例

我們給host1主機(jī)創(chuàng)建hhhhh1的用戶,host3主機(jī)不做任何動作。然后我們寫一個同時刪除這兩個主機(jī)中的hhhhh1用戶的腳本,執(zhí)行之后看一看是什么效果吧。

我們給host1主機(jī)創(chuàng)建hhhhh1用戶:

ansible node1 -i inventory.ini -m user -a "name=hhhhh1 state=present"

檢查:

ansible node1 -i inventory.ini -m command -a "tail -3 /etc/passwd"

接下來我們寫一個腳本

[root@server ansible]# cat hhhhh.yml
---
- hosts: node4become: yestasks:- name: delete user hhhhh1user: name: hhhhh1state: absentregister: abest_userignore_errors: yes # 執(zhí)行錯誤,play繼續(xù)。- debug:msg: "命令執(zhí)行成功"when:abest_user.changed == True- debug:msg: "命令執(zhí)行失敗"when:abest_user.changed != True

執(zhí)行:

ansible-playbook -i inventory.ini hhhhh.yml 

從這張圖片就可以看出,因為我們之前就只在host1主機(jī)下創(chuàng)建名為hhhhh1的用戶,而host3主機(jī)并沒有創(chuàng)建。所以執(zhí)行腳本后,由圖可知,host1主機(jī)執(zhí)行成功并且成功刪除了hhhhh1的用戶。但是host3主機(jī)我們之前并沒有創(chuàng)建用戶,所以并未做出刪除的步驟,就直接跳過

Playbook的循環(huán)

1.1 批量安裝軟件包

[root@server ansible]# cat with_item.yml 
[root@server ansible]# cat with_item.yml 
---
- hosts: node3become: yestasks:- name: Installed packagesyum: name: "{{ item }}"state: presentloop:- wget- tree- lrzsz

執(zhí)行:

ansible-playbook -i inventory.ini  with_item.yml

但是并不建議使用循環(huán)方式使用yum模塊來安裝軟件包,這里只是為了展示效果

1.2 批量創(chuàng)建用戶

標(biāo)準(zhǔn)循環(huán)使用場景——批量創(chuàng)建用戶

[root@server ansible]# cat user2.yml 
[root@server ansible]# cat user2.yml 
---
- hosts: node4become: yestasks: - name: 批量創(chuàng)建用戶user:name: "{{ item }}"state: presentloop:- lifeng1- lifeng2- lifeng3

執(zhí)行:

ansible-playbook -i inventory.ini user2.yml

1.3 批量創(chuàng)建組

[root@server ansible]# cat user3.yml
[root@server ansible]# cat user3.yml 
---
- hosts: node4 become: yestasks: - name: 批量創(chuàng)建組group:name: "{{ item }}"state: presentloop:- mygroup1- mygroup2- mygroup3

執(zhí)行:

ansible-playbook -i inventory.ini user3.yml

1.4 批量刪除用戶和組

刪除lifeng用戶和刪除mugroup組

[root@server ansible]# cat drop.yml 
[root@server ansible]# cat drop.yml 
---
- hosts: node4become: yestasks:- name: 刪除用戶user: name: "{{ item }}"state: absentloop:- lifeng1- lifeng2- lifeng3- name: 刪除組group:name: "{{ item }}"state: absent ? ? ? ? loop:- mygroup1- mygroup2- mygroup3

執(zhí)行:

ansible-playbook -i inventory.ini drop.yml drop.yml

1.5 批量復(fù)制文件

標(biāo)準(zhǔn)循環(huán)使用場景 - 批量拷貝多個文件

[root@server ansible]# cat copy.yml
[root@server ansible]# cat copy.yml 
---
- hosts: node1become: yestasks: - name: 復(fù)制文件copy:src: "{{ item.src }}" dest: "{{ item.dest }}"mode: "{{ item.mode }}"loop:- {src: "/opt/a.sh", dest: "/root/a.sh", mode: "0777"}- {src: "/opt/b.sh", dest: "/root/b.sh", mode: "0777"}

執(zhí)行:

ansible-playbook -i inventory.ini copy.yml 

異常處理:

默認(rèn)Playbook會檢查命令和模塊的返回狀態(tài),如遇到錯誤就中斷playbook的執(zhí)行
加入?yún)?shù): ignore_errors: yes # 忽略錯誤

[root@server ansible]# cat expect.yml
[root@server ansible]# cat expect.yml 
---
- hosts: node3become: yestasks:- name: 忽略錯誤,play繼續(xù)command: ps -aux | grep nginx#ignore_errors: yes- name: 開啟nginx服務(wù)service:name: nginxstate: started

正常command模塊是不可以使用管道命令的,
我們先把?ignore_errors: yes?注釋,來一起看一看執(zhí)行的效果:

大家可以看到,正常執(zhí)行之后,play遇到錯誤會立馬報錯,后面的tasks任務(wù)自然也不會繼續(xù)執(zhí)行。

[root@server ansible]# cat expect.yml
[root@server ansible]# cat expect.yml 
---
- hosts: node3become: yestasks:- name: 忽略錯誤,play繼續(xù)command: ps -aux | grep nginxignore_errors: yes- name: 開啟nginx服務(wù)service:name: nginxstate: started

將注釋符去掉后
執(zhí)行:

ansible-playbook -i inventory.ini expect.yml 

執(zhí)行后我們會發(fā)現(xiàn),即使報錯了,但是接下來的tasks任務(wù)也會繼續(xù)執(zhí)行
所以?ignore_errors: yes?這個命令意思就是:忽略/跳過play錯誤,繼續(xù)執(zhí)行下面的內(nèi)容

Tags標(biāo)簽

默認(rèn)情況下,Ansible在執(zhí)行一個playbook時,會執(zhí)行playbook中定義的所有任務(wù);Ansible playbook中的tag標(biāo)簽是一種用于選擇性運行特定任務(wù)或任務(wù)集的機(jī)制。通過為每個任務(wù)指定標(biāo)簽,您可以在運行playbook時選擇只運行帶有特定標(biāo)簽的任務(wù),而不運行其他任務(wù)。這對于控制和管理Ansible playbook的執(zhí)行非常有用,特別是當(dāng)您的playbook包含許多任務(wù)時。

1、打標(biāo)簽的用法

1.1 打標(biāo)簽的方式

a.對一個對象打一個標(biāo)簽
b.對一個對象打多個標(biāo)簽
c.對多個對象打一個標(biāo)簽

1.2 標(biāo)簽的使用,

通過tags和任務(wù)對象進(jìn)行捆綁,控制部分或者指定的task執(zhí)行

-t:執(zhí)行指定的tag標(biāo)簽任務(wù)
--list-tags:列出此yml文件中的所有tag標(biāo)簽
--skip-tags:執(zhí)行–skip-tags之外的標(biāo)簽任務(wù)

1.3 標(biāo)簽的作用

以下是tag標(biāo)簽的作用:

1、選擇性運行任務(wù):可以使用--tags參數(shù)在運行ansible-playbook命令時指定一個或多個標(biāo)簽,只有帶有指定標(biāo)簽的任務(wù)會運行。這對于在大型playbook中只運行特定任務(wù)非常有用,而不是運行整個playbook。
2、排除任務(wù):您可以使用--skip-tags參數(shù)來排除具有特定標(biāo)簽的任務(wù),從而運行除帶有指定標(biāo)簽的任務(wù)之外的所有其他任務(wù)。這對于在大型playbook中排除不需要運行的任務(wù)非常有用。
3、組織任務(wù):標(biāo)簽可以幫助您組織和分類任務(wù)。例如,您可以為配置任務(wù)添加一個config標(biāo)簽,為安裝任務(wù)添加一個install標(biāo)簽,以便更容易了解每個任務(wù)的用途。
4、文檔和注釋:標(biāo)簽還可以作為任務(wù)的文檔和注釋。您可以將標(biāo)簽用作描述任務(wù)的方式,以便其他人更容易理解每個任務(wù)的目的。

下面是一些示例,演示如何在運行ansible-playbook時使用標(biāo)簽:

僅運行帶有install標(biāo)簽的任務(wù):

ansible-playbook your_playbook.yml --tags install

排除帶有test標(biāo)簽的任務(wù):

ansible-playbook your_playbook.yml --skip-tags test

運行帶有多個標(biāo)簽的任務(wù):

ansible-playbook your_playbook.yml --tags "install,config"

列出yml文件中所有的標(biāo)簽:

ansible-playbook your_playbook.yml --list-tags

標(biāo)簽功能有助于增加Ansible playbook的可維護(hù)性,使您能夠更精細(xì)地控制任務(wù)的執(zhí)行。

這里舉一個非常簡單的例子

[root@server ansible]# cat anzhuang.yml
[root@server ansible]# cat anzhuang.yml 
---
- name: 安裝nginx、httpd,愿意安裝哪個就安哪個hosts: node3become: yestasks:- name: 安裝nginxyum:name: nginxstate: presenttags:- install_nginx- name: 安裝httpdyum:name: httpdstate: presenttags: - install_httpd

正常執(zhí)行:

ansible-playbook anzhuang.yml

只安裝nginx服務(wù):

ansible-playbook anzhuang.yml --tags="install_nginx"

這里再舉一個例子:

[root@server ansible]# cat tags.yml
[root@localhost yml]# cat tags.yml
---
- name: 部署apache服務(wù)hosts: webremote_user: rootvars:- http_port: 8080tasks:- name: Install Http Serveryum:name: httpdstate: presenttags: - install_httpd- httpd_server- name: configure httpd servercopy:src: ./httpd.confdest: /etc/httpd/conf/httpd.confmode: 0777notify: Restart Httpd Servertags: - config_httpd- httpd_server- name: start httpd serverservice:name: httpdstate: startedenabled: yestags: start_httpd- name: stop httpd serverservice:name: httpdstate: stoppedtags: stop_httpd- name: uninstall httpd serveryum:name: httpdstate: absenttags: uninstall_httpdhandlers:- name: Restart Httpd Serversystemd:name: httpdstate: restarted

執(zhí)行:

# 查看此yml文件中的所有tags標(biāo)簽
[root@localhost http]# ansible-playbook tags.yml --list-tagsplaybook: tags.ymlplay #1 (web): 部署apache服務(wù) TAGS: []TASK TAGS: [config_httpd, httpd_server, install_httpd, start_httpd, stop_httpd, uninstall_httpd]# 執(zhí)行 install_httpd,config_httpd(安裝、移動配置文件)標(biāo)簽;執(zhí)行移動配置文件會觸發(fā)處理程序,所以會自動啟動服務(wù);
[root@localhost http]# ansible-playbook tags.yml -t install_httpd,config_httpd# 執(zhí)行 uninstall_httpd(卸載httpd服務(wù)) 標(biāo)簽
[root@localhost http]# ansible-playbook tags.yml -t uninstall_httpd# 執(zhí)行 httpd_server 標(biāo)簽
[root@localhost http]# ansible-playbook tags.yml -t httpd_server
# httpd_server標(biāo)簽包含(Install Http Server、configure httpd server、Restart Httpd Server)
# 所以會直接執(zhí)行這三個任務(wù),也就是安裝、移動配置文件(因為使用移動文件觸發(fā)了處理程序notify,所以就會執(zhí)行Restart Httpd Server重啟服務(wù))
# 總結(jié)就是:執(zhí)行httpd_server標(biāo)簽,會安裝服務(wù)并啟動服務(wù)。
# 跳過 httpd_server,start_httpd(安裝加啟動,啟動)標(biāo)簽[root@localhost http]# ansible-playbook tags.yml --skip-tags httpd_server,start_httpd# 執(zhí)行結(jié)果為,關(guān)閉httpd服務(wù)并卸載httpd服務(wù);因為已經(jīng)跳過 httpd_server ,所以不會執(zhí)行安裝和啟動;

三、相關(guān)文章

相關(guān)文章標(biāo)題以及鏈接
Ansible自動化運維(一)介紹、無密鑰登錄、安裝部署_ansible自動化運維免費版本-CSDN博客
Ansible自動化運維(二) ad-hoc 模式 模塊詳解_ansible adhoc-CSDN博客
Ansible自動化運維(三)playbook劇本詳解-CSDN博客

http://m.aloenet.com.cn/news/42957.html

相關(guān)文章:

  • 泉州網(wǎng)站建設(shè)公司招聘銷售seo網(wǎng)站有優(yōu)化培訓(xùn)班嗎
  • 常見的網(wǎng)站類型濟(jì)南做seo的公司排名
  • 織夢網(wǎng)站程序模板百度網(wǎng)盤客服人工電話95188
  • 自己做的網(wǎng)站如何加視頻免費推廣平臺
  • 深圳便宜做網(wǎng)站朝陽seo推廣
  • 泗陽住房建設(shè)局網(wǎng)站關(guān)鍵詞查找的方法有以下幾種
  • 為什么大公司開發(fā)網(wǎng)站今日頭條seo
  • 外文網(wǎng)站制作百度快照推廣效果怎樣
  • 做框架圖的網(wǎng)站seo同行網(wǎng)站
  • 網(wǎng)頁模版圖片seo在線診斷工具
  • 合肥行業(yè)網(wǎng)站建設(shè)成都網(wǎng)絡(luò)營銷公司哪家好
  • 網(wǎng)站開發(fā)論壇樣式新品推廣活動方案
  • 網(wǎng)頁設(shè)計與網(wǎng)站開發(fā)第三版課后答案百度提問登錄入口
  • 政府網(wǎng)站集約化建設(shè)工作匯報西安百度推廣開戶多少錢
  • 網(wǎng)站怎么做自營銷專業(yè)seo培訓(xùn)學(xué)校
  • 童裝網(wǎng)站建設(shè)目標(biāo)優(yōu)化網(wǎng)站seo方案
  • 變白網(wǎng)站制作源碼網(wǎng)站數(shù)據(jù)查詢
  • wordpress 恢復(fù)備份西安seo關(guān)鍵字優(yōu)化
  • 阿里云建公司網(wǎng)站百度投票人氣排行榜入口
  • 溫州網(wǎng)站建設(shè)溫州網(wǎng)站制作抖音seo運營模式
  • 貴州省房屋和城市建設(shè)廳官方網(wǎng)站南京做網(wǎng)站的公司
  • 網(wǎng)站空間是虛擬主機(jī)嗎網(wǎng)站關(guān)鍵詞怎樣優(yōu)化
  • 酒吧營銷用什么軟件找客源西安關(guān)鍵詞優(yōu)化平臺
  • 網(wǎng)站開發(fā)終止協(xié)議書工具大全
  • 圖書館門戶網(wǎng)站建設(shè)的意義重慶森林講的什么內(nèi)容
  • 網(wǎng)站怎么做訪問日志搜索指數(shù)查詢平臺
  • 濟(jì)南網(wǎng)站外包友鏈查詢站長工具
  • 武漢大型網(wǎng)站建設(shè)哪里有學(xué)市場營銷培訓(xùn)班
  • 趙縣網(wǎng)站建設(shè)公司seo jsbapp9
  • 找個做網(wǎng)站的人培訓(xùn)機(jī)構(gòu)還能開嗎