天天看點

自動化運維工具-ansible入門(一)

自動化運維工具-ansible入門(一)

目錄

一、ansible簡介

1.1  ansible是什麼?

1.2 ansible特點

1.3 ansible 架構圖 

二、ansible任務執行

2.1 ansible任務執行模式

2. 2 ansible 執行流程

2.3 ansible 指令執行過程

三、ansible配置詳解

3.1 ansible 安裝方式

3.2  ansible程式結構

 3.3  ansible配置檔案

3.4 ansible 主機清單

四、ansible 常用指令

4.1 ansible 指令集

4.2 ansible-doc 指令

​五、 ansible 常用子產品

5.1 主機聯通行性測試

5.2 command子產品

 5.3 shell 子產品

 5.4 copy 子產品

 5.5 file子產品

 5.6 fetch子產品

 5.7 cron子產品

5.8 yum子產品

5.9 service 子產品

 5.10 user子產品

5.11 group 子產品

5.12 script 子產品

 5.13 setup 子產品

一、ansible簡介

1.1  ansible是什麼?

       ansible是自動化運維工具,基于Python開發,集合了衆多運維工具(puppet、chef、func、fabric)的優點,實作了批量系統配置、批量程式部署、批量運作指令等功能。

  ansible是基于 paramiko 開發的,并且基于子產品化工作,本身沒有批量部署的能力。真正具有批量部署的是ansible所運作的子產品,ansible隻是提供一種架構。ansible不需要在遠端主機上安裝client/agents,因為它們是基于ssh來和遠端主機通訊的。ansible目前已經已經被紅帽官方收購,是自動化運維工具中大家認可度最高的,并且上手容易,學習簡單。是每位運維工程師必須掌握的技能之一。

1.2 ansible特點

  • 部署簡單,隻需在主要端部署Ansible環境,被控端無需做任何操作;
  • 預設使用SSH協定對裝置進行管理;
  • 有大量正常運維操作子產品,可實作日常絕大部分操作;
  • 配置簡單、功能強大、擴充性強;
  • 支援API及自定義子產品,可通過Python輕松擴充;
  • 通過Playbooks來定制強大的配置、狀态管理;
  • 輕量級,無需在用戶端安裝agent,更新時,隻需在操作機上進行一次更新即可;
  • 提供一個功能強大、操作性強的Web管理界面和REST API接口——AWX平台。

1.3 ansible 架構圖 

自動化運維工具-ansible入門(一)

Ansible

:Ansible核心程式。

HostInventory

:記錄由Ansible管理的主機資訊,包括端口、密碼、ip等。

Playbooks

:“劇本”YAML格式檔案,多個任務定義在一個檔案中,定義主機需要調用哪些子產品來完成的功能。

CoreModules

:核心子產品,主要操作是通過調用核心子產品來完成管理任務。

CustomModules

:自定義子產品,完成核心子產品無法完成的功能,支援多種語言。

ConnectionPlugins

:連接配接插件,Ansible和Host通信使用

二、ansible任務執行

2.1 ansible任務執行模式

Ansible 系統由控制主機對被管節點的操作方式可分為兩類,即

adhoc

playbook

  • ad-hoc模式(點對點模式)

  使用單個子產品,支援批量執行單條指令。ad-hoc 指令是一種可以快速輸入的指令,而且不需要儲存起來的指令。就相當于bash中的一句話shell。

  • playbook模式(劇本模式)

  是Ansible主要管理方式,也是Ansible功能強大的關鍵所在。playbook通過多個task集合完成一類功能,如Web服務的安裝部署、資料庫伺服器的批量備份等。可以簡單地把playbook了解為通過組合多條ad-hoc操作的配置檔案。

2. 2 ansible 執行流程

自動化運維工具-ansible入門(一)

2.3 ansible 指令執行過程

  1. 加載自己的配置檔案,預設

    /etc/ansible/ansible.cfg

  2. 查找對應的主機配置檔案,找到要執行的主機或者組;
  3. 加載自己對應的子產品檔案,如 command;
  4. 通過ansible将子產品或指令生成對應的臨時py檔案(python腳本), 并将該檔案傳輸至遠端伺服器;
  5. 對應執行使用者的家目錄的

    .ansible/tmp/XXX/XXX.PY

    檔案;
  6. 給檔案 +x 執行權限;
  7. 執行并傳回結果;
  8. 删除臨時py檔案,

    sleep 0

    退出;(參考博友)

三、ansible配置詳解

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

也可以通過

ansible -h

來檢視幫助,下面我們列出一些比較常用的選項,并解釋其含義:

-a MODULE_ARGS

 #子產品的參數,如果執行預設COMMAND的子產品,即是指令參數,如: “date”,“pwd”等等

-k

--ask-pass

  #ask for SSH password。登入密碼,提示輸入SSH密碼而不是假設基于密鑰的驗證

--ask-su-pass 

 #ask for su password。su切換密碼

-K

--ask-sudo-pass

  #ask for sudo password。提示密碼使用sudo,sudo表示提權操作

--ask-vault-pass

      #ask for vault password。假設我們設定了加密的密碼,則用該選項進行通路

-B SECONDS     

 #背景運作逾時時間

-C          

 #模拟運作環境并進行預運作,可以進行查錯測試

-c CONNECTION

         #連接配接類型使用

-f FORKS

                  #并行任務數,預設為5

-i INVENTORY

          #指定主機清單的路徑,預設為

/etc/ansible/hosts

--list-hosts   

 #檢視有哪些主機組

-m MODULE_NAME

      #執行子產品的名字,預設使用 command 子產品,是以如果是隻執行單一指令可以不用 -m參數

-o

                       #壓縮輸出,嘗試将所有結果在一行輸出,一般針對收集工具使用

-S    

          #用 su 指令

-R SU_USER

        #指定 su 的使用者,預設為 root 使用者

-s

                      #用 sudo 指令

-U SUDO_USER 

#指定 sudo 到哪個使用者,預設為 root 使用者

-T TIMEOUT

       #指定 ssh 預設逾時時間,預設為10s,也可在配置檔案中修改

-u REMOTE_USER

 #遠端使用者,預設為 root 使用者

-v

                     #檢視詳細資訊,同時支援

-vvv

-vvvv

可檢視更詳細資訊

3.1 ansible 安裝方式

    ansible安裝常用兩種方式,

yum安裝

pip程式安裝

。下面我們來詳細介紹一下這兩種安裝方式。

使用pip(python包管理子產品)安裝

yum install python-pip
pip install ansible
           

使用 yum 安裝

需要先安裝一個

epel-release

包,然後再安裝我們的 ansible 即可

yum install epel-release -y
yum install ansible –y
           
自動化運維工具-ansible入門(一)

3.2  ansible程式結構

  • 配置檔案目錄:/etc/ansible
  • 執行檔案目錄:/usr/bin/ansible
  • lib依賴目錄:/usr/lib/python2.7/site-packages/ansible
  • man文檔目錄:/usr/share/ansible/
自動化運維工具-ansible入門(一)

 3.3  ansible配置檔案

       ansible 的配置檔案為

/etc/ansible/ansible.cfg

,ansible 有許多參數,下面我們列出一些常見的參數:

inventory = /etc/ansible/hosts	 ### 這個參數表示資源清單inventory檔案的位置
library = /usr/share/ansible    ### 指向存放Ansible子產品的目錄,支援多個目錄方式,隻要用冒号(:)隔開就可以
forks = 5		    ### 并發連接配接數,預設為5
sudo_user = root	### 設定預設執行指令的使用者
remote_port = 22    ### 指定連接配接被管節點的管理端口,預設為22端口,建議修改,能夠更加安全
host_key_checking = False	### 設定是否檢查SSH主機的密鑰,值為True/False。關閉後第一次連接配接不會提示配置執行個體
timeout = 60		### 設定SSH連接配接的逾時時間,機關為秒
log_path = /var/log/ansible.log ### 指定一個存儲ansible日志的檔案(預設不記錄日志)
           

3.4 ansible 主機清單

       在配置檔案中,資源清單就是我們的主機清單,裡面儲存的是一些 ansible 需要連接配接管理的主機清單。定義方式:

1、 直接指明主機位址或主機名:

## green.example.com#
# red.example.com#
# 192.168.30.1

2、 定義一個主機組[組名]把位址或主機名加進去

[mysql_test]
192.168.30.101
192.168.30.102
192.168.30.103
           

成員可以使用通配符來比對,這樣對于一些标準化的管理來說就很輕松友善

[webservers]
192.168.1.100
192.168.1.110
           

四、ansible 常用指令

4.1 ansible 指令集

/usr/bin/ansible

           #Ansibe AD-Hoc 臨時指令執行工具,常用于臨時指令的執行

/usr/bin/ansible-doc

    #Ansible 子產品功能檢視工具

/usr/bin/ansible-galaxy 

#下載下傳/上傳優秀代碼或Roles子產品 的官網平台,基于網絡的

/usr/bin/ansible-playbook

 #Ansible 定制自動化的任務集編排工具

/usr/bin/ansible-pull

     #Ansible遠端執行指令的工具,拉取配置而非推送配置(使用較少,海量機器時使用,對運維的架構能力要求較高)

/usr/bin/ansible-vault

  #Ansible 檔案加密工具

/usr/bin/ansible-console

 #Ansible基于Linux Consoble界面可與使用者互動的指令執行工具
自動化運維工具-ansible入門(一)

 其中,我們比較常用的是

/usr/bin/ansible

/usr/bin/ansible-playbook。

4.2 ansible-doc 指令

以mysql相關的為例:

自動化運維工具-ansible入門(一)
五、 ansible 常用子產品

5.1 主機聯通行性測試

cat /etc/ansible/hosts

[HDP]
offline-client
offline-dn01
offline-dn02
offline-dn03
           
自動化運維工具-ansible入門(一)

  主機是連通狀态的,接下來的操作才可以正常進行

5.2 command子產品

自動化運維工具-ansible入門(一)

 下面來看一看該子產品下常用的幾個指令:

chdir   # 在執行指令之前,先切換到該目錄

executable # 切換shell來執行指令,需要使用指令的絕對路徑

free_form   # 要執行的Linux指令,一般使用Ansible的-a參數代替。

creates    # 一個檔案名,當這個檔案存在,則該指令不執行,可以

用來做判斷

removes    # 一個檔案名,這個檔案不存在,則該指令不執行

自動化運維工具-ansible入門(一)

 5.3 shell 子產品

自動化運維工具-ansible入門(一)

 5.4 copy 子產品

這個子產品用于将檔案複制到遠端主機,同時支援給定内容生成檔案和修改權限等。

src

       #被複制到遠端主機的本地檔案。可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,則會遞歸複制,用法類似于"rsync"

content 

#用于替換"src",可以直接指定檔案的值

dest

    #必選項,将源檔案複制到的遠端主機的絕對路徑

backup

   #當檔案内容發生改變後,在覆寫之前把源檔案備份,備份檔案包含時間資訊

directory_mode #

遞歸設定目錄的權限,預設為系統預設權限

force

  #當目标主機包含該檔案,但内容不同時,設為"yes",表示強制覆寫;設為"no",表示目标主機的目标位置不存在該檔案才複制。預設為"yes"

others

  #所有的 file 子產品中的選項可以在這裡使用

(1)複制檔案 

自動化運維工具-ansible入門(一)

(2)給定内容生成檔案,并制定權限

[[email protected] ~]# ansible HDP -m copy -a 'content="I am kangll\n" dest=/hadoop/myName.txt mode=777'
offline-client | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "b7b7ee16ca008121c69aa0416d2b318f73d222bf",
    "dest": "/hadoop/myName.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "ddc4b1c5a9895b60f3c1f7eff37606f5",
    "mode": "0777",
    "owner": "root",
    "size": 12,
    "src": "/root/.ansible/tmp/ansible-tmp-1631591627.51-21887-181292678517542/source",
    "state": "file",
    "uid": 0
}
offline-dn03 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "b7b7ee16ca008121c69aa0416d2b318f73d222bf",
    "dest": "/hadoop/myName.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "ddc4b1c5a9895b60f3c1f7eff37606f5",
    "mode": "0777",
    "owner": "root",
    "size": 12,
    "src": "/root/.ansible/tmp/ansible-tmp-1631591627.57-21893-34496549961283/source",
    "state": "file",
    "uid": 0
}
offline-dn02 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "b7b7ee16ca008121c69aa0416d2b318f73d222bf",
    "dest": "/hadoop/myName.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "ddc4b1c5a9895b60f3c1f7eff37606f5",
    "mode": "0777",
    "owner": "root",
    "size": 12,
    "src": "/root/.ansible/tmp/ansible-tmp-1631591627.67-21891-125472058136384/source",
    "state": "file",
    "uid": 0
}
offline-dn01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "b7b7ee16ca008121c69aa0416d2b318f73d222bf",
    "dest": "/hadoop/myName.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "ddc4b1c5a9895b60f3c1f7eff37606f5",
    "mode": "0777",
    "owner": "root",
    "size": 12,
    "src": "/root/.ansible/tmp/ansible-tmp-1631591627.64-21889-8323396875906/source",
    "state": "file",
    "uid": 0
}
           

檢視一下我們生成的檔案及其權限: 

自動化運維工具-ansible入門(一)

 可以看出myName.txt檔案已經生成且權限為777.

(3)關于覆寫

檔案的内容修改一下,然後選擇覆寫備份:

[[email protected] ~]# ansible HDP -m copy -a 'content="Hello,I am kangll\n" backup=yes dest=/hadoop/myName.txt mode=666'
offline-client | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "backup_file": "/hadoop/[email protected]:42:12~",
    "changed": true,
    "checksum": "ed78e2b4215bf25ce8eb11f0443ebc223747a5db",
    "dest": "/hadoop/myName.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "7f876e6840c86874240a51d5a3cb905e",
    "mode": "0666",
    "owner": "root",
    "size": 18,
    "src": "/root/.ansible/tmp/ansible-tmp-1631598130.87-3011-132316580709752/source",
    "state": "file",
    "uid": 0
}
offline-dn03 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "backup_file": "/hadoop/[email protected]:42:13~",
    "changed": true,
    "checksum": "ed78e2b4215bf25ce8eb11f0443ebc223747a5db",
    "dest": "/hadoop/myName.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "7f876e6840c86874240a51d5a3cb905e",
    "mode": "0666",
    "owner": "root",
    "size": 18,
    "src": "/root/.ansible/tmp/ansible-tmp-1631598130.91-3018-240632585148430/source",
    "state": "file",
    "uid": 0
}
offline-dn02 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "backup_file": "/hadoop/[email protected]:42:13~",
    "changed": true,
    "checksum": "ed78e2b4215bf25ce8eb11f0443ebc223747a5db",
    "dest": "/hadoop/myName.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "7f876e6840c86874240a51d5a3cb905e",
    "mode": "0666",
    "owner": "root",
    "size": 18,
    "src": "/root/.ansible/tmp/ansible-tmp-1631598130.92-3016-58418194531731/source",
    "state": "file",
    "uid": 0
}
offline-dn01 | CHANGED => {
           

檢視一下:

自動化運維工具-ansible入門(一)

 源檔案已經被備份,我們還可以檢視一下

name

檔案的内容:

自動化運維工具-ansible入門(一)

 5.5 file子產品

該子產品主要用于設定檔案的屬性,比如建立檔案、建立連結檔案、删除檔案等。

下面是一些常見的指令:

force

  #需要在兩種情況下強制建立軟連結,一種是源檔案不存在,但之後會建立的情況下;另一種是目标軟連結已存在,需要先取消之前的軟鍊,然後建立新的軟鍊,有兩個選項:yes|no

group

  #定義檔案/目錄的屬組。後面可以加上

mode

:定義檔案/目錄的權限

owner

  #定義檔案/目錄的屬主。後面必須跟上

path

:定義檔案/目錄的路徑

recurse

  #遞歸設定檔案的屬性,隻對目錄有效,後面跟上

src

:被連結的源檔案路徑,隻應用于

state=link

的情況

dest

  #被連結到的路徑,隻應用于

state=link

的情況

state

  #狀态,有以下選項:

directory

:如果目錄不存在,就建立目錄

file

:即使檔案不存在,也不會被建立

link

:建立軟連結

hard

:建立硬連結

touch

:如果檔案不存在,則會建立一個新的檔案,如果檔案或目錄已存在,則更新其最後修改時間

absent

:删除目錄、檔案或者取消連結檔案

(1)建立目錄

自動化運維工具-ansible入門(一)

(2) 建立檔案連結

自動化運維工具-ansible入門(一)

 (3)删除檔案

自動化運維工具-ansible入門(一)

 5.6 fetch子產品

 該子產品用于從遠端某主機擷取(複制)檔案到本地。有兩個選項:

dest

:用來存放檔案的目錄

src

:在遠端拉取的檔案,并且必須是一個file,不能是目錄
[[email protected] kangll]# ansible HDP -m fetch -a 'src=/hadoop/kangll/myName.txt dest=/hadoop/kangll'
           

 注意,檔案儲存的路徑是我們設定的接收目錄下的

被管制主機ip

目錄下:

自動化運維工具-ansible入門(一)

 5.7 cron子產品

該子產品适用于管理

cron

計劃任務的,其使用的文法跟我們的

crontab

檔案中的文法一緻,同時,可以指定以下選項:

day=

 #日應該運作的工作( 1-31, *, */2, )

hour=

 # 小時 ( 0-23, *, */2, )

minute=

 #分鐘( 0-59, *, */2, )

month=

 # 月( 1-12, *, /2, )

weekday=

 # 周 ( 0-6 for Sunday-Saturday,, )

job=

 #指明運作的指令是什麼

name=

 #定時任務描述

reboot

 # 任務在重新開機時運作,不建議使用,建議使用special_time

special_time

 #特殊的時間範圍,參數:reboot(重新開機時),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小時)

state

 #指定狀态,present表示添加定時任務,也是預設設定,absent表示删除定時任務

user

 # 以哪個使用者的身份執行
### 建立定時任務
[[email protected] kangll]# ansible WEB -m cron -a 'name="mongoDB process monitor" minute=*/5 job="sh /hadoop/kangll/mongoDB_monitor.sh"'
offline-dn01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "envs": [],
    "jobs": [
        "mongoDB process monitor"
    ]
}
### 檢視定時任務是否建立成功
[[email protected] kangll]# ansible WEB -m shell -a 'crontab -l'
offline-dn01 | CHANGED | rc=0 >>
0 2 * * 0 /usr/hdp/share/hst/bin/hst-scheduled-capture.sh
0 * * * * /usr/hdp/share/hst/bin/hst-scheduled-capture.sh sync

#Ansible: mongoDB process monitor
*/5 * * * * sh /hadoop/kangll/mongoDB_monitor.sh
[[email protected] kangll]#
[[email protected] kangll]#
### 删除定時任務
[[email protected] kangll]# ansible WEB -m cron -a 'name="mongoDB process monitor" minute=*/5 job="sh /hadoop/kangll/mongoDB_monitor.sh" state=absent'                                   offline-dn01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "envs": [],
    "jobs": []
}
### 檢視定時任務是否删除
[[email protected] kangll]# ansible WEB -m shell -a 'crontab -l'
offline-dn01 | CHANGED | rc=0 >>
0 2 * * 0 /usr/hdp/share/hst/bin/hst-scheduled-capture.sh
0 * * * * /usr/hdp/share/hst/bin/hst-scheduled-capture.sh sync
[[email protected] kangll]#
           

5.8 yum子產品

用于軟體的安裝,其選項如下:

name=

    #所安裝的包的名稱

state=

  #

present

--->安裝, 

latest

--->安裝最新的, 

absent

---> 解除安裝軟體。

update_cache 

#強制更新yum的緩存

conf_file

  #指定遠端yum安裝時所依賴的配置檔案(安裝本地已有的包)。

disable_pgp_check 

#是否禁止GPG checking,隻用于

present

or 

latest

disablerepo

 #臨時禁止使用yum庫。 隻用于安裝或更新時。

enablerepo

  #臨時使用的yum庫。隻用于安裝或更新時。
自動化運維工具-ansible入門(一)

5.9 service 子產品

該子產品用于服務程式的管理。

arguments

 #指令行提供額外的參數

enabled

 #設定開機啟動。

name=

 #服務名稱

runlevel

 #開機啟動的級别,一般不用指定。

sleep

 #在重新開機服務的過程中,是否等待。如在服務關閉以後等待2秒再啟動。(定義在劇本中。)

state

 #有四種狀态,分别為:

started

--->啟動服務, 

stopped

--->停止服務, 

restarted

--->重新開機服務, 

reloaded

--->重載配置

### httpd 服務重新開機
[[email protected] ~]# ansible hdp -m service -a 'name=httpd state=restarted'
### httpd 服務停止
[[email protected] ~]# ansible hdp -m service -a 'name=httpd state=stopped'
           

 啟動httpd服務後,檢視服務狀态

自動化運維工具-ansible入門(一)

 5.10 user子產品

comment

   # 使用者的描述資訊

createhome 

# 是否建立家目錄

force

       # 在使用state=absent時, 行為與userdel –force一緻.

group

       # 指定基本組

groups

      # 指定附加組,如果指定為(groups=)表示删除所有組

home

          # 指定使用者家目錄

move_home

    # 如果設定為home=時, 試圖将使用者主目錄移動到指定的目錄

name

           # 指定使用者名

non_unique

   # 該選項允許改變非唯一的使用者ID值

password

    # 指定使用者密碼

remove

        # 在使用state=absent時, 行為是與userdel –remove一緻

shell

     # 指定預設shell

state

     # 設定帳号狀态,不指定為建立,指定值為absent表示删除

system

      # 當建立一個使用者,設定這個使用者是系統使用者。這個設定不能更改現有使用者

uid

         # 指定使用者的uid
### 添加kangll 使用者
[[email protected] ~]# ansible hdp -m user -a 'name=kangll uid=888888 comment="ops user"'
offline-client | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "comment": "ops user",
    "create_home": true,
    "group": 1016,
    "home": "/home/kangll",
    "name": "kangll",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 888888
}
offline-dn02 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "comment": "ops user",
    "create_home": true,
    "group": 1017,
    "home": "/home/kangll",
    "name": "kangll",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 888888
}
offline-dn01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "comment": "ops user",
    "create_home": true,
    "group": 1015,
    "home": "/home/kangll",
    "name": "kangll",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 888888
}
offline-dn03 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "comment": "ops user",
    "create_home": true,
    "group": 1017,
    "home": "/home/kangll",
    "name": "kangll",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 888888
}
### 檢視添加
[[email protected] ~]# ansible hdp -m shell -a 'cat /etc/passwd | grep kangll'
offline-client | CHANGED | rc=0 >>
kangll:x:888888:1016:ops user:/home/kangll:/bin/bash
offline-dn02 | CHANGED | rc=0 >>
kangll:x:888888:1017:ops user:/home/kangll:/bin/bash
offline-dn01 | CHANGED | rc=0 >>
kangll:x:888888:1015:ops user:/home/kangll:/bin/bash
offline-dn03 | CHANGED | rc=0 >>
kangll:x:888888:1017:ops user:/home/kangll:/bin/bash
### 删除kangll 使用者
[[email protected] ~]# ansible hdp -m user -a 'name=kangll uid=888888 state=absent'
           

5.11 group 子產品

該子產品主要用于添加或删除組,常用的選項如下:

gid=

  #設定組的GID号

name=

  #指定組的名稱

state=

  #指定組的狀态,預設為建立,設定值為

absent

為删除

system=

  #設定值為

yes

,表示建立為系統組
### 建立 kangll 組
[[email protected] ~]# ansible hdp -m group -a 'name=kangll gid=999999'
[[email protected] ~]#
### 檢視
[[email protected] ~]# ansible hdp -m shell -a 'cat /etc/group | grep kangll'
offline-client | CHANGED | rc=0 >>
kangll:x:999999:
offline-dn01 | CHANGED | rc=0 >>
kangll:x:999999:
offline-dn02 | CHANGED | rc=0 >>
kangll:x:999999:
offline-dn03 | CHANGED | rc=0 >>
kangll:x:999999:
           

5.12 script 子產品

該子產品直接指定腳本的路徑即可,通過例子來看一看到底如何使用的:

[[email protected] ~]# cat /hadoop/kangll/linux_monitor.sh
date >> /hadoop/kangll/free_total.log
free -h >> /hadoop/kangll/free_total.log
[[email protected] ~]#
### 本機腳本在被管理伺服器遠端執行
[[email protected] ~]# ansible hdp -m script -a '/hadoop/kangll/linux_monitor.sh'
           

檢視一下檔案内容:

自動化運維工具-ansible入門(一)

 5.13 setup 子產品

該子產品主要用于收集資訊,是通過調用facts元件來實作的。

  facts元件是Ansible用于采集被管機器裝置資訊的一個功能,我們可以使用setup子產品查機器的所有facts資訊,可以使用filter來檢視指定資訊。整個facts資訊被包裝在一個JSON格式的資料結構中,ansible_facts是最上層的值。

  facts就是變量,内建變量 。每個主機的各種資訊,cpu顆數、記憶體大小等。會存在facts中的某個變量中。調用後傳回很多對應主機的資訊,在後面的操作中可以根據不同的資訊來做不同的操作。如redhat系列用yum安裝,而debian系列用apt來安裝軟體。

自動化運維工具-ansible入門(一)

繼續閱讀