【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

本文是馬哥教育特約金牌講師、Linux運維專家魏巍的分享《Anisble常用模塊入門指南》的文字整理篇。

朋友們晚上好:

今天我為大家帶來的分享是

Ansible系列課堂之基礎入門-基礎模塊的使用

難度指數: 2星(滿星5星)

技術指數: 5星(滿星5星)

理論指數: 2星(滿星5星)

面向人群: 自動化運維&初中級運維

簡單做下自我介紹:

魏巍: 出生時經醫生證實為90后超早期,狂熱的單車與開源愛好者,6年Linux一線運維經驗,《Ansible權威指南》一書聯合作者,做事情常出于“我不懂所以我想知道”的好奇心,在運維界界頗負“魏巍是誰啊沒聽說過”的盛名。

簡介

 

眾所周知,ansible是自動化運維神器

可以方便的實現大批量定制任務

首先,我們來了解一下ansible的整體架構

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

接下來,我們對上圖中ansible的核心組件進行簡單的解析

  • Ansible core :?即ansible軟件本身

  • Host ivnetory :?主機池,定義可以由ansible來管理的主機

  • Core modules :?核心模塊,即ansible處自帶的模塊,可完成大部分任務

  • Custom modules :?用戶自己編寫定制的模塊,實現特定功能

  • Playbook :?用于定義多個任務在一個文件中,可多次使用

  • Connection plugin :?用來連接第一個被管理主機,實現一些輔助功能

第一條ansible命令

 

今天我們將借助一些ansible基礎命令來初步了解一下Host inventory,深入學習幾個常用的Core module

我們來看一條簡單的ansible命令:

ansible datanodes -mcommand -a “uptime”

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

下面我們對其基本命令格式進行解析

adnsible的基本使用格式,如下:

ansible <host-pattern> [-f forks] [-mmodule_name] [-a args]

  • -f forks:?啟動的并發線程數

  • -m module_name:?要使用的模塊

  • -a args:?模塊所需的參數

主機池

 

# ansible datanodes -mcommand -a uptime?中,

datanodes即所謂的host-pattern

定義在/etc/ansible/hosts文件中,格式如下:

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

(主機列表可以為域名,也可為IP地址)

data[4:6]為data4,data5,data6的簡寫形式

只有在/etc/ansible/hosts中定義過的主機,才能被ansible管理

主機變量

 

可以在inventory中定義主機時為其添加主機變量以便于在playbook中使用。例如:

[webservers]

www1.magedu.com http_port=80maxRequestsPerChild=100

www2.magedu.com http_port=8080maxRequestsPerChild=200

需要注意的是這些變量只能在playbook中使用

組變量

 

組變量是指賦予給指定組內所有主機上的在playboo中可用的變量。例如:

[webservers]

www1.magedu.com

www2.magedu.com

共享如下變量:

[webservers:vars]

ntp_server=ntp.magedu.com

nfs_server=nfs.magedu.com

如此,ntp_server和nfs_server兩個變量,便可被webservers組內所有主機共享

主機池

 

Ansible默認使用root用戶,通過ssh對各主機進行管理

建議使用ssh密鑰免密碼認證來連接各主機

但也可以全用指定用戶和密碼,可直接在ansible hosts文件中指定:

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

ssh相關的參數如下:

ansible_ssh_host

指定域名對應的IP地址

ansible_ssh_port

指定ssh連接端口號

ansible_ssh_user

指定ssh默認使用哪個用戶進行管理

ansible_ssh_pass

ssh連接所用的密碼 (這非常不安全,強烈建議全用ssh密鑰認證或交互式輸入密碼 –ask-pass )

ansible_sudo_pass

?指定sudo的密碼 (這非常不安全,強烈建議全用ssh密鑰認證或交互式輸入密碼 –ask-pass)

簡單明了,不是嗎?

關于主機池的應用,先說這么多

下面我們深入介紹一下幾個常用的核心模塊

常用模塊

 

Ansible?默認使用command模塊,所以

#ansible –m commanddatanodes -a uptime

可以簡寫為: #ansible datanodes -a uptime

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

如圖所示:

執行命令成功,返回結果為綠色

獲取幫助

 

Anbible的模塊那么多,我該如何獲取各模塊的信息和幫助呢?

Ansible為我們提供了ansible-doc命令

基本用法為:

ansible-doc [-Mmodule_path] [-l] [-s] [module…]

-M?文件路徑, –moudle-path=文件路徑

指定額外目錄來尋找模塊所需的庫文件

-s, –snipet=

產生一段可以應用playbook中內容,類似于一種任務模板

-l, –list=

顯示簡潔的模塊列表和一些簡單的注釋

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

如圖所示,ansible-doc會顯示兩列信息

左側為模塊名,右側為模塊簡介

左右一一對應

簡單明了

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

以group模塊為例

 

# ansible-doc -s group

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

group部共四個參數

  • gid:?指定所建組的ID,可選

  • name:?指定組名

  • state:?設定組的狀態,默認為present,設置為absent時,表示刪除該組

  • system:?值為yes時,表示該組將會被創建為系統組

(注意:group模塊需要依賴系統命令:groupadd,groupdel,groupmod)

如此,我們在各datanode結點上分別創建gid為501的組

#ansible datanodes -m group -a ‘name=developer’

data2| success >> {

??? “changed”: true,

??? “gid”: 501,

??? “name”: “developer”,

??? “state”: “present”,

??? “system”: false

}

data3| success >> {

??? “changed”: true,

??? “gid”: 501,

??? “name”: “developer”,

??? “state”: “present”,

??? “system”: false

}

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

刪除developer組操作

?? # ansible datanodes -m group -a’name=developer state=absent’

data4 | success>> {

??? “changed”: true,

??? “name”: “developer”,

??? “state”: “absent”

}

data3 | success>> {

??? “changed”: true,

??? “name”: “developer”,

??? “state”: “absent”

}

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

user模塊

 

ansible-doc user

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

user模塊常用的參數有:??

  • name:?指定所建用戶的用戶名

  • group:?指定所建用戶的主組,可選

  • groups:?指定所建用戶的附加組,如果設置為空(’groups=’),則清空所有附加組信息

  • shell:?指定使用哪種shell

  • uid:?指定用戶的ID

  • state:?設定帳號狀態,當值為absent時,將會刪除指定用戶

一個直觀的例子:

ansible all –m user –a‘name=dev uid=666 group=developer’

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

我們看到,uid和group均為我們設置的值

group顯示的是gid,gid501即為我們剛才新建的組ID

狀態值state為present

當我們需要刪除用戶時,使用state設為absent就可以了,如:

ansible all –m user –a‘name=dev uid=666 group=developer state=absent’

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

copy模塊

 

顧名思義,copy模塊是用來遠程傳輸文件的

常用參數如下:

  • src:?指定本地源文件路徑,絕對路徑或相對路徑都可以,如果路徑指向一個目錄,則會把目錄下所有文件全部復制

  • dest:遠程主機的上文件存放路徑,必做使用絕對路徑

  • content:?直接在命令中指定文件內容,使用該內容在遠程主機上生成文件

  • backup:?是否備份目標文件,默認為no

  • owner:?指定文件屬主

  • group:?指定文件屬組

  • mode:?指定文件權限,如640

一個簡單的例子

我們要把本地文件/etc/issue復制到遠程主機/tmp/目錄下

屬主為:zabbix用戶

同時,還要求只有屬主對該文件有讀寫權限

ansible datanodes -m copy -a ‘src=/etc/issuedest=/tmp/issue.ansible mode=600 owner=zabbix’

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

content?參數的用法

比如,我們傳送一段內容

“hello world

how are you ?”?到遠程主機上的文件/tmp/content.ansible,操作如下:

# ansible datanodes -m copy -a’content=”hello world!\n how are you? \n”dest=”/tmp/content.ansible”‘

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

# ssh data3 “cat /tmp/content.ansible”

hello world!

?how areyou?

content可以對\n進行轉義

是不是很棒?!~

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

定時任務管理模塊:cron??

批量管理定時任務

cron模塊下的參數:day,hour,minute,month,weekday與系統crontab中的值一一對應

默認值都是*

  • jod:指定要定期執行的任務

  • name:?給任務一個簡單的名字或注釋,必選

  • state:?設定任務狀態,absent表示刪除該定時任務

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

為了演示效果

要求第分鐘ping 一個www.baidu.com

# ansible data1 -m cron -a ‘name=”pingtest” minute=”*/1″ job=”ping www.baidu.com” ‘

data1 | success >> {

???“changed”: true,

???“jobs”: [

???????“ping test”

??? ]

}

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

注意:

?? name變量是必須指定的

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

刪除某個job時,使用state參數:

state=absent

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

shell模塊:在遠程主機上執行命令

類似command模塊

但是稍有不同,功能更為強大

比如,使用command中要使用管道符“|”

報出一系列的錯誤

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

使后shell模塊后

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

順利執行

所以,當命令中需要用到管道符時,一定要使用shell模塊替代command模塊

最后,給初學都一個最容易上手的模塊
ping模塊

Ping?模塊用于檢測主機的網絡連通性

正常通信的主機,會返回一個pong信號

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門


————廣告時間————

《馬哥Linux云計算及架構師》課程,由知名Linux布道師馬哥創立,經歷了8年的發展,聯合阿里巴巴、唯品會、大眾點評、騰訊、陸金所等大型互聯網一線公司的馬哥課程團隊的工程師進行深度定制開發,課程采用 Centos7.2系統教學,加入了大量實戰案例,授課案例均來自于一線的技術案例。

開課時間:11月06號

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門掃描二維碼和更多小伙伴組團學習【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

【大咖講堂-173期】 十五分鐘實現Ansible常用模塊入門

相關新聞

聯系我們

400-080-6560

在線咨詢:點擊這里給我發消息

郵件:[email protected]

工作時間:周一至周日,09:00-18:30

QR code
云南快乐10分开奖直播