中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

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

濰坊地區(qū)網(wǎng)站制作免費(fèi)輿情監(jiān)測(cè)平臺(tái)

濰坊地區(qū)網(wǎng)站制作,免費(fèi)輿情監(jiān)測(cè)平臺(tái),關(guān)鍵詞優(yōu)化的五個(gè)步驟,三網(wǎng)合一網(wǎng)站建設(shè)公司playbooks概述 Ansible劇本(playbook)是用于配置、部署和管理被控節(jié)點(diǎn)的一種描述文件。通過(guò)編寫(xiě)詳細(xì)的劇本描述和執(zhí)行其中的任務(wù)(tasks),可以使遠(yuǎn)程主機(jī)達(dá)到預(yù)期的狀態(tài)。劇本由一個(gè)或多個(gè)"play"組成的列表構(gòu)…

playbooks概述

Ansible劇本(playbook)是用于配置、部署和管理被控節(jié)點(diǎn)的一種描述文件。通過(guò)編寫(xiě)詳細(xì)的劇本描述和執(zhí)行其中的任務(wù)(tasks),可以使遠(yuǎn)程主機(jī)達(dá)到預(yù)期的狀態(tài)。劇本由一個(gè)或多個(gè)"play"組成的列表構(gòu)成。當(dāng)需要在一臺(tái)機(jī)器上進(jìn)行多個(gè)操作時(shí),使用劇本會(huì)更加方便。使用Ansible劇本可以實(shí)現(xiàn)自動(dòng)化運(yùn)維。

playbooks組成

  • Tasks(任務(wù)):任務(wù)是劇本中最基本的組成部分,用于定義要在被控節(jié)點(diǎn)上執(zhí)行的操作。每個(gè)任務(wù)通常會(huì)調(diào)用一個(gè)或多個(gè)模塊來(lái)完成特定的功能。任務(wù)可以包括文件操作、軟件包安裝、服務(wù)管理等各種操作。即通過(guò) task 調(diào)用 ansible 的模板將多個(gè)操作組織在一個(gè) playbook 中運(yùn)行

  • Variables(變量):變量用于存儲(chǔ)和傳遞數(shù)據(jù),在劇本中可以定義各種類型的變量,包括全局變量、主機(jī)變量和組變量。變量可以在劇本的不同部分進(jìn)行引用和修改,使得劇本更加靈活和可配置。

  • Templates(模板):模板是一種用于生成配置文件或其他文本文件的機(jī)制。在劇本中可以使用Jinja2模板語(yǔ)言來(lái)定義模板,并通過(guò)填充變量的方式生成最終的文件。模板可以根據(jù)不同的主機(jī)或變量生成不同的配置文件。

  • Handlers(處理器):處理器是一種特殊的任務(wù),它會(huì)在特定的事件觸發(fā)時(shí)執(zhí)行。處理器通常用于在配置文件修改后重啟服務(wù)或執(zhí)行其他操作。當(dāng)某個(gè)任務(wù)的狀態(tài)(changed)滿足條件時(shí),可以通過(guò)(notify)關(guān)鍵字觸發(fā)執(zhí)行相應(yīng)的處理器。

  • Roles(角色):角色是一種組織和復(fù)用劇本的機(jī)制。通過(guò)定義角色,可以將相關(guān)的任務(wù)、變量和模板組織在一起,以便在多個(gè)劇本中進(jìn)行復(fù)用。角色可以使劇本更加模塊化和可維護(hù),提高代碼的復(fù)用性和可讀性。

playbooks原理

Ansible劇本(playbook)的原理是基于聲明式編程的自動(dòng)化工具。它使用YAML格式的文件來(lái)描述所需的配置和操作,然后通過(guò)Ansible引擎解析和執(zhí)行這些劇本。

下面是Ansible劇本的工作原理:

  • 解析:Ansible引擎首先會(huì)解析劇本文件,將其轉(zhuǎn)換為內(nèi)部數(shù)據(jù)結(jié)構(gòu)。這個(gè)過(guò)程包括讀取和解析YAML文件,識(shí)別劇本中的任務(wù)、變量、模板等部分。

  • 連接:Ansible會(huì)與被控節(jié)點(diǎn)建立SSH連接或使用其他連接插件進(jìn)行通信。這樣可以確保Ansible能夠遠(yuǎn)程執(zhí)行命令和操作被控節(jié)點(diǎn)。

  • 主機(jī)選擇:根據(jù)劇本中定義的清單(Inventory),Ansible會(huì)確定要操作的目標(biāo)主機(jī)或主機(jī)組。這個(gè)過(guò)程可以根據(jù)主機(jī)的IP地址、主機(jī)名、標(biāo)簽等進(jìn)行選擇。

  • 變量解析:Ansible會(huì)解析劇本中定義的變量,并根據(jù)清單中的主機(jī)和組信息進(jìn)行變量的匹配和替換。這樣可以根據(jù)不同的主機(jī)或組設(shè)置不同的變量值。

  • 任務(wù)執(zhí)行:Ansible按照劇本中定義的順序執(zhí)行任務(wù)。每個(gè)任務(wù)通常會(huì)調(diào)用一個(gè)或多個(gè)模塊來(lái)完成特定的操作。模塊會(huì)在被控節(jié)點(diǎn)上執(zhí)行相應(yīng)的命令或操作,并返回執(zhí)行結(jié)果。

  • 狀態(tài)管理:Ansible會(huì)跟蹤每個(gè)任務(wù)的執(zhí)行狀態(tài),包括任務(wù)是否成功、是否有變化等。這些狀態(tài)信息可以用于后續(xù)的條件判斷和處理。

  • 處理器觸發(fā):當(dāng)某個(gè)任務(wù)的狀態(tài)滿足條件時(shí)(例如任務(wù)執(zhí)行成功或有變化),可以觸發(fā)相應(yīng)的處理器(Handlers)。處理器通常用于執(zhí)行一些特定的操作,如重啟服務(wù)或發(fā)送通知。

  • 結(jié)果報(bào)告:在執(zhí)行完所有任務(wù)后,Ansible會(huì)生成執(zhí)行結(jié)果的報(bào)告。報(bào)告中包括每個(gè)任務(wù)的執(zhí)行狀態(tài)、變量的值等信息,以便用戶進(jìn)行查看和分析。

通過(guò)這樣的工作流程,Ansible劇本可以實(shí)現(xiàn)自動(dòng)化地配置、部署和管理被控節(jié)點(diǎn),提高運(yùn)維效率和一致性。同時(shí),Ansible的模塊化設(shè)計(jì)和豐富的模塊庫(kù),使得劇本可以適應(yīng)各種不同的場(chǎng)景和需求。

playbooks示例

vim test1.yaml---     
- name: first play     gather_facts: false    hosts: webservers    remote_user: root    tasks:    - name: test connection    ping:     - name: disable selinuxcommand: '/sbin/setenforce 0'    ignore_errors: True     - name: disable firewalldservice: name=firewalld state=stopped    - name: install httpdyum: name=httpd state=latest- name: install configuration file for httpdcopy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf    notify: "restart httpd"    - name: start httpd serviceservice: enabled=true name=httpd state=startedhandlers:    - name: restart httpd    service: name=httpd state=restarted
##Ansible在執(zhí)行完某個(gè)任務(wù)之后并不會(huì)立即去執(zhí)行對(duì)應(yīng)的handler,而是在當(dāng)前play中所有普通任務(wù)都執(zhí)行完后再去執(zhí)行handler,這樣的好處是可以多次觸發(fā)notify,但最后只執(zhí)行一次對(duì)應(yīng)的handler,從而避免多次重啟。

這是一個(gè)使用Ansible編寫(xiě)的YAML文件,用于配置和管理Web服務(wù)器。下面是對(duì)每個(gè)部分的詳細(xì)解析:

  • ---: 這是YAML文件的分隔符,表示一個(gè)新的YAML文檔開(kāi)始,可省略

  • - name: first play: 定義了一個(gè)名為"first play"的Play(任務(wù)集合),用于描述一組相關(guān)的任務(wù),可省略

  • gather_facts: false: 禁用了Ansible的事實(shí)(facts)收集功能,即不收集關(guān)于目標(biāo)主機(jī)的信息,可省略

  • hosts: webservers: 指定了這個(gè)Play要在名為"webservers"的主機(jī)組上執(zhí)行,如多個(gè)主機(jī)組用冒號(hào)分隔

  • remote_user: root: 指定了遠(yuǎn)程執(zhí)行任務(wù)時(shí)使用的用戶名,這里是"root"。

  • tasks:: 定義了一個(gè)任務(wù)列表,包含了一系列要執(zhí)行的任務(wù)。任務(wù)列表中的各任務(wù)按次序逐個(gè)在hosts中指定的主機(jī)上執(zhí)行

  • - name: test connection: 自定義任務(wù)名稱,定義了一個(gè)名為"test connection"的任務(wù),用于測(cè)試與目標(biāo)主機(jī)的連接。

  • ping:: 使用Ansible的ping模塊,向目標(biāo)主機(jī)發(fā)送一個(gè)ping請(qǐng)求,以測(cè)試連接。

  • - name: disable selinux: 定義了一個(gè)名為"disable selinux"的任務(wù),用于禁用SELinux。

  • command: '/sbin/setenforce 0': 使用command模塊執(zhí)行命令/sbin/setenforce 0,將SELinux設(shè)置為"0"(禁用)。

  • ignore_errors: True: 如執(zhí)行命令的返回值不為0,就會(huì)報(bào)錯(cuò),tasks停止,可以忽略執(zhí)行該任務(wù)時(shí)的錯(cuò)誤,即使命令執(zhí)行失敗也不會(huì)導(dǎo)致任務(wù)失敗。

  • - name: disable firewalld: 定義了一個(gè)名為"disable firewalld"的任務(wù),用于停止firewalld服務(wù)。

  • service: name=firewalld state=stopped: 使用service模塊停止名為"firewalld"的服務(wù)。

  • - name: install httpd: 定義了一個(gè)名為"install httpd"的任務(wù),用于安裝httpd軟件包。

  • yum: name=httpd state=latest: 使用yum模塊安裝最新版本的名為"httpd"的軟件包。

  • - name: install configuration file for httpd: 定義了一個(gè)名為"install configuration file for httpd"的任務(wù),用于安裝httpd的配置文件。

  • copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf: 使用copy模塊將源文件"/opt/httpd.conf"復(fù)制到目標(biāo)位置"/etc/httpd/conf/httpd.conf"。

  • notify: "restart httpd": 當(dāng)任務(wù)執(zhí)行成功后,發(fā)送一個(gè)通知給名為"restart httpd"的處理程序。

  • - name: start httpd service: 定義了一個(gè)名為"start httpd service"的任務(wù),用于啟動(dòng)httpd服務(wù)。

  • service: enabled=true name=httpd state=started: 使用service模塊啟用并啟動(dòng)名為"httpd"的服務(wù)。

  • handlers:: 定義了一個(gè)處理程序列表,包含了一系列處理程序。

  • - name: restart httpd: 定義了一個(gè)名為"restart httpd"的處理程序,用于重新啟動(dòng)httpd服務(wù)。

  • service: name=httpd state=restarted: 使用service模塊重新啟動(dòng)名為"httpd"的服務(wù)。

這個(gè)YAML文件的目標(biāo)是在"webservers"主機(jī)組上執(zhí)行一系列任務(wù),包括測(cè)試連接、禁用SELinux、停止firewalld服務(wù)、安裝httpd軟件包、安裝httpd的配置文件,并最后啟動(dòng)httpd服務(wù)。在任務(wù)執(zhí)行成功后,會(huì)觸發(fā)一個(gè)處理程序來(lái)重新啟動(dòng)httpd服務(wù)。

運(yùn)行playbooks

ansible-playbook test1.yaml

執(zhí)行該命令時(shí),Ansible將連接到目標(biāo)主機(jī)并按照playbook中定義的順序執(zhí)行任務(wù)。

運(yùn)行playbook時(shí),可以使用ansible-playbook命令加上相應(yīng)的參數(shù)來(lái)執(zhí)行。

  • -k--ask-pass): 該參數(shù)用于交互式地輸入SSH密碼。當(dāng)遠(yuǎn)程主機(jī)需要密碼進(jìn)行身份驗(yàn)證時(shí),會(huì)提示你輸入密碼。

  • -K--ask-become-pass): 該參數(shù)用于交互式地輸入sudo密碼。當(dāng)需要提升權(quán)限執(zhí)行任務(wù)時(shí),會(huì)提示你輸入sudo密碼。

  • -u <username>: 該參數(shù)用于指定執(zhí)行任務(wù)時(shí)使用的用戶名??梢酝ㄟ^(guò)-u參數(shù)后跟用戶名來(lái)指定執(zhí)行任務(wù)的用戶。

ansible-playbook test1.yaml --syntax-check    #檢查yaml文件的語(yǔ)法是否正確
ansible-playbook test1.yaml --list-task       #檢查tasks任務(wù)
ansible-playbook test1.yaml --list-hosts      #檢查生效的主機(jī)
ansible-playbook test1.yaml --start-at-task='install httpd'     #指定從某個(gè)task開(kāi)始運(yùn)行
  • --syntax-check: 使用該參數(shù)可以檢查YAML文件的語(yǔ)法是否正確,而不執(zhí)行任務(wù)。這對(duì)于在運(yùn)行playbook之前驗(yàn)證文件的正確性非常有用。

  • --list-task: 使用該參數(shù)可以列出playbook中的所有任務(wù)(tasks)。這對(duì)于查看playbook中定義的任務(wù)非常有用。

  • --list-hosts: 使用該參數(shù)可以列出playbook中生效的主機(jī)。這對(duì)于查看playbook將在哪些主機(jī)上執(zhí)行任務(wù)非常有用。

  • --start-at-task='<task_name>': 使用該參數(shù)可以指定從某個(gè)任務(wù)開(kāi)始運(yùn)行??梢酝ㄟ^(guò)--start-at-task參數(shù)后跟任務(wù)名稱來(lái)指定從特定任務(wù)開(kāi)始執(zhí)行。

通過(guò)在ansible-playbook命令后添加這些參數(shù),可以根據(jù)需要執(zhí)行playbook,并進(jìn)行各種檢查和配置。

定義、引用變量

使用Ansible編寫(xiě)的YAML文件,用于定義和引用變量,并在任務(wù)中使用這些變量。

- name: second playhosts: dbserversremote_user: rootvars:                 #定義變量- groupname: mysql   #格式為 key: value- username: nginxtasks:- name: create groupgroup: name={{groupname}} system=yes gid=306    #使用 {{key}} 引用變量的值- name: create useruser: name={{username}} uid=306 group={{groupname}}    #在setup模塊中可以獲取factsup={{groupname}}- name: copy file變量信息copy: content="{{ansible_default_ipv4}}" dest=/opt/vars.txt     ansible-playbook test1.yaml -e "username=nginx"     #在命令行里定義變量
  • - name: second play: 定義了一個(gè)名為"second play"的Play,用于描述一組相關(guān)的任務(wù)。

  • hosts: dbservers: 指定了這個(gè)Play要在名為"dbservers"的主機(jī)組上執(zhí)行。

  • remote_user: root: 指定了遠(yuǎn)程執(zhí)行任務(wù)時(shí)使用的用戶名,這里是"root"。

  • vars:: 定義了一個(gè)變量列表,用于存儲(chǔ)變量的鍵值對(duì)。

  • - groupname: mysql: 定義了一個(gè)名為"groupname"的變量,并將其值設(shè)置為"mysql"。

  • - username: nginx: 定義了一個(gè)名為"username"的變量,并將其值設(shè)置為"nginx"。

  • tasks:: 定義了一個(gè)任務(wù)列表,包含了一系列要執(zhí)行的任務(wù)。

  • - name: create group: 定義了一個(gè)名為"create group"的任務(wù),用于創(chuàng)建一個(gè)組。

  • group: name={{groupname}} system=yes gid=306: 使用group模塊創(chuàng)建一個(gè)名為{{groupname}}(引用變量值)的組,設(shè)置system屬性為"yes",并指定gid為306。

  • - name: create user: 定義了一個(gè)名為"create user"的任務(wù),用于創(chuàng)建一個(gè)用戶。

  • user: name={{username}} uid=306 group={{groupname}}: 使用user模塊創(chuàng)建一個(gè)名為{{username}}(引用變量值)的用戶,設(shè)置uid為306,并將其添加到{{groupname}}組中。

  • - name: copy file變量信息: 定義了一個(gè)名為"copy file變量信息"的任務(wù),用于將變量信息寫(xiě)入文件。

  • copy: content="{{ansible_default_ipv4}}" dest=/opt/vars.txt: 使用copy模塊將變量ansible_default_ipv4的值作為文件內(nèi)容,復(fù)制到目標(biāo)文件"/opt/vars.txt"中。

在命令行中,可以使用-e參數(shù)來(lái)定義變量。例如,ansible-playbook test1.yaml -e "username=nginx"將在執(zhí)行playbook時(shí)將變量"username"設(shè)置為"nginx"。

通過(guò)定義和引用變量,可以在Ansible playbook中實(shí)現(xiàn)更靈活和可配置的任務(wù)執(zhí)行。變量可以在不同的任務(wù)中共享和重用,并且可以在命令行中動(dòng)態(tài)定義,以適應(yīng)不同的執(zhí)行需求。

指定遠(yuǎn)程主機(jī)sudo切換用戶

---
- hosts: dbserversremote_user: zhangsan            become: yes                     #2.6版本以后的參數(shù),之前是sudo,意思為切換用戶運(yùn)行become_user: root              #指定sudo用戶為root
執(zhí)行playbook時(shí):ansible-playbook test1.yml -K <密碼>

這是一個(gè)使用Ansible編寫(xiě)的YAML文件,用于在遠(yuǎn)程主機(jī)上切換用戶并執(zhí)行任務(wù)。

  • - hosts: dbservers: 指定了這個(gè)Play要在名為"dbservers"的主機(jī)組上執(zhí)行。

  • remote_user: zhangsan: 指定了遠(yuǎn)程執(zhí)行任務(wù)時(shí)使用的用戶名,這里是"zhangsan"。

  • become: yes: 這是Ansible 2.6版本以后的參數(shù),用于指定切換用戶運(yùn)行任務(wù)。之前的版本使用"sudo"參數(shù)來(lái)實(shí)現(xiàn)相同的功能。

  • become_user: root: 指定了切換用戶后要使用的sudo用戶為"root"。也就是說(shuō),在執(zhí)行任務(wù)時(shí),將使用"root"用戶的權(quán)限來(lái)運(yùn)行任務(wù)。

在執(zhí)行playbook時(shí),可以使用-K參數(shù)來(lái)提示輸入sudo密碼。例如,ansible-playbook test1.yml -K將要求你輸入sudo密碼以切換到指定的sudo用戶(在這個(gè)例子中是"root")并執(zhí)行任務(wù)。

通過(guò)指定遠(yuǎn)程主機(jī)的sudo切換用戶,可以在Ansible中以不同的權(quán)限執(zhí)行任務(wù),以滿足不同的需求和安全要求。

when條件判斷

  • 在執(zhí)行playbook時(shí),Ansible會(huì)根據(jù)條件判斷來(lái)決定是否執(zhí)行任務(wù)。如果條件為真,則任務(wù)將被執(zhí)行;如果條件為假,則任務(wù)將被跳過(guò)。

  • 通過(guò)使用when條件判斷,可以根據(jù)不同的條件來(lái)靈活控制任務(wù)的執(zhí)行,實(shí)現(xiàn)根據(jù)需求選擇性地執(zhí)行任務(wù)。

vim test2.yaml
---
- hosts: allremote_user: roottasks:- name: shutdown host command: /sbin/shutdown -r now   when: ansible_default_ipv4.address == "192.168.41.31"      #when指令中的變量名不需要手動(dòng)加上 {{}}
或 when: inventory_hostname == "<主機(jī)名>"ansible-playbook test2.yaml

這是一個(gè)使用Ansible編寫(xiě)的YAML文件,用于根據(jù)條件判斷是否執(zhí)行任務(wù)。

  • - hosts: all: 指定了這個(gè)Play要在所有主機(jī)上執(zhí)行。

  • remote_user: root: 指定了遠(yuǎn)程執(zhí)行任務(wù)時(shí)使用的用戶名,這里是"root"。

  • tasks:: 定義了一個(gè)任務(wù)列表,包含了一系列要執(zhí)行的任務(wù)。

  • - name: shutdown host: 定義了一個(gè)名為"shutdown host"的任務(wù),用于關(guān)機(jī)主機(jī)。

  • command: /sbin/shutdown -r now: 使用command模塊執(zhí)行命令/sbin/shutdown -r now,即立即重啟主機(jī)。

  • when: ansible_default_ipv4.address == "192.168.41.31": 使用when指令來(lái)判斷是否執(zhí)行該任務(wù)。當(dāng)ansible_default_ipv4.address的值等于"192.168.41.31"時(shí),任務(wù)將被執(zhí)行。這里的ansible_default_ipv4.address是一個(gè)Ansible提供的變量,表示主機(jī)的IPv4地址。

  • 或者可以使用when: inventory_hostname == "<主機(jī)名>"來(lái)根據(jù)主機(jī)名進(jìn)行條件判斷。當(dāng)inventory_hostname的值等于指定的主機(jī)名時(shí),任務(wù)將被執(zhí)行。

迭代

vim test3.yaml
---
- name: play1hosts: dbserversgather_facts: falsetasks: - name: create directoriesfile:path: "{{item}}"state: directorywith_items:          #等同于 loop:- /tmp/test1- /tmp/test2- name: add usersuser: name={{item.name}} state=present groups={{item.groups}}with_items:- name: test1groups: wheel- name: test2groups: root
或with_items:- {name:'test1', groups:'wheel'}- {name:'test2', groups:'root'}ansible-playbook test3.yaml

這是一個(gè)使用Ansible編寫(xiě)的YAML文件,用于在遠(yuǎn)程主機(jī)上執(zhí)行循環(huán)操作。

  • - name: play1: 定義了一個(gè)名為"play1"的Play,用于描述一組相關(guān)的任務(wù)。

  • hosts: dbservers: 指定了這個(gè)Play要在名為"dbservers"的主機(jī)組上執(zhí)行。

  • gather_facts: false: 禁用了Ansible的事實(shí)(facts)收集功能,即不收集關(guān)于目標(biāo)主機(jī)的信息。

  • tasks:: 定義了一個(gè)任務(wù)列表,包含了一系列要執(zhí)行的任務(wù)。

  • - name: create directories: 定義了一個(gè)名為"create directories"的任務(wù),用于創(chuàng)建目錄。

  • file: path: "{{item}}" state: directory: 使用file模塊創(chuàng)建目錄,路徑為{{item}}(迭代的值),狀態(tài)為"directory"。

  • with_items:: 使用with_items指令來(lái)進(jìn)行循環(huán)迭代。它用于迭代一個(gè)列表或字典。

  • - /tmp/test1 - /tmp/test2: 定義了一個(gè)包含兩個(gè)路徑的列表,用于迭代創(chuàng)建目錄。

  • - name: add users: 定義了一個(gè)名為"add users"的任務(wù),用于添加用戶。

  • user: name={{item.name}} state=present groups={{item.groups}}: 使用user模塊添加用戶,用戶名為{{item.name}}(迭代的值),狀態(tài)為"present",所屬組為{{item.groups}}(迭代的值)。

  • with_items:: 使用with_items指令進(jìn)行循環(huán)迭代。

  • - name: test1 groups: wheel - name: test2 groups: root: 定義了一個(gè)包含兩個(gè)字典的列表,每個(gè)字典包含用戶名和所屬組的鍵值對(duì),用于迭代添加用戶。

  • 或者可以使用with_items:指令后跟包含鍵值對(duì)的字典列表,例如- {name:'test1', groups:'wheel'} - {name:'test2', groups:'root'}。

在執(zhí)行playbook時(shí),Ansible會(huì)根據(jù)循環(huán)迭代的方式,依次執(zhí)行任務(wù),并使用{{item}}來(lái)獲取每次迭代的值。

通過(guò)使用循環(huán)結(jié)構(gòu),可以在Ansible中實(shí)現(xiàn)對(duì)列表或字典的迭代操作,從而批量執(zhí)行任務(wù)或根據(jù)不同的值執(zhí)行不同的操作。

Templates 模塊

  • Jinja是一個(gè)基于Python的模板引擎,用于生成動(dòng)態(tài)內(nèi)容。它提供了一種將變量和邏輯表達(dá)式嵌入到模板中的方式,以生成最終的文本輸出。

  • 在Jinja中,模板文件被編譯為Template對(duì)象,然后可以通過(guò)傳遞變量給模板來(lái)替換模板中的標(biāo)記。這些標(biāo)記通常使用雙花括號(hào){{}}表示,用于表示變量的值。Jinja還提供了條件語(yǔ)句、循環(huán)語(yǔ)句等控制結(jié)構(gòu),使得模板可以根據(jù)不同的條件生成不同的輸出。

  • Jinja模板引擎的優(yōu)勢(shì)在于它的靈活性和可擴(kuò)展性。它可以與各種類型的應(yīng)用程序集成,并支持自定義過(guò)濾器、宏等功能,以滿足不同的需求。

使用Ansible進(jìn)行配置管理的示例。

  • 首先,準(zhǔn)備一個(gè)以.j2為后綴的模板文件httpd.conf.j2,并設(shè)置引用的變量。使用以下命令將/etc/httpd/conf/httpd.conf復(fù)制到/opt/httpd.conf.j2
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

然后,使用vim編輯器打開(kāi)/opt/httpd.conf.j2文件,并修改以下行:

vim /opt/httpd.conf.j2Listen {{http_port}}                # 修改第42行
ServerName {{server_name}}            # 修改第95行
DocumentRoot "{{root_dir}}"          # 修改第119行
  • 修改主機(jī)清單文件/etc/ansible/hosts,使用主機(jī)變量定義一個(gè)變量名相同但值不同的變量。在文件中添加以下內(nèi)容:
vim /etc/ansible/hosts [webservers]
192.168.41.31 http_port=192.168.41.31:80 server_name=www.test1.com:80 root_dir=/etc/httpd/htdocs[dbservers]
192.168.41.32 http_port=192.168.41.32:80 server_name=www.test2.com:80 root_dir=/etc/httpd/htdocs
  • 編寫(xiě)Ansible playbook文件apache.yaml,包含安裝和配置Apache HTTP服務(wù)器的任務(wù)。以下是文件的內(nèi)容:
---
- hosts: allremote_user: rootvars:- package: httpd- service: httpdtasks:- name: install httpd packageyum: name={{package}} state=latest- name: install configure filetemplate: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.confnotify:- restart httpd- name: create root dirfile: path=/etc/httpd/htdocs state=directory- name: start httpd serverservice: name={{service}} enabled=true state=startedhandlers:- name: restart httpdservice: name={{service}} state=restarted

這個(gè)playbook會(huì)安裝httpd軟件包,使用模板文件httpd.conf.j2生成配置文件/etc/httpd/conf/httpd.conf,然后創(chuàng)建目錄/etc/httpd/htdocs,最后啟動(dòng)httpd服務(wù)。如果配置文件發(fā)生變化,會(huì)觸發(fā)重啟httpd服務(wù)。

使用以下命令運(yùn)行playbook:

ansible-playbook apache.yaml

Tags 模塊

在Ansible中,tags(標(biāo)簽)是一種用于標(biāo)記和組織任務(wù)的機(jī)制。通過(guò)為任務(wù)添加標(biāo)簽,可以對(duì)任務(wù)進(jìn)行分類和分組,以便在運(yùn)行Ansible劇本時(shí)選擇性地執(zhí)行或跳過(guò)特定的任務(wù)。

使用標(biāo)簽可以實(shí)現(xiàn)以下幾個(gè)目的:

  • 選擇性執(zhí)行:通過(guò)在運(yùn)行劇本時(shí)指定標(biāo)簽,只執(zhí)行帶有指定標(biāo)簽的任務(wù),而跳過(guò)其他任務(wù)。這對(duì)于在大型劇本中只執(zhí)行特定部分非常有用。

  • 排除任務(wù):通過(guò)在運(yùn)行劇本時(shí)指定排除標(biāo)簽,可以跳過(guò)帶有指定標(biāo)簽的任務(wù),而執(zhí)行其他任務(wù)。這對(duì)于在劇本中排除特定任務(wù)非常有用。

  • 分組任務(wù):通過(guò)為任務(wù)添加相同的標(biāo)簽,可以將它們分組在一起,以便更好地組織和管理任務(wù)。這對(duì)于在劇本中對(duì)任務(wù)進(jìn)行邏輯分組非常有用。

  • tags模塊允許為任務(wù)定義標(biāo)簽,在執(zhí)行playbook時(shí)可以使用--tags選項(xiàng)只運(yùn)行指定標(biāo)簽的任務(wù)。在這個(gè)示例中,有兩個(gè)playbook文件:webhosts.yamldbhosts.yaml。

    webhosts.yaml文件內(nèi)容如下:

vim webhosts.yaml---
- hosts: webserversremote_user: roottasks:- name: Copy hosts filecopy: src=/etc/hosts dest=/opt/hoststags:- only- name: touch filefile: path=/opt/testhost state=touchtags:- always

dbhosts.yaml文件內(nèi)容如下:

---
- hosts: dbserversremote_user: roottasks:- name: Copy hosts filecopy: src=/etc/hosts dest=/opt/hoststags:- only- name: touch filefile: path=/opt/testhost state=touch

運(yùn)行webhosts.yaml playbook,并只運(yùn)行帶有only標(biāo)簽的任務(wù):

ansible-playbook webhosts.yaml --tags="only"

運(yùn)行dbhosts.yaml playbook,并只運(yùn)行帶有only標(biāo)簽的任務(wù):

ansible-playbook dbhosts.yaml --tags="only"

這些playbook會(huì)在被管理的主機(jī)上復(fù)制/etc/hosts文件到/opt/hosts,并在/opt目錄下創(chuàng)建一個(gè)名為testhost的文件。

Roles角色

在Ansible中,roles(角色)是一種組織和管理任務(wù)和變量的方法。角色是可重用的、自包含的Ansible單元,它封裝了一組任務(wù)和變量,可以在不同的劇本中輕松地重用。

使用roles可以將Ansible代碼更好地組織起來(lái),使其更易于維護(hù)和重用。通過(guò)將相關(guān)的任務(wù)和變量分組到角色中,可以將其作為一個(gè)整體來(lái)使用,并在多個(gè)劇本中重復(fù)使用。

角色通常包含以下內(nèi)容:

  • 任務(wù)(Tasks):定義要在目標(biāo)主機(jī)上執(zhí)行的操作。

  • 變量(Variables):定義角色中使用的變量。

  • 文件(Files):包含角色所需的文件,如配置文件、腳本等。

  • 模板(Templates):用于生成配置文件等的模板文件。

  • 處理程序(Handlers):定義在任務(wù)執(zhí)行后觸發(fā)的操作。

通過(guò)使用roles,可以將復(fù)雜的Ansible代碼分解為更小的、可重用的部分,使代碼更加模塊化和可維護(hù)。這樣可以提高代碼的可讀性和可重用性,并簡(jiǎn)化管理和擴(kuò)展Ansible部署。

要使用roles,可以在Ansible劇本中通過(guò)include_role或roles關(guān)鍵字來(lái)引用和調(diào)用角色。這樣可以將角色應(yīng)用到目標(biāo)主機(jī)上,并執(zhí)行其中定義的任務(wù)和操作。

roles 的目錄結(jié)構(gòu):

cd /etc/ansible/
tree roles/
roles/common/tasks/handlers/files/templates/vars/defaults/meta/webserver/tasks/handlers/files/templates/vars/defaults/meta/

在上述目錄結(jié)構(gòu)中,roles/是roles目錄的根目錄,common/webserver/是兩個(gè)示例角色的目錄??梢愿鶕?jù)需要?jiǎng)?chuàng)建更多的角色目錄。

每個(gè)角色目錄通常包含以下子目錄和文件:

  • tasks/:包含角色的任務(wù)文件,定義要在目標(biāo)主機(jī)上執(zhí)行的操作。

  • handlers/:包含角色的處理程序文件,定義在任務(wù)執(zhí)行后觸發(fā)的操作。

  • files/:包含角色所需的文件,如配置文件、腳本等。

  • templates/:包含用于生成配置文件等的模板文件。

  • vars/:包含角色的變量文件,定義角色中使用的變量。

  • defaults/:包含角色的默認(rèn)變量文件,定義角色中使用的默認(rèn)變量。

  • meta/:包含角色的元數(shù)據(jù)文件,定義角色的依賴關(guān)系和其他元數(shù)據(jù)信息。

這種目錄結(jié)構(gòu)使得角色的組織和管理更加清晰和一致,使其易于重用和維護(hù)。在默認(rèn)情況下,Ansible會(huì)自動(dòng)查找每個(gè)目錄下的main.yml文件(也可以是main.yamlmain),并執(zhí)行其中定義的任務(wù)和操作。

示例

  • 首先,創(chuàng)建一個(gè)名為"roles"的目錄
mkdir /etc/ansible/roles/ -p #yum裝完默認(rèn)就有
  • 可選步驟:創(chuàng)建一個(gè)全局變量目錄
mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all  #文件名自己定義,引用的時(shí)候注意

在"all"文件中,您可以定義全局變量,以供所有角色使用。

  • 在"roles"目錄中,為每個(gè)角色創(chuàng)建一個(gè)以角色名稱命名的目錄,例如"httpd"和"mysql"
mkdir /etc/ansible/roles/httpd
mkdir /etc/ansible/roles/mysql
  • 在每個(gè)角色的目錄中,創(chuàng)建以下子目錄:files、handlers、tasks、templates、meta、defaults和vars。
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}

這些目錄用于存放角色的文件、處理程序、任務(wù)、模板、元數(shù)據(jù)、默認(rèn)變量和變量。

  • 在每個(gè)角色的handlers、tasks、meta、defaults和vars目錄下,創(chuàng)建一個(gè)名為"main.yml"的文件。請(qǐng)注意,文件名必須為"main.yml"。
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

這些"main.yml"文件將包含角色的任務(wù)、處理程序、元數(shù)據(jù)、默認(rèn)變量和變量的定義。

  • 修改"site.yml"文件,根據(jù)不同的主機(jī)調(diào)用不同的角色。可以使用文本編輯器打開(kāi)"site.yml"文件
vim /etc/ansible/site.yml
---
- hosts: webserversremote_user: rootroles:- httpd
- hosts: dbserversremote_user: rootroles:- mysql

在這個(gè)示例中,對(duì)于"webservers"主機(jī)組,將調(diào)用名為"httpd"的角色;對(duì)于"dbservers"主機(jī)組,將調(diào)用名為"mysql"的角色。

  • 最后,切換到ansible的工作目錄,并運(yùn)行ansible-playbook命令來(lái)執(zhí)行playbook:
cd /etc/ansible
ansible-playbook site.yml

這將運(yùn)行名為"site.yml"的playbook,并根據(jù)定義的角色調(diào)用相應(yīng)的任務(wù)和操作。

通過(guò)按照上述步驟,可以使用roles來(lái)組織和管理Ansible playbook,并在不同的主機(jī)上調(diào)用不同的角色。這樣可以使您的部署更加模塊化、可重用和易于維護(hù)。

創(chuàng)建roles目錄結(jié)構(gòu)中各個(gè)角色的子目錄和文件示例

  • 創(chuàng)建httpd角色的子目錄:
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p

這個(gè)命令會(huì)創(chuàng)建httpd角色的子目錄files、templates、tasks、handlers、vars、defaults和meta。"-p"選項(xiàng)表示如果目錄已存在,則不會(huì)報(bào)錯(cuò)。

  • 創(chuàng)建mysql角色的子目錄:
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p

這個(gè)命令會(huì)創(chuàng)建mysql角色的子目錄files、templates、tasks、handlers、vars、defaults和meta。

  • 創(chuàng)建php角色的子目錄:
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p

這個(gè)命令會(huì)創(chuàng)建php角色的子目錄files、templates、tasks、handlers、vars、defaults和meta。

  • 在httpd角色的子目錄中創(chuàng)建main.yml文件:
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml

這個(gè)命令會(huì)在httpd角色的defaults、vars、tasks、meta和handlers子目錄中創(chuàng)建一個(gè)名為main.yml的空文件。

  • 在mysql角色的子目錄中創(chuàng)建main.yml文件:
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

這個(gè)命令會(huì)在mysql角色的defaults、vars、tasks、meta和handlers子目錄中創(chuàng)建一個(gè)名為main.yml的空文件。

  • 在php角色的子目錄中創(chuàng)建main.yml文件
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

這個(gè)命令會(huì)在php角色的defaults、vars、tasks、meta和handlers子目錄中創(chuàng)建一個(gè)名為main.yml的空文件。

通過(guò)執(zhí)行上述命令,將創(chuàng)建roles目錄結(jié)構(gòu)中各個(gè)角色的子目錄和文件,以便組織和管理Ansible playbook中的任務(wù)和變量。

編寫(xiě)httpd模塊

在Ansible中,httpd模塊是用于管理Apache HTTP服務(wù)器的模塊。它提供了一組任務(wù)和參數(shù),可以用于配置、安裝、啟動(dòng)、停止和管理Apache HTTP服務(wù)器。

使用httpd模塊,可以執(zhí)行以下操作:

  • 安裝和卸載Apache HTTP服務(wù)器。

  • 配置Apache HTTP服務(wù)器的全局設(shè)置,如監(jiān)聽(tīng)端口、服務(wù)器名稱等。

  • 配置虛擬主機(jī)(Virtual Hosts),包括創(chuàng)建、刪除、啟用和禁用虛擬主機(jī)。

  • 配置Apache模塊,如啟用或禁用特定的模塊。

  • 配置Apache的網(wǎng)站目錄和文件權(quán)限。

  • 啟動(dòng)、停止和重啟Apache HTTP服務(wù)器。

httpd模塊提供了一組任務(wù),可以在Ansible playbook中使用這些任務(wù)來(lái)管理Apache HTTP服務(wù)器。例如,可以使用"yum"模塊安裝Apache軟件包,然后使用httpd模塊配置和管理服務(wù)器。

以下是一些httpd模塊常用任務(wù)的示例:

  • 安裝Apache HTTP服務(wù)器:
- name: Install Apacheyum:name: httpdstate: present
  • 配置全局設(shè)置:
- name: Configure Apache global settingshttpd_global_conf:options:- Listen 80- ServerName example.com
  • 配置虛擬主機(jī):
- name: Create virtual hosthttpd_vhost:state: presentname: example.comdocument_root: /var/www/exampleoptions:- Options Indexes FollowSymLinks- AllowOverride All
  • 啟動(dòng)和停止Apache服務(wù)器:
- name: Start Apacheservice:name: httpdstate: started- name: Stop Apacheservice:name: httpdstate: stopped

這些示例只是httpd模塊的一小部分功能,還可以使用Ansible編寫(xiě)的簡(jiǎn)單的任務(wù)文件(main.yml)。

  • 在路徑/etc/ansible/roles/httpd/tasks/main.yml中,添加以下內(nèi)容:
- name: install apacheyum: name={{pkg}} state=latest- name: start apacheservice: enabled=true name={{svc}} state=started
  • 在路徑/etc/ansible/roles/httpd/vars/main.yml中,定義變量pkg和svc:
pkg: httpd
svc: httpd
  • 接下來(lái),編寫(xiě)MySQL模塊。在路徑/etc/ansible/roles/mysql/tasks/main.yml中,添加以下內(nèi)容:
- name: install mysqlyum: name={{pkg}} state=latest- name: start mysqlservice: enabled=true name={{svc}} state=started
  • 在路徑/etc/ansible/roles/mysql/vars/main.yml中,定義變量pkg和svc:
pkg:- mariadb- mariadb-server
svc: mariadb
  • 然后,編寫(xiě)PHP模塊。在路徑/etc/ansible/roles/php/tasks/main.yml中,添加以下內(nèi)容:
- name: install phpyum: name={{pkg}} state=latest- name: start php-fpmservice: enabled=true name={{svc}} state=started
  • 在路徑/etc/ansible/roles/php/vars/main.yml中,定義變量pkg和svc:
pkg:- php- php-fpm
svc: php-fpm
  • 最后,編寫(xiě)roles示例。在路徑/etc/ansible/site.yml中,添加以下內(nèi)容:
---
- hosts: webserversremote_user: rootroles:- httpd- mysql- php

完成后,進(jìn)入/etc/ansible目錄,并運(yùn)行ansible-playbook site.yml命令來(lái)執(zhí)行任務(wù)。

cd /etc/ansible
ansible-playbook site.yml
http://www.risenshineclean.com/news/54733.html

相關(guān)文章:

  • wordpress 文章推薦一篇福建優(yōu)化seo
  • 網(wǎng)站建設(shè)的目的和作用網(wǎng)站seo推廣排名
  • 阿里云企業(yè)網(wǎng)站怎么收費(fèi)百度競(jìng)價(jià)排名多少錢
  • 網(wǎng)站建設(shè)調(diào)查報(bào)告范文seo是怎么優(yōu)化上去
  • 找人做網(wǎng)站做的很爛seo診斷服務(wù)
  • 網(wǎng)站運(yùn)營(yíng)托管協(xié)議杭州網(wǎng)絡(luò)優(yōu)化公司排名
  • 武漢做網(wǎng)站的公司有哪些比較好友情鏈接也稱為
  • 糧食局網(wǎng)站建設(shè)報(bào)告網(wǎng)紅推廣
  • 清遠(yuǎn)黨風(fēng)廉政建設(shè)網(wǎng)站不受限制的搜索瀏覽器
  • 做網(wǎng)站每年要交不費(fèi)用嗎石家莊seo公司
  • 設(shè)計(jì)網(wǎng)站賣錢seo百度點(diǎn)擊軟件
  • 網(wǎng)站關(guān)鍵字標(biāo)簽最新seo操作
  • 海南城鄉(xiāng)建設(shè)庁網(wǎng)站色盲測(cè)試圖第六版
  • 圖片制作網(wǎng)頁(yè)關(guān)于進(jìn)一步優(yōu)化落實(shí)疫情防控措施
  • 網(wǎng)站被墻了怎么辦百度推廣合作
  • 長(zhǎng)沙專業(yè)網(wǎng)站設(shè)計(jì)2023年小學(xué)生簡(jiǎn)短小新聞
  • ssp媒體服怎樣做網(wǎng)站搭建一個(gè)網(wǎng)站
  • 鄭州網(wǎng)站建設(shè)gusai123護(hù)膚品軟文推廣
  • 北京模板網(wǎng)站開(kāi)發(fā)品牌軟文范文
  • 招商網(wǎng)站大全seo技術(shù)推廣
  • 樣板網(wǎng)站看b站視頻下載軟件
  • 創(chuàng)建網(wǎng)站的向?qū)Ш湍0搴馑畇eo營(yíng)銷
  • b2c 電子商務(wù)網(wǎng)站的經(jīng)營(yíng)特點(diǎn)百度提升優(yōu)化
  • 棋類游戲網(wǎng)站開(kāi)發(fā)游戲優(yōu)化是什么意思?
  • 團(tuán)購(gòu)網(wǎng)站前景新聞熱搜榜 今日熱點(diǎn)
  • 保定網(wǎng)站開(kāi)發(fā)公司學(xué)做網(wǎng)站培訓(xùn)班要多少錢
  • 北流網(wǎng)站建設(shè)培訓(xùn)班招生方案
  • 公眾號(hào)免費(fèi)素材網(wǎng)站2023年6月份疫情嚴(yán)重嗎
  • 營(yíng)銷型網(wǎng)站建設(shè)公司易網(wǎng)拓線上推廣渠道有哪些方式
  • 織夢(mèng)動(dòng)漫網(wǎng)站模版深圳網(wǎng)頁(yè)搜索排名提升