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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ansible高级应用示例

發(fā)布時間:2025/3/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ansible高级应用示例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Ansible 之 playbook使用
原創(chuàng)
ghbSunny
2017-12-04 10:07:21
評論(0)
910人閱讀

1 概述

Playbook組織格式是YAML格式,編排的是任務(wù)(task),用來記錄重復執(zhí)行的命令

YAML:YAML(/?j?m?l/,尾音類似camel駱駝)是一個可讀性高,用來表達數(shù)據(jù)序列的格式。YAML參考了其他多種語言,包括:C語言、Python、Perl,并從XML、電子郵件的數(shù)據(jù)格式(RFC 2822)中獲得靈感。Clark Evans在2001年首次發(fā)表了這種語言,另外Ingy d?t Net與Oren Ben-Kiki也是這語言的共同設(shè)計者。目前已經(jīng)有數(shù)種編程語言或腳本語言支持(或者說解析)這種語言。

YAML是"YAML Ain't a Markup Language"(YAML不是一種標記語言)的遞歸縮寫。在開發(fā)的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種標記語言),但為了強調(diào)這種語言以數(shù)據(jù)做為中心,而不是以標記語言為重點,而用反向縮略語重命名。

YAML的語法和其他高級語言類似,并且可以簡單表達清單、散列表,標量等數(shù)據(jù)形態(tài)。它使用空白符號縮進和大量依賴外觀的特色,特別適合用來表達或編輯數(shù)據(jù)結(jié)構(gòu)、各種配置文件、傾印除錯內(nèi)容、文件大綱(例如:許多電子郵件標題格式和YAML非常接近)。

基本數(shù)據(jù)結(jié)構(gòu):

標量、數(shù)組、關(guān)聯(lián)數(shù)組

表量:直接值

數(shù)組:用花括號組成的鍵值對

2 playbook的基礎(chǔ)組件

1)Hosts:運行指定任務(wù)的目標主機;

2)remoute_user: 在遠程主機上執(zhí)行任務(wù)的用戶;

sudo_user:

3)tasks:任務(wù)列表

模塊,模塊參數(shù);格式:(1) action: module arguments(2) module: arguments注意:shell和command模塊后面直接跟命令,而非key=value類的參數(shù)列表;(1) 某任務(wù)的狀態(tài)在運行后為changed時,可通過“notify”通知給相應(yīng)的handlers;(2) 任務(wù)可以通過"tags“打標簽,而后可在ansible-playbook命令上使用-t指定進行調(diào)用;

4)handlers:

任務(wù),在特定條件下觸發(fā);接收到其它任務(wù)的通知時被觸發(fā);notify: HANDLER TASK NAME

5)variables:

(1) facts:可直接調(diào)用;注意:可使用setup模塊直接獲取目標主機的facters;

例子

收集172.18.50.72內(nèi)置變量,通過setup模塊實現(xiàn)收集主機的變量

ansible 172.18.50.72 -m setup

(2) 用戶自定義變量:兩種設(shè)定的方式(a) ansible-playbook命令的命令行中的,-e可以重復使用

-e VARS, --extra-vars=VARS

(b) 在playbook中定義變量的方法:vars:- var1: value1- var2: value2

變量引用:{{ variable }},變量兩側(cè)有空格

(3) 通過roles傳遞變量;

(4) Host Inventory(a) 用戶自定義變量

(i) 向不同的主機傳遞不同的變量;

IP/HOSTNAME varaiable=value var2=value2

(ii) 向組中的主機傳遞相同的變量;

[groupname:vars]

variable=value

(b) invertory參數(shù)

用于定義ansible遠程連接目標主機時使用的參數(shù),而非傳遞給playbook的變量;

ansible_ssh_host

ansible_ssh_port

ansible_ssh_user

ansible_ssh_pass

3 運行playbook的方式

(1) 測試

ansible-playbook --check

只檢測可能會發(fā)生的改變,但不真正執(zhí)行操作;

ansible-playbook --list-hosts

例子

ansible-playbook --list-hosts installpkg.yml

列出運行任務(wù)的主機;

ansible-playbook --syntax-check

檢查語法,沒有輸出表示沒有語法錯誤

ansible-playbook --syntax-check installpkg.yml

(2) 運行

ansible-playbook 腳本

例子:

1

ansible-playbook installpkg.yml

4 例子

例一:編寫一個yaml文檔,用來安裝redis和ngnix服務(wù),并啟動相關(guān)服務(wù)

注意,語法里有橫線用來引導,區(qū)分不同的功能的語句,如下面語句有多個hosts,因此在hosts前加橫桿,tasks有多個,用橫桿區(qū)分每個tasks,而且縮進是有要求的,同一層級,一般縮進一樣。注意橫桿和冒號后有空格。
vim installpkg.yaml

  • hosts: websrvs
    remote_user: root
    tasks:
    • name: install nginx package
      yum: name=nginx state=latest
    • name: start nginx service
      service: name=nginx enabled=true state=started
  • hosts: dbsrvs
    remote_user: root
    tasks:
    • name: install redis package
      yum: name=redis state=latest
    • name: install conf file
      copy: src=/root/redis.conf dest=/etc/redis.conf owner=redis group=root mode=644
    • name: start redis service
      service: name=redis state=started

準備redis的配置模板

更改redis配置模板監(jiān)聽端口為0.0.0.0 和 端口為6380
1
2
3
4

vim redis.conf
vim /root/redis.conf
bind 0.0.0.0
port 6380

查看playbook里的主機
1

ansible-playbook --list-hosts installpkg.yml

查看playbook里的tasks
1

ansible-playbook --list-tasks installpkg.yml

測試執(zhí)行腳本,添加選項-C,并沒有實際執(zhí)行
ansible-playbook -C installpkg.yml

以上腳本,測試正常的話,就去掉-C選項,實際執(zhí)行

ansible-playbook installpkg.yml

例二:handler的使用

條件式觸發(fā):handler,滿足條件的時候觸發(fā)條件

handlers:處理器,配置文件被修改的時候才執(zhí)行,條件定義在notify

以下命令,表示當配置文件被更改的時候,notify就會觸發(fā)handler,實現(xiàn)重啟的操作.注意格式的書寫。
vim /root/ansible/handler.yml

  • hosts: websrvs
    remote_user: root
    tasks:
    • name: install nginx package
      yum: name=nginx state=latest
    • name: start nginx service
      service: name=nginx enabled=true state=started
  • hosts: dbsrvs
    remote_user: root
    tasks:
    • name: install redis package
      yum: name=redis state=latest
    • name: install conf file
      copy: src=/root/redis.conf dest=/etc/redis.conf owner=redis group=root mode=644
      tags: instconf
      notify: restart redis service
    • name: start redis service
      service: name=redis state=started
      handlers:
    • name: restart redis service
      service: name=redis state=restarted

例三:tag的使用

更改websrvs的配置內(nèi)容,設(shè)置tag為instnginx
vim /root/ansible/installpkg.yml

  • hosts: websrvs
    remote_user: root
    tasks:
    • name: install nginx package
      yum: name=nginx state=latest
      tags: instnginx
    • name: start nginx service
      service: name=nginx enabled=true state=started
  • hosts: dbsrvs
    remote_user: root
    tasks:
    • name: install redis package
      yum: name=redis state=latest
    • name: install conf file
      copy: src=/root/redis.conf dest=/etc/redis.conf owner=redis group=root mode=644
      tags: instconf
      notify: restart redis service
    • name: start redis service
      service: name=redis state=started
      handlers:
    • name: restart redis service
      service: name=redis state=restarted

查看任務(wù),會顯示對應(yīng)的標簽
ansible-playbook --list-tasks installpkg.yml

指定標簽,可以重新跑指定的標簽命令,如他部分的命令不執(zhí)行,如這里指定tag為instnginx,則只安裝nginx包,但是不啟動服務(wù),其他部分的命令不會執(zhí)行

ansible-playbook -t instnginx installpkg.yml

同時跑多個標簽,多個任務(wù)可以指定同一標簽,比較靈活 。如以下配置中,把安裝不同的服務(wù)包的tag都設(shè)置為instpkg,同時設(shè)置了 復制dbsrvs組的配置文件,設(shè)備復制文件的tag為instconf,同時執(zhí)行多個tag間用逗號隔開
vim /root/ansible/installpkg.yml

  • hosts: websrvs
    remote_user: root
    tasks:
    • name: install nginx package
      yum: name=nginx state=latest
      tags: instpkg
    • name: start nginx service
      service: name=nginx enabled=true state=started
  • hosts: dbsrvs
    remote_user: root
    tasks:
    • name: install redis package
      yum: name=redis state=latest
      tags: instpkg
    • name: install conf file
      copy: src=/root/redis.conf dest=/etc/redis.conf owner=redis group=root mode=644
      tags: instconf
      notify: restart redis service
    • name: start redis service
      service: name=redis state=started
      handlers:
    • name: restart redis service
      service: name=redis state=restarted

執(zhí)行如下
1

ansible-playbook -t instpkg,instconf installpkg.yaml

結(jié)果是websrvs組只安裝nginx,但是沒有啟動nginx服務(wù),同時dbsrvs安裝了redis包而且復制了配置文件到對應(yīng)的主機,而且在install conf file任務(wù)中配置了notify任務(wù),所以dbsrvs組的redis服務(wù)會被啟動

例四:變量的使用

通過變量pkgname安裝相關(guān)的包
vim installvar.yml

  • hosts: websrvs
    remote_user: root
    vars:
    • pkgname: tree
      tasks:
    • name: install package
      yum: name={{ pkgname }} state=latest

運行腳本,不指定變量默認是安裝tree
ansible-playbook installvar.yml

指定變量,playbook命令行里定義的變量優(yōu)先級比腳本里高, 這里會安裝memcached,而不是腳本里的tree
ansible-playbook -e "pkgname=memcached" installvar.yaml

直接在host里定義變量,但是這個變量級別很低,比腳本里的變量還低
vim /etc/ansible/hosts
[websrvs]
172.18.50.72 pkgname=redis
172.18.50.75 pkgname=memcached
vim /root/ansible/installvar.yml

  • hosts: websrvs
    remote_user: root
    vars:
    • pkgname: tree
      tasks:
    • name: install package
      yum: name={{ pkgname }} state=latest

執(zhí)行命令
ansible-playbook installvar.yaml

則websrvs安裝的服務(wù)包是tree,而不是/etc/ansible/hosts里賦值的變量

去掉腳本里的變量
vim /root/ansible/installvar.yaml

  • hosts: websrvs
    remote_user: root
    tasks:
    • name: install package
      yum: name={{ pkgname }} state=latest

重新執(zhí)行
ansible-playbook installvar.yml

則72主機安裝服務(wù)包redis,75主機安裝memcached

例五:在配置文件里傳遞參數(shù)
vim /etc/ansible/hosts
[websrvs]
172.18.50.72 pkgname=redis ansible_ssh_user=root ansible_ssh_pass=Pass123456
172.18.50.75 pkgname=memcached

轉(zhuǎn)載于:https://blog.51cto.com/jingfeng/2108676

總結(jié)

以上是生活随笔為你收集整理的ansible高级应用示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。