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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Ansible剧本介绍及使用演示(week5_day2)--技术流ken

發布時間:2024/4/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ansible剧本介绍及使用演示(week5_day2)--技术流ken 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

Ansible劇本編寫說明

?

一. 縮進

??? yaml 的縮進要求比較嚴格。一定不能使用tab鍵

????注意:編寫yaml文件,就忘掉shell的tab吧。

?

二. 冒號

每個冒號后面一定要有一個空格

注意:1. 以冒號結尾不需要空格

? ? ? ? ? ?2.表示文件路徑的模版可以不需要空格

?

三. 短橫線? -

????想要表示列表項,使用一個短橫杠加一個空格。多個項使用同樣的縮進級別作為同一個列表的一部分

總之:

1. 嚴格控制空格編寫劇本的時候

2.劇本編寫不支持tab

?

Ansible書寫規范

?

一. 注意點

1、腳本名:***.yml???【不是.yml也行】

2、注釋:??“#”

3、tasks: (后不能加任何字符-可以加注釋#)

4、- name: 一個?- name: 下不能有兩條功能(行)

5.每個-和:即冒號之后要有一個空格,task除外。

?

二.? 劇本格式

---? ? ? ? ? ? ? ? ? ? ?###?劇本的開頭,可以不寫

- hosts: all???????? <-?處理所有服務器,找到所有服務器;? -(空格)hosts:(空格)all

? tasks:? ? ? ? ? ? <-?劇本所要干的事情;? (空格)(空格)task:

?? - command:? ? ?(空格)(空格)空格)(空格)-(空格)模塊名稱:(空格)模塊中對應的功能

測試劇本命令后面可以跟多個-v進行調試檢查

?

Ansible劇本常用命令

?

1 .對劇本語法檢測

ansible-playbook --syntax-check? /root/ansible/httpd.yaml

?

2.-C模擬執行劇本

ansible-playbook??-C /root/ansible/httpd.yaml

?

3.執行劇本

ansible-playbook? ?/root/ansible/httpd.yaml

?

Ansible劇本實例

?

實例一:安裝httpd并啟動

第一步: 編寫一個httpdin.yaml劇本,劇本內容如下

[root@ken ~]# vim httpdin.yaml - hosts: alltasks:- name: install httpdyum: name=httpd state=present- name: start httpdservice: name=httpd state=started

?

第二步:語法檢測

檢測沒有問題

[root@ken ~]# ansible-playbook --syntax-check httpdin.yaml playbook: httpdin.yaml

?

第三步:模擬執行劇本

[root@ken ~]# ansible-playbook -C httpdin.yaml PLAY [all] *********************************************************************************************************************TASK [Gathering Facts] ********************************************************************************************************* ok: [10.220.5.139] ok: [10.220.5.138]TASK [install httpd] *********************************************************************************************************** ok: [10.220.5.138] changed: [10.220.5.139]TASK [start httpd] ************************************************************************************************************* changed: [10.220.5.139] ok: [10.220.5.138]PLAY RECAP ********************************************************************************************************************* 10.220.5.138 : ok=3 changed=0 unreachable=0 failed=0 10.220.5.139 : ok=3 changed=2 unreachable=0 failed=0

第四步:執行劇本

經過上面的模擬執行,并不會真的執行腳本,下面我們來進行真正的執行

[root@ken ~]# ansible-playbook httpdin.yaml PLAY [all] *********************************************************************************************************************TASK [Gathering Facts] ********************************************************************************************************* ok: [10.220.5.138] ok: [10.220.5.139]TASK [install httpd] *********************************************************************************************************** ok: [10.220.5.138] changed: [10.220.5.139]TASK [start httpd] ************************************************************************************************************* ok: [10.220.5.138] changed: [10.220.5.139]PLAY RECAP ********************************************************************************************************************* 10.220.5.138 : ok=3 changed=0 unreachable=0 failed=0 10.220.5.139 : ok=3 changed=2 unreachable=0 failed=0

?

第五步:檢查是否已經安裝并啟動成功

執行表名httpd安裝并啟動成功

[root@ken ~]# ansible all -m shell -a "ss -tnl | grep 80" 10.220.5.139 | SUCCESS | rc=0 >> LISTEN 0 128 :::80 :::* 10.220.5.138 | SUCCESS | rc=0 >> LISTEN 0 128 :::80 :::*

經過上面的五步,就可以安裝任意軟件及啟動了,前提是你需要配置好你的yum源。你來試一下安裝nginx吧!

?

實例二:使用處理器

在上面的實例中,我們已經可以安裝軟件了。現在有這樣一個需求,如果我們更改了節點的配置文件需要重啟操作,其余動作照常執行怎么解決?

第一步:本地準備一個httpd配置文件,更改端口號為8081

[root@ken ~]# cp /etc/httpd/conf/httpd.conf ./ [root@ken ~]# sed -i "s/Listen 80/Listen 8081/" httpd.conf

?

第二步:編寫劇本

劇本說明:

- hosts: all 指定主機組,可以理解為這個最大,頂個寫

? tasks:? ? ? ?指定下面一系列的動作,這個是第二,需要有兩個空格

? ? - name: 指定名稱,排行第三,需要有三到四個空格

? ? ? yum: 模塊名 排行第四,需要有四到五個空格

? handlers:指定處理器(觸發器),排行第二,需要與tasks對齊

- hosts: alltasks:- name: install httpdyum: name=httpd state=present- name: copy filecopy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.confnotify:- restart httpd- name: start httpdservice: name=httpd state=presenthandlers:- name: restart httpdservice: name=httpd state=restarted

?

第三步:劇本語法檢測

劇本檢測報以下錯誤,說明排版有問題

[root@ken ~]# ansible-playbook --syntax-check httpdhe.yaml ERROR! Syntax Error while loading YAML.mapping values are not allowed in this contextThe error appears to have been in '/root/httpdhe.yaml': line 4, column 11, but may be elsewhere in the file depending on the exact syntax problem.The offending line appears to be:- name: install httpdyum: name=httpd state=present^ here

?

?第四步:排查錯誤

可以發現第四行yum多縮進了一個空格,一定要嚴格控制縮進。

tasks和hosts首字母對齊

模塊和name對齊首字母

- hosts: alltasks:- name: install httpdyum: name=httpd state=present- name: copy filecopy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.confnotify:- restart httpd- name: start httpdservice: name=httpd state=presenthandlers:- name: restart httpdservice: name=httpd state=restarted

?

第五步:執行劇本

注意看執行過程,中間有一步RUNNING HANDLER,說明已經出發了處理器進行了重啟操作

[root@ken ~]# ansible-playbook httpdhe.yaml PLAY [all] *********************************************************************************************************************TASK [Gathering Facts] ********************************************************************************************************* ok: [10.220.5.139] ok: [10.220.5.138]TASK [install httpd] *********************************************************************************************************** ok: [10.220.5.139] ok: [10.220.5.138]TASK [copy file] *************************************************************************************************************** changed: [10.220.5.139] changed: [10.220.5.138]TASK [start httpd] ************************************************************************************************************* ok: [10.220.5.138] ok: [10.220.5.139]RUNNING HANDLER [restart httpd] ************************************************************************************************ changed: [10.220.5.139] changed: [10.220.5.138]PLAY RECAP ********************************************************************************************************************* 10.220.5.138 : ok=5 changed=2 unreachable=0 failed=0 10.220.5.139 : ok=5 changed=2 unreachable=0 failed=0

?

第六步:檢查端口

上面我們已經把配置文件的端口改成8081了,檢查下節點啟動的是否是8081

可以發現節點中的8081已經啟動

[root@ken ~]# ansible all -m shell -a "ss -tnl | grep 8081" 10.220.5.139 | SUCCESS | rc=0 >> LISTEN 0 128 :::8081 :::* 10.220.5.138 | SUCCESS | rc=0 >> LISTEN 0 128 :::8081 :::*

?

實例三:劇本中使用判斷

劇本中可以使用when來進行判斷

現在我們再主機名為ken1的節點之上創建一個用戶tang

第一步:域名解析

確保本機以及節點之上可以解析IP和域名

root@ken ~]# echo "10.220.5.138 ken1" >>/etc/hosts

?

第二步:編寫劇本

ansible_fqdn是一個變量,可以用如下命令看到,表示的是主機名

[root@ken ~]# ansible 10.220.5.138 -m setup | grep ansible_fqdn"ansible_fqdn": "ken1",

在編寫劇本的時候ken1即主機名需要加上雙引號或者單引號,否則會報錯

- hosts: alltasks:- name: useradd tanguser: name=tang uid=566 system=yeswhen: ansible_fqdn == "ken1"

?

第三步:語法檢測

[root@ken ~]# ansible-playbook --syntax-check useradd.yaml playbook: useradd.yaml

?

第四步:執行劇本

可以看到10.220.5.139跳過了

[root@ken ~]# ansible-playbook useradd.yaml PLAY [all] *********************************************************************************************************************TASK [Gathering Facts] ********************************************************************************************************* ok: [10.220.5.139] ok: [10.220.5.138]TASK [useradd tang] ************************************************************************************************************ skipping: [10.220.5.139] changed: [10.220.5.138]PLAY RECAP ********************************************************************************************************************* 10.220.5.138 : ok=2 changed=1 unreachable=0 failed=0 10.220.5.139 : ok=1 changed=0 unreachable=0 failed=0 [root@ken ~]# vim useradd.yaml

?

第五步:檢測是否執行成功

可以發現在主機10.220.5.138上面已經有了用戶tang

[root@ken ~]# ansible all -m shell -a "id tang" 10.220.5.139 | FAILED | rc=1 >> id: tang: no such usernon-zero return code10.220.5.138 | SUCCESS | rc=0 >> uid=566(tang) gid=566(tang) groups=566(tang)

?

實例四:劇本中使用循環

劇本中的循環使用with_items,使用item引用變量

變量的引用格式是 {{ 變量 }}

第一步:創建劇本

- hosts: alltasks:- name: useradd dinguser: name="ding{{item}}"with_items:- a1- a2- a3- a4

?

第二步:語法檢測

[root@ken ~]# ansible-playbook --syntax-check user.yaml playbook: user.yaml

?

第三步:執行劇本

[root@ken ~]# ansible-playbook user.yamlPLAY [all] *********************************************************************************************************************TASK [Gathering Facts] ********************************************************************************************************* ok: [10.220.5.139] ok: [10.220.5.138]TASK [useradd ding] ************************************************************************************************************ changed: [10.220.5.138] => (item=a1) changed: [10.220.5.139] => (item=a1) changed: [10.220.5.138] => (item=a2) changed: [10.220.5.139] => (item=a2) changed: [10.220.5.138] => (item=a3) changed: [10.220.5.139] => (item=a3) changed: [10.220.5.138] => (item=a4) changed: [10.220.5.139] => (item=a4)PLAY RECAP ********************************************************************************************************************* 10.220.5.138 : ok=2 changed=1 unreachable=0 failed=0 10.220.5.139 : ok=2 changed=1 unreachable=0 failed=0

?

第四步:查看執行結果

可以發現用戶已經創建完畢

[root@ken ~]# ansible all -m shell -a "tail -5 /etc/passwd" 10.220.5.139 | SUCCESS | rc=0 >> wukong:x:1002:234::/home/wukong:/bin/bash dinga1:x:1003:1003::/home/dinga1:/bin/bash dinga2:x:1004:1004::/home/dinga2:/bin/bash dinga3:x:1005:1005::/home/dinga3:/bin/bash dinga4:x:1006:1006::/home/dinga4:/bin/bash10.220.5.138 | SUCCESS | rc=0 >> tang:x:566:566::/home/tang:/bin/bash dinga1:x:1002:1002::/home/dinga1:/bin/bash dinga2:x:1003:1003::/home/dinga2:/bin/bash dinga3:x:1004:1004::/home/dinga3:/bin/bash dinga4:x:1005:1005::/home/dinga4:/bin/bash

?

自我感覺這個循環很low,如果創建1000個用戶難道需要這樣寫- a1 -a2 -a3...-a1000個嗎?

?

實例五:劇本中使用變量

自定義變量的實現方式

1. 直接寫在yaml文件中

2. 在Inventory file中定義

3. 變量的聲明:

vars:

?- 變量名: 變量值

4. 變量的引用:{{ var }}

5. vars和tasks同級,并要寫在tasks前面

?

下面的劇本定義了一個變名為pkgname 變量值為mariadb-server, 變量名為sername,變量值為mariadb兩個變量

第一步:創建劇本

- hosts: allvars:- pkgname: mariadb-server- sername: mariadbtasks:- name: install mariadbyum: name={{ pkgname }} state=present- name: start mariadbservice: name={{ sername }} state=started

?

第二步:語法檢測

[root@ken ~]# ansible-playbook --syntax-check mariadb.yaml playbook: mariadb.yaml

?

第三步:執行劇本

[root@ken ~]# ansible-playbook mariadb.yaml PLAY [all] *********************************************************************************************************************TASK [Gathering Facts] ********************************************************************************************************* ok: [10.220.5.139] ok: [10.220.5.138]TASK [install mariadb] ********************************************************************************************************* ok: [10.220.5.138] ok: [10.220.5.139]TASK [start mariadb] *********************************************************************************************************** changed: [10.220.5.138] changed: [10.220.5.139]PLAY RECAP ********************************************************************************************************************* 10.220.5.138 : ok=3 changed=1 unreachable=0 failed=0 10.220.5.139 : ok=3 changed=1 unreachable=0 failed=0

?

第四步:檢測劇本是否執行成功

[root@ken ~]# ansible all -m shell -a "ss -tnl| grep 3306" 10.220.5.139 | SUCCESS | rc=0 >> LISTEN 0 50 *:3306 *:* 10.220.5.138 | SUCCESS | rc=0 >> LISTEN 0 50 *:3306 *:*

?

轉載于:https://www.cnblogs.com/kenken2018/p/9982793.html

總結

以上是生活随笔為你收集整理的Ansible剧本介绍及使用演示(week5_day2)--技术流ken的全部內容,希望文章能夠幫你解決所遇到的問題。

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