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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ansible剧本(playbook)

發布時間:2024/3/26 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ansible剧本(playbook) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、playbooks 概述以及實例操作

1、playbooks 的組成

2、操作示例一:

2.1 編寫yaml文件也就是playbook

2.2 修改配置文件并放入/opt/目錄下

2.3 運行playbook

3、操作實例二:定義、引用變量

4、操作示例三:指定遠程主機sudo切換用戶

5、操作示例四:when條件判斷

6、操作示例:五:迭代

二、playbook的模塊

1、Templates 模塊

1.1.先準備一個以 .j2 為后綴的 template 模板文件,設置引用的變量

1.2.修改主機清單文件,使用主機變量定義一個變量名相同,而值不同的變量

1.3.編寫 playbook

1.4 制作測試網頁

2、tags 模塊

3、Roles 模塊

3.1 roles 的目錄結構:

3.2 roles 內各目錄含義解釋

3.3 在一個 playbook 中使用 roles 的步驟:

三、roles在LNMP中的應用

1、編寫nginx模塊

2、編寫mysql模塊

3、編寫php模塊

4、編寫roles示例


一、playbooks 概述以及實例操作

1、playbooks 的組成

playbooks 本身由以下各部分組成

(1)Tasks:任務,即通過 task 調用 ansible 的模板將多個操作組織在一個 playbook 中運行

(2)Variables:變量

(3)Templates:模板

(4)Handlers:處理器,當changed狀態條件滿足時,(notify)觸發執行的操作

(5)Roles:角色

2、操作示例一:

2.1 編寫yaml文件也就是playbook

vim test1.yaml --- #yaml文件以---開頭,以表明這是一個yaml文件,可省略- name: first play #定義一個play的名稱,可省略gather_facts: false #設置不進行facts信息收集,這可以加快執行速度,可省略hosts: webservers #指定要執行任務的被管理主機組,如多個主機組用冒號分隔remote_user: root #指定被管理主機上執行任務的用戶tasks: #定義任務列表,任務列表中的各任務按次序逐個在hosts中指定的主機上執行- name: test connection # 自定義任務名稱ping: #使用 module: [options] 格式來定義一個任務- name: disable selinuxcommand: '/sbin/setenforce 0' #command模塊和shell模塊無需使用key=value格式ignore_errors: True #如執行命令的返回值不為0,就會報錯,tasks停止,可使用ignore_errors忽略失敗的任務- name: disable firewalldservice: name=firewalld state=stopped #使用 module: options 格式來定義任務,option使用key=value格式- name: install httpdyum: name=httpd state=latest- name: install configuration file for httpdcopy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf #這里需要一個事先準備好的/opt/httpd.conf文件notify: "restart httpd" #如以上操作后為changed的狀態時,會通過notify指定的名稱觸發對應名稱的handlers操作- name: start httpd serviceservice: enabled=true name=httpd state=startedhandlers: #handlers中定義的就是任務,此處handlers中的任務使用的是service模塊- name: restart httpd #notify和handlers中任務的名稱必須一致service: name=httpd state=restarted 1 ##Ansible在執行完某個任務之后并不會立即去執行對應的handler,而是在當前play中所有普通任務都執行完后再去執行handler,這樣的好處是可以多次觸發notify,但最后只執行一次對應的handler,從而避免多次重啟。

2.2 修改配置文件并放入/opt/目錄下

vim httpd.conf #在/opt/目錄下放入修改之后的配置文件#42行,指定端口 Listen 8080 #95行,指定域名 ServerName www.ly.com:8080 

2.3 運行playbook

ansible-playbook test1.yaml //補充參數: -k(–ask-pass):用來交互輸入ssh密碼 -K(-ask-become-pass):用來交互輸入sudo密碼 -u:指定用戶 ansible-playbook test1.yaml --syntax-check #檢查yaml文件的語法是否正確 ansible-playbook test1.yaml --list-task #檢查tasks任務 ansible-playbook test1.yaml --list-hosts #檢查生效的主機 ansible-playbook test1.yaml --start-at-task='install httpd' #從指定任務開始運行

3、操作實例二:定義、引用變量

- 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}}- name: copy filecopy: content="{{ansible_default_ipv4}}" dest=/opt/vars.txt #在setup模塊中可以獲取facts變量信息ansible-playbook test2.yaml -e "username=nginx"

4、操作示例三:指定遠程主機sudo切換用戶

--- - hosts: dbservers remote_user: zhangsan become: yes #2.6版本以后的參數,之前是sudo,意思為切換用戶運行 become_user: root #指定sudo用戶為root 執行playbook時:ansible-playbook test3.yml -K <密碼> 

5、操作示例四:when條件判斷

在Ansible中,提供的唯一一個通用的條件判斷是when指令,當when指令的值為true時,則該任務執行,否則不執行該任務。

//when一個比較常見的應用場景是實現跳過某個主機不執行任務或者只有滿足條件的主機執行任務

vim test4.yaml --- - hosts: allremote_user: roottasks:- name: shutdown hostcommand: /sbin/shutdown -r nowwhen: ansible_default_ipv4.address == "192.168.229.80" #when指令中的變量名不需要手動加上 {{}}或when: inventory_hostname == "<主機名>"ansible-playbook test4.yaml


 

6、操作示例:五:迭代

Ansible提供了很多種循環結構,一般都命名為with_items,作用等同于 loop 循環。

vim test5.yaml --- - name: play5hosts: dbserversgather_facts: falsetasks:- name: create directories ##創建目錄。目錄名使用with_items里的循環file:path: "{{item}}" ##由于值是{{....}} ,所以為了防止被認為是字典,要加上雙引號.state: directorywith_items: #等同于 loop:- /tmp/test1- /tmp/test2- name: add users ###使用循環創建用戶,并添加附加組user: 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 test5.yaml

二、playbook的模塊

1、Templates 模塊

Jinja是基于Python的模板引擎。Template類是Jinja的一個重要組件,可以看作是一個編譯過的模板文件,用來產生目標文本,傳遞Python的變量給模板去替換模板中的標記。

1.1.先準備一個以 .j2 為后綴的 template 模板文件,設置引用的變量

cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2vim /opt/httpd.conf.j2 Listen {{http_port}} #42行,修改 ServerName {{server_name}} #95行,修改 DocumentRoot "{{root_dir}}" #119行,修改 <Directory "{{root_dir}}"> #131修改 配置目錄訪問權限


  

1.2.修改主機清單文件,使用主機變量定義一個變量名相同,而值不同的變量

vim /etc/ansible/hosts [webservers] 192.168.2.200 http_port=192.168.2.200:80 server_name=www.xkq.com:80 root_dir=/etc/httpd/htdocs[dbservers] 192.168.2.77 http_port=192.168.2.77:80 server_name=www.wy.com:80 root_dir=/etc/httpd/htdocs

1.3.編寫 playbook

vim apache.yaml --- - 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.conf #使用template模板notify:- 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=restartedansible-playbook apache.yaml

1.4 制作測試網頁

ansible 192.168.2.200 -m shell -a "echo 'this is xkq' > /etc/httpd/htdocs/index.html" #制作網頁測試文件ansible 192.168.2.77 -m shell -a "echo 'this is wy' > /etc/httpd/htdocs/index.html" curl http://192.168.2.200 #登錄訪問查看


 

2、tags 模塊

可以在一個playbook中為某個或某些任務定義“標簽”,在執行此playbook時通過ansible-playbook命令使用--tags選項能實現僅運行指定的tasks。
playbook還提供了一個特殊的tags為always。作用就是當使用always當tags的task時,無論執行哪一個tags時,定義有always的tags都會執行。

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 #表示始終要運行的代碼ansible-playbook webhosts.yaml --tags="only"

3、Roles 模塊

Ansible為了層次化、結構化地組織Playbook,使用了角色(roles),roles可以根據層次型結構自動裝載變量文件、task以及handlers等。簡單來講,roles就是通過分別將變量、文件、任務、模塊及處理器放置于單獨的目錄中,并可以便捷地include它們。roles一般用于基于主機構建服務的場景中,但也可以用于構建守護進程等場景中。

3.1 roles 的目錄結構:

cd /etc/ansible/ tree roles/ roles/ ├── web/ │ ├── files/ │ ├── templates/ │ ├── tasks/ │ ├── handlers/ │ ├── vars/ │ ├── defaults/ │ └── meta/ └── db/ ├── files/ ├── templates/ ├── tasks/ ├── handlers/ ├── vars/ ├── defaults/ └── meta/  

3.2 roles 內各目錄含義解釋

●files
用來存放由 copy 模塊或 script 模塊調用的文件。

●templates
用來存放 jinjia2 模板,template 模塊會自動在此目錄中尋找 jinjia2 模板文件。

●tasks
此目錄應當包含一個 main.yml 文件,用于定義此角色的任務列表,此文件可以使用 include 包含其它的位于此目錄的 task 文件。

●handlers
此目錄應當包含一個 main.yml 文件,用于定義此角色中觸發條件時執行的動作。

●vars
此目錄應當包含一個 main.yml 文件,用于定義此角色用到的變量。

●defaults
此目錄應當包含一個 main.yml 文件,用于為當前角色設定默認變量。

●meta
此目錄應當包含一個 main.yml 文件,用于定義此角色的特殊設定及其依賴關系。

3.3 在一個 playbook 中使用 roles 的步驟:

(1)創建以 roles 命名的目錄

mkdir /etc/ansible/roles/ -p #yum裝完默認就有

(2)創建全局變量目錄(可選)

mkdir /etc/ansible/group_vars/ -p touch /etc/ansible/group_vars/lnmp #文件名自己定義,引用的時候注意

(3)在 roles 目錄中分別創建以各角色名稱命令的目錄,如 nginx、mysql、php

mkdir /etc/ansible/roles/nginx mkdir /etc/ansible/roles/mysql mkdir /etc/ansible/roles/php


  

(4)在每個角色命令的目錄中分別創建files、handlers、tasks、templates、meta、defaults和vars目錄,用不到的目錄可以創建為空目錄,也可以不創建

mkdir /etc/ansible/roles/nginx/{files,templates,tasks,handlers,vars,defaults,meta} mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta}


  

(5)在每個角色的 handlers、tasks、meta、defaults、vars 目錄下創建 main.yml 文件,千萬不能自定義文件名

touch /etc/ansible/roles/nginx/{defaults,vars,tasks,meta,handlers}/main.yml touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml


  

(6)修改 site.yml 文件,針對不同主機去調用不同的角色

vim /etc/ansible/site.yml --- - hosts: webserversremote_user: rootroles:- nginx- mysql- php

(7)運行 ansible-playbook

cd /etc/ansible ansible-playbook site.yml

三、roles在LNMP中的應用

接上文實驗步驟

1、編寫nginx模塊

寫一個簡單的tasks/main.yml

vim /etc/ansible/roles/nginx/tasks/main.yml - name: install nginxyum: name={{pkg}} state=latest - name: startservice: enabled=true name={{svc}} state=started

//定義變量:可以定義在全局變量中,也可以定義在roles角色變量中,一般定義在角色變量中

vim /etc/ansible/roles/nginx/vars/main.yml pkg: nginx svc: nginx

這里我們定義在角色變量中

2、編寫mysql模塊

vim /etc/ansible/roles/mysql/tasks/main.yml - name: install mysqlyum: name={{pkg}} state=latest - name: start mysqlservice: enabled=true name={{svc}} state=startedvim /etc/ansible/roles/mysql/vars/main.yml pkg:- mariadb- mariadb-server svc: mariadb


 

3、編寫php模塊

vim /etc/ansible/roles/php/tasks/main.yml - name: install phpyum: name={{pkg}} state=latest - name: start php-fpmservice: enabled=true name={{svc}} state=startedvim /etc/ansible/roles/php/vars/main.yml pkg:- php- php-fpm svc: php-fpm

4、編寫roles示例

vim /etc/ansible/site.yml --- - hosts: webserversremote_user: rootroles:- httpd- mysql- phpcd /etc/ansible ansible-playbook site.yml

總結

以上是生活随笔為你收集整理的ansible剧本(playbook)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕韩日 | 西野翔夫の目の前で犯在线 | 狠狠爱综合 | 福利在线视频导航 | 色射影院 | 天堂素人 | 欧美在线视频一区二区 | 久久精品无码一区二区三区免费 | 亚洲美女一级片 | 午夜精品一区二区在线观看 | 性猛交xxxx乱大交孕妇2十 | 国产激情av一区二区三区 | 人妻毛片 | 黑鬼大战白妞高潮喷白浆 | 找av123导航| 激情久久久久 | 午夜男人天堂 | 91ts人妖另类精品系列 | 欧美网站在线 | 伊人久久五月天 | 五月婷婷综合在线 | 在线观看免费国产视频 | 国产成人一区二区 | 久热这里只有 | 精品久久BBBBB精品人妻 | 一区二区三区av在线 | 波多野结衣一区 | 老牛影视少妇在线观看 | 久久婷香 | 亚洲av色区一区二区三区 | 网站黄在线 | 小辣椒福利视频导航 | 欧美色狠 | 中国黄色网址 | 视频在线观看免费大片 | 国产福利视频网站 | 亚洲五月天综合 | 久久天堂av综合合色蜜桃网 | 午夜快播| 激情婷婷丁香 | 精品国产乱码久久久久久蜜臀 | 撸久久| 亚洲激情综合 | 妺妺窝人体色www聚色窝仙踪 | 免费毛片软件 | 亚洲va韩国va欧美va | 丁香六月五月婷婷 | 黄色美女av | 波多野一区二区 | 阿娇全套94张未删图久久 | 日本五十路在线 | 国产视频一区二区三区四区五区 | 亚洲国产剧情在线观看 | 久久国内| 亚洲高清免费 | 国产a v一区二区三区 | av中文字 | 黄色动漫在线免费观看 | 国产一二三视频 | 无码人妻丰满熟妇精品区 | 女的被男的操 | 黄色麻豆视频 | 欧美成人免费播放 | 久久99免费 | 成人一区二区三区四区 | 亚洲女人18毛片水真多 | 国产一级片久久 | 成人在线激情 | 日韩大片免费看 | 第四色在线视频 | 你懂的亚洲 | 久热国产精品视频 | 琪琪在线视频 | 国产特级黄色片 | 男生操女生逼逼 | 蜜色av | 久久久久久久 | 性生活视屏 | 最新av在线网站 | 日韩av在线观看免费 | 国产欧美中文字幕 | 国产激情无码一区二区 | 毛片基地在线播放 | 麻豆精品免费 | www.自拍偷拍 | 国产成人自拍视频在线观看 | 久久精品女人 | 日韩电影一区二区三区 | www.欧美国产 | 99riav国产在线观看 | 毛片999| 夜夜骑天天干 | 天天有av| 四虎国产精品成人免费入口 | 国产成人99 | 国产欧美激情视频 | 国产精选91 | 99福利影院 | 欧美超逼视频 |