Ansible中執行流控制

1.ansible中的迭代循環

創建目錄和文件

vim createfile.yaml?

????????- name: create file playbook
????????? hosts: all
????????? tasks:
????????? ? - name: create file
????????? ? ? file:?
????????? ? ? ? path: "/mnt/{{item['name']}}"
????????? ? ? ? state: "{{item['type']}}"

????????? ? ? loop:?
????????? ? ? ? - name: westosfile1
????????? ? ? ? ? type: touch
????????? ? ? ? - name: westosdir1
????????? ? ? ? ? type: directory
????????? ? ? ? - name: westosfile3
????????? ? ? ? ? type: touch
????????? ? ? ? - name: westosdir2
????????? ? ? ? ? type: directory
????????? ? ? ? - name: westosfile5
????????? ? ? ? ? type: touch

ansible-playbook createfile.yaml

2.迭代循環項目

安裝vsftpd、apache、dns并且開啟服務,關閉對應的火墻服務

vim setup.yaml

- name: setup vsftpd apache dns
? hosts: all
? vars:
? ? services:
? ? ? - name: vsftpd
? ? ? ? service: vsftpd
? ? ? ? firewall_name: ftp
? ? ? - name: httpd
? ? ? ? service: httpd
? ? ? ? firewall_name: http
? ? ? - name: bind
? ? ? ? service: named
? ? ? ? firewall_name: dns
? tasks:
? ? - name: install services
? ? ? dnf:?
? ? ? ? name: "{{item['name']}}"
? ? ? ? state: present
? ? ? loop:?
? ? ? ? "{{services}}"
? ? - name: start services
? ? ? service:
? ? ? ? name: "{{item['service']}}"
? ? ? ? enabled: yes
? ? ? ? state: started
? ? ? loop:
? ? ? ? "{{services}}"
? ? - name: setup firewalld
? ? ? firewalld:
? ? ? ? service: "{{item['firewall_name']}}"
? ? ? ? state: enabled
? ? ? ? permanent: yes
? ? ? ? immediate: yes
? ? ? loop:
? ? ? ? "{{services}}"

ansible-playbook setup.yaml?

3.ansible中的條件語句

when :
- 條件 1
- 條件 2
# 條件判斷 #
=
value == " 字符串 ",value == 數字
<
value < 數字
>
value > 數字
<=
value <= 數字
>=
value >= 數字
!=
value != 數字
is defined value
value is defined
變量存在
is not defined
value is not defined
變量不存在
in value is in value 變量為
not invalue is not in value 變量不為
bool變量 為true value? ? ? ? ? ? ? ? ? ? ? ? ? ? ?value的值為true
bool變量 falsenot value? ? ? ? ? ? ? ? ? ?value的值為false
value in value2value的值在value2列表中
# 多條條件組合 #
when
條件 1 and 條件 2
- 條件 1
- 條件 2
when :
條件 1 or 條件 2
when : >
條件 1
or
條件 2

檢測文件是否存在的練習

vim check_file.yaml

- name: check file playbook
? hosts: all
? tasks:
? ? - name: check file
? ? ? shell: test -e /mnt/westosfile
? ? ? ignore_errors: yes? ? ? ? ? ? ? ?-------------------》將會忽略任務失敗使得下面的任務繼續運行
? ? ? register: check_state

? ? - name: file is not exist
? ? ? debug:
? ? ? ? msg: file is not exist
? ? ? when: check_state.rc != "0"

? ? - name: file exist
? ? ? debug:
? ? ? ? msg: file exist
? ? ? when: check_state.rc == "0"

ansible-playbook check_file.yaml?

vim setup_firewalld.yaml

- name: setup vsftpd apache dns
? hosts: all
? vars:
? ? services:
? ? ? - name: vsftpd
? ? ? ? service: vsftpd
? ? ? ? firewall_name: ftp
? ? ? - name: httpd
? ? ? ? service: httpd? ? ? ? ? ? ? ? ? ? ?-----------------》此firewall_naem
? ? ? - name: bind
? ? ? ? service: named
? ? ? ? firewall_name: dns
? tasks:
? ? - name: install services
? ? ? dnf:?
? ? ? ? name: "{{item['name']}}"
? ? ? ? state: present
? ? ? loop:?
? ? ? ? "{{services}}"
? ? - name: start services
? ? ? service:
? ? ? ? name: "{{item['service']}}"
? ? ? ? enabled: yes
? ? ? ? state: started
? ? ? loop:
? ? ? ? "{{services}}"
? ? - name: setup firewalld
? ? ? firewalld:
? ? ? ? service: "{{item['firewall_name']}}"
? ? ? ? state: enabled
? ? ? ? permanent: yes
? ? ? ? immediate: yes
? ? ? loop:
? ? ? ? "{{services}}"
? ? ? when: item['firewall_name'] is defined? ? ? ? ---------》當firewall_name存在時才執行此任務

ansible-playbook setup_firewalld.yaml

? tasks:
? ? - name: install services
? ? ? dnf:?
? ? ? ? name: "{{item['name']}}"
? ? ? ? state: present
? ? ? loop:?
? ? ? ? "{{services}}"

? ? ? when:? ?inventory_hostname in groups['westos1']? ?-----------》只在westos1列表中的主機中執行此任務

? tasks:
? ? - name: install services
? ? ? dnf:?
? ? ? ? name: "{{item['name']}}"
? ? ? ? state: present
? ? ? loop:?
? ? ? ? "{{services}}"

? ? ? when:? ?

? ? ? ? - inventory_hostname in groups['westos1']? ?-----------》只在westos1列表中的主機中執行此任務

? ? ? ? - item['firewall_name'] is defined? ? ? ? ? ? ? ? ?-----------》多條件時的格式

4.ansible中的觸發器

notify :
觸發器當遇到更改是觸發 handlers
handlers
觸發器觸發后執行的動作

?[root@ansible ~]# chmod 755?/etc/vsftpd/vsftpd.conf?

?cp /etc/vsftpd/vsftpd.conf vsftpd.conf.j2

vim?vsftpd.conf.j2

????????anonymous_enable={{state}}

vim?vsftpd.yaml

- name: install ftp server
? hosts: all
? vars:
? ? state: YES
? tasks:
? ? - name: install vsftpd
? ? ? dnf:
? ? ? ? name: vsftpd
? ? ? ? state: present
? ? - name: start vsftpd
? ? ? service:
? ? ? ? name: vsftpd
? ? ? ? state: started
? ? ? ? enabled: yes
? ? - name: set vsftpd.conf
? ? ? template:
? ? ? ? src: ./vsftpd.conf.j2
? ? ? ? dest: /etc/vsftpd.conf
? ? ? notify: restart vsftpd? ? ? ? ? ? ? ? ? ? ? ? ---------》觸發器,當更改時才會觸發handlers的內容

? handlers:
? ? - name: restart vsftpd
? ? ? service:
? ? ? ? name: vsftpd
? ? ? ? state: restarted

ansible-playbook vsftpd.yaml

5.忽略錯誤play

play 遇到任務失敗是會終止
ignore_errors : yes
將會忽略任務失敗使下面的任務繼續運行

例如下載一個根本不存在的東西,但是后續的任務依舊可以繼續

vim ignore_errors.yaml?
?

- name: setup?
? hosts: all
? tasks:
? ? - name: vsftpd
? ? ? dnf:?
? ? ? ? name: aaaaaaa
? ? ? ? state: present
? ? ? ignore_errors: yes

? ? - name: show message
? ? ? debug:
? ? ? ? msg: hello

ansible-playbook ignore_errors.yaml

6.強制觸發器運行

force_handlers
# 作用
# 當任務失敗后 play 被終止也會調用觸發器進程
繼續使用之前的vsftpd.conf文件實驗

vim vsftpd.yaml?

- name: test
? hosts: all
? vars:
? ? state: NO
? force_handlers: yes? ? ? ? ? ? ? ? ? ? ? ------------》強制觸發觸發器
? tasks:
? ? - name: config ftp
? ? ? template:
? ? ? ? src: ./vsftpd.conf.j2
? ? ? ? dest: /etc/vsftpd.conf
? ? ? notify: restart vsftpd

? ? - name: install aaaaaa
? ? ? dnf:
? ? ? ? name: aaaaaa
? ? ? ? state: present

? handlers:
? ? - name: restart vsftpd
? ? ? service:
? ? ? ? name: vsftpd
? ? ? ? state: restarted

ansible-playbook vsftpd.yaml?

7.控制play運行狀態

changed_when
# 作用
# 控制任務在何時報告它已進行更改

強制視為執行成功狀態

vim vsftpd.yaml?

- name: test
? hosts: all
? vars:
? ? state: NO
? force_handlers: yes
? tasks:
? ? - name: config ftp
? ? ? template:
? ? ? ? src: ./vsftpd.conf.j2
? ? ? ? dest: /etc/vsftpd.conf
? ? ? changed_when: true? ? ? ? ? ? ? ? ----------》強制視為執行成功狀態
? ? ? notify: restart vsftpd

? ? - name: install httpd
? ? ? dnf:
? ? ? ? name: httpd
? ? ? ? state: present

? handlers:
? ? - name: restart vsftpd
? ? ? service:
? ? ? ? name: vsftpd
? ? ? ? state: restarted

ansible-playbook vsftpd.yaml?

failed_when
# 當符合條件時強制任務失敗
強制視為執行失敗狀態
failed_when: true? ? ? ? ? ? ? ? ----------》強制視為執行失敗狀態

8.根據play運行情況選擇運行動作

block: 定義要運行的任務
rescue:定義當block句子中出現失敗任務后運行的任務
always定義最終獨立運行的任務

vim test.yaml

- name: test
? hosts: all
? tasks:
? ? - name: test play
? ? ? block:
? ? ? ? - name: install software
? ? ? ? ? dnf:
? ? ? ? ? ? name: aaaaaa
? ? ? ? ? ? state: present
? ? ? rescue:
? ? ? ? - name: show message
? ? ? ? ? debug:
? ? ? ? ? ? msg: linux is not found
? ? ? always:
? ? ? ? - name: show always
? ? ? ? ? debug:
? ? ? ? ? ? msg: hello westos

ansible-playbook test.yaml

?當block中運行正常時,rescue中的內容就不會運行

- name: test
? hosts: all
? tasks:
? ? - name: test play
? ? ? block:
? ? ? ? - name: install software
? ? ? ? ? dnf:
? ? ? ? ? ? name: httpd
? ? ? ? ? ? state: present
? ? ? ? - name: show linux
? ? ? ? ? debug:
? ? ? ? ? ? msg: ansible linux
? ? ? rescue:
? ? ? ? - name: show message
? ? ? ? ? debug:
? ? ? ? ? ? msg: linux is not found
? ? ? always:
? ? ? ? - name: show always
? ? ? ? ? debug:
? ? ? ? ? ? msg: hello westos
?

9.運行情況判定示例

將/dev/cdrom掛載到/mnt/isodir中,如果目錄不存在就創建目錄。

vim mount.yaml

- name: mount /dev/cdrom play
? hosts: all
? tasks:
? ? - block:
? ? ? ? - name: check mount point
? ? ? ? ? shell: test -e /mnt/isodir
? ? ? rescue:
? ? ? ? - name: show message
? ? ? ? ? debug:
? ? ? ? ? ? msg: /mnt/iso is not exist
? ? ? ? - name: create mount point
? ? ? ? ? file:
? ? ? ? ? ? path: /mnt/isodir
? ? ? ? ? ? state: directory
? ? ? always:
? ? ? ? - name: mount cdrom
? ? ? ? ? mount:
? ? ? ? ? ? path: /dev/isodir
? ? ? ? ? ? src: /dev/cdrom
? ? ? ? ? ? fstype: iso9660
? ? ? ? ? ? state: mounted

ansible-playbook mount.yaml

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211027.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211027.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity 自定義窗口

放在Editor文件夾下&#xff1b; #if UNITY_EDITORusing System; using UnityEditor; using UnityEngine;namespace EditorCustumTool {/// <summary>/// 自定義窗口/// </summary>public class CustomWindow : EditorWindow{public enum FlagType{Flag1 101,Fl…

前端知識筆記(三十六)———HTTP 緩存機制

一、強制緩存 只要瀏覽器判斷緩存沒有過期&#xff0c;則直接使用瀏覽器的本地緩存而無需再請求服務器。 強制緩存是利用下面這兩個 HTTP 響應頭部&#xff08;Response Header&#xff09;字段實現的&#xff0c;它們都用來表示資源在客戶端緩存的有效期&#xff1a; Cache-…

java中對象和Map互相轉換的幾種方式

在Java中&#xff0c;將對象和Map相互轉換是常見的操作&#xff0c;可以通過不同的方式實現這種轉換。以下是幾種常見的方法以及示例說明&#xff1a; 1. 使用Hutool工具類 Hutool是一個優秀的Java工具包&#xff0c;提供了豐富的工具方法&#xff0c;其中就包括對象和Map之間…

【基于ESP32無線藍牙上傳電腦Excel透傳數據】

【基于ESP32無線藍牙上傳電腦透傳數據】 1. 引言2. 環境搭建2.1 硬件準備:2.2 軟件準備:2.3. 配置Excel端口接收功能3. 測試代碼4. 連接電腦和 ESP324.1 燒錄程序4.2 啟動藍牙服務4.3 測試數據透傳5. 總結1. 引言 隨著物聯網技術的發展,越來越多的設備開始支持無線通信,其…

fl studio2024官方體驗版如何破解?

fl studio2024全稱Fruity Loops Studio2024&#xff0c;這款軟件也被人們親切的稱之為水果&#xff0c;它是一款功能強大的音樂創作編輯軟件&#xff0c;擁有全功能的錄音室&#xff0c;大混音盤以及先進的音樂制作工具&#xff0c;用戶通過使用該軟件&#xff0c;就可以輕松制…

輕量封裝WebGPU渲染系統示例<43>- 材質組裝流水線(MaterialPipeline)之燈光和陰影(源碼)

目標: 數據化&#xff0c;模塊化&#xff0c;自動化 備注: 從這個節點開始整體設計往系統規范的方向靠攏。之前的都算作是若干準備。所以會和之前的版本實現有些差異。 當前示例源碼github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sa…

redis過期提醒

redis過期提醒 有一次看redis的配置文件發現一個notify-keyspace-events配置&#xff0c;注釋里邊長篇大論的&#xff0c;那我得看看這是干啥的&#xff0c;看完注釋內容&#xff0c;發現不得了了&#xff0c;redis竟然還有過期提醒的功能 接下來得大家解釋一下&#xff1a; 首…

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks(2020)

文章目錄 -Abstract1. Introductiondiss former methodour method 2. Related Work3. Compound Model Scaling3.1. 問題公式化3.2. Scaling Dimensions3.3. Compound Scaling 4. EfficientNet Architecture5. Experiments6. Discussion7. Conclusion 原文鏈接 源代碼 - 本文中…

LeNet

概念 代碼 model import torch.nn as nn import torch.nn.functional as Fclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__() # super()繼承父類的構造函數self.conv1 nn.Conv2d(3, 16, 5)self.pool1 nn.MaxPool2d(2, 2)self.conv2 nn.Conv2d(16…

Bash腳本處理ogg、flac格式到mp3格式的批量轉換

現在下載的許多音樂文件是flac和ogg格式的&#xff0c;QQ音樂上下載的就是這樣的&#xff0c;這些文件尺寸比較大&#xff0c;在某些場合使用不便&#xff0c;比如在車機上播放還是mp3格式合適&#xff0c;音質這些在車機上播放足夠了&#xff0c;要求不高。比如本人就喜歡下載…

軟件接口安全設計規范

《軟件項目接口安全設計規范》 1.token授權機制 2.https傳輸加密 3.接口調用防濫用 4.日志審計里監控 5.開發測試環境隔離&#xff0c;脫敏處理 6.數據庫運維監控審計

卷王開啟驗證碼后無法登陸問題解決

問題描述 使用 docker 部署&#xff0c;后臺設置開啟驗證&#xff0c;重啟服務器之后&#xff0c;docker重啟&#xff0c;再次訪問系統&#xff0c;驗證碼獲取失敗&#xff0c;導致無法進行驗證&#xff0c;也就無法登陸系統。 如果不了解卷王的&#xff0c;可以去官網看下。…

飛天使-linux操作的一些技巧與知識點3

http工作原理 http1.0 協議 使用的是短連接&#xff0c;建立一次tcp連接&#xff0c;發起一次http的請求&#xff0c;結束&#xff0c;tcp斷開 http1.1 協議使用的是長連接&#xff0c;建立一次tcp的連接&#xff0c;發起多次http的請求&#xff0c;結束&#xff0c;tcp斷開ngi…

ky10 server x86 設置網卡開機自啟

輸入命令查看網卡名稱 ip a 輸入命令編輯網卡信息 vi /etc/sysconfig/network-scripts/*33改成yes 按ESC鍵&#xff0c;輸入:wq&#xff0c;保存

Aloha 機械臂的學習記錄2——AWE:AWE + ACT

繼續下一個階段&#xff1a; Train policy python act/imitate_episodes.py \ --task_name [TASK] \ --ckpt_dir data/outputs/act_ckpt/[TASK]_waypoint \ --policy_class ACT --kl_weight 10 --chunk_size 50 --hidden_dim 512 --batch_size 8 --dim_feedforward 3200 \ --n…

F : A DS二分查找_尋找比目標字母大的最小字母

Description 給你一個字符串str&#xff0c;字符串中的字母都已按照升序排序&#xff0c;且只包含小寫字母。另外給出一個目標字母target&#xff0c;請你尋找在這一有序字符串里比目標字母大的最小字母。 在比較時&#xff0c;字母是依序循環出現的。例如&#xff0c;str“ab…

Python中鎖的常見用法

在 Python 中&#xff0c;可以使用線程鎖來控制多個線程對共享資源的訪問。以下是一些常見的 Python 中鎖的用法&#xff1a; 創建線程鎖 在 Python 中&#xff0c;可以使用 threading 模塊中的 Lock 類來創建線程鎖。例如&#xff1a; import threading# 創建線程鎖 lock …

Python網絡爬蟲環境的安裝指南

網絡爬蟲是一種自動化的網頁數據抓取技術&#xff0c;廣泛用于數據挖掘、信息搜集和互聯網研究等領域。Python作為一種強大的編程語言&#xff0c;擁有豐富的庫支持網絡爬蟲的開發。本文將為你詳細介紹如何在你的計算機上安裝Python網絡爬蟲環境。 一、安裝python開發環境 進…

什么是電壓紋波,造成不良,如何測量、如何抑制設計

1 引言 電源給電子產品提供能量同時也附帶了一些不好的影響成分,如紋波、噪聲等,這些對本振、、濾波、放大器、混頻器、檢波、A/D 轉換等電路都會產生影響,會直接影響電子產品正常工作,所以項目設計要合理、要有實測數據、要盡量減小系統電壓的紋波。 1.1 電壓紋波(volta…

bc-linux-歐拉重制root密碼

最近需要重新安裝虛擬機的系統 安裝之后發現對方提供的root密碼不對&#xff0c;無法進入系統。 上網搜了下發現可以進入單用戶模式進行密碼修改從而重置root用戶密碼。 在這個界面下按e鍵 找到圖中部分&#xff0c;把標紅的部分刪除掉&#xff0c;然后寫上rw init/bin/…