Ansible簡明使用手冊

        Ansible使用簡明手冊

1簡介python

 

ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppetcfenginecheffuncfabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:nginx

 

(1)、鏈接插件connection plugins:負責和被監控端實現通訊;shell

 

(2)host inventory:指定操做的主機,是一個配置文件裏面定義監控的主機;bash

 

(3)、各類模塊核心模塊、command模塊、自定義模塊;服務器

 

(4)、藉助於插件完成記錄日誌郵件等功能;框架

 

(5)playbook:劇本執行多個任務時,非必需可讓節點一次性運行多個任務。運維

 

2特性ssh

(1)no agents:不須要在被管控主機上安裝任何客戶端;async

(2)no server:無服務器端,使用時直接運行命令便可;工具

(3)modules in any languages:基於模塊工做,可以使用任意語言開發模塊;

(4)yamlnot code:使用yaml語言定製劇本playbook

(5)ssh by default:基於SSH工做;

(6)strong multi-tier solution:可實現多級指揮。

 

3Ansible配置

 

目前ansible安裝在虛擬機上,地址爲20.0.9.40 密碼111111

 

Ansible操做路徑爲/etc/ansible/playbooks

(1) SSH免密鑰登陸設置

## 生成公鑰/私鑰

# ssh-keygen -t rsa -P ''

## 寫入信任文件(將/root/.ssh/id_rsa_storm1.pub分發到其餘服務器,並在全部服務器上執行以下指令):

# cat /root/.ssh/id_rsa_storm1.pub >> /root/.ssh/authorized_keys

# chmod 600 /root/.ssh/authorized_keys公鑰重定向追加到authorized_keys中,內容以下: 

## 主機組定義

 

(2) 配置主機 /etc/ansible/playbooks/hosts

 

配置完主機組以後,能夠使用ansible giotest –m ping, 測試是否配置成功。

主機組配置方法:

顯示pong證實配置成功能夠鏈接到節點

使用[]定義主機組名使用ansible_ssh_host定義須要部署的節點地址

方括號[]中是組名,用於對系統進行分類,便於對不一樣系統進行個別的管理

 

一個組做爲另外一個組的成員

能夠把一個組做爲另外一個組的子成員,以及分配變量給整個組使用. 這些變量能夠給 /usr/bin/ansible-playbook 使用,但不能給 /usr/bin/ansible 使用:

[atlanta]

host1

host2

 

[raleigh]

host2

host3

 

[southeast:children]

atlanta

raleigh

 

4、經常使用模塊簡介

 

目前ansible安裝在虛擬機上,地址爲20.0.9.40 密碼111111

 

目錄結構

[root@root ~]# cd  /etc/ansible/playbooks

[root@root playbooks]# ls

bio  common  file  gio  sn  vars  vio

 

common/ 目錄爲配置部署的公共目錄lustre的主要裝機流程。

bio/  bio節點配置部署的目錄

gio/  gio節點配置部署的目錄

sn/   sn 節點配置部署的目錄

file/  爲配置部署的主要配置文件目錄

vio/  vio節點配置部署的目錄

 

 

使用ansiblegio節點安裝IBA驅動yml文件目錄/etc/ansible/playbooks/common

ansible-playbook  install_IBA.yml  --extra-vars  「hosts=gio」

 

使用ansiblegio節點安裝rdacyml文件在目錄/etc/ansible/playbooks/common

ansible-playbook  install  install_rdac.yml  --extra-vars  「hosts=gio」

 

ansible-playbook ansible劇本的執行命令,後面跟須要執行的yml文件 --extra-vars定義須要執行的主機組

查看ansible的全部模塊
#ansible-doc -l

查看模塊命令的具體使用方法
#ansible-doc -s user(添加模塊名)

查看遠程主機登錄信息
#ansible giotest -m command -a "uptime"

file模塊容許更改用戶及權限
ansible giotest -m file -a "dest=/srv/foo/a.txt mode=600"

使用file模塊建立目錄,相似於mkdir -p
ansible giotest -m file -a "dest=/path/to/c mode=755 owner=root group=root state=directory"

使用file模塊刪除文件或者目錄
ansible giotest -m file -a "dest=/path/to/c state=absent"

查看遠程主機的一些基本信息
#ansible giotest -m setup

測試遠程主機的運行狀態
#ansible giotest -m ping

查看遠程主機的特定進程也可將shell換成raw
#ansible storm_cluster -m shell -a "ps -ef | grep httpd"
#ansible storm_cluster -m raw -a "pa -ef | grep httpd"

遠程文件信息查看
#ansible storm_cluster -m command -a "ls -al /tmp/a.txt"

在遠程主機建立目錄
#ansible storm_cluster -m file -a "path=/tmp/test.txt state=directory"

遠程文件符號連接刪除
#ansible storm_cluster -m file -a "path=/tmp/a.txt state=absent"

將本地文件「/etc/ansible/ansible.cfg」複製到遠程服務器
#ansible storm_cluster -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"

重啓主機組的全部主機,每次重啓10臺
#ansible storm_cluster -a "/sbin/reboot/" -f 10

使用shell模塊在遠程主機執行命令
#ansible storm_cluster -m shell -a "echo $TERM"

file模塊容許更改文件的用戶及權限
#ansible storm_cluster -m file -a "dest=/tmp/test.sh mode=600 "

建立一個新的用戶,查看並刪除
#ansible storm_cluster -m command -a "useradd -s /sbin/nologin -M user1"
#ansible storm_cluster -m command -a "id user1"
#ansible storm_cluster -m command -a "userdel user1"

後臺執行命令的最大時間是1800s即30分鐘,-p每60s檢查下狀態默認15s
ansible all -B 1800 -p 60 -a "/usr/bin/long_running_operation --do-stuff"

蒐集網卡信息
ansible all -m setup -a "filter=ansible_eth[0-2]"

=====================================================================

管理軟件包
config_file:yum的配置文件
disable_gpg_check:關閉gpg_check

確保rpm包已經安裝,但不更新
#ansible storm_cluster -m yum -a "name=python state=present"

確保安裝包到一個特定的版本
#ansible storm_cluster -m yum -a "name=python-2.7 state=present"

確保一個軟件包是最新版本
#ansible storm_cluster -m yum -a "name=python state=latest"

確保一個軟件包沒有被安裝
#ansible storm_cluster -m yum -a "name=python state=absent"

安裝httpd,啓動,並檢查進程
#ansible storm_cluster -m yum -a "name=httpd state=installed"
#ansible storm_cluster -m service -a "name=httpd state=started"
#ansible storm_cluster -m shell -a "ps -ef |grep httpd"

======================================================================

服務管理
確保storm_cluster組全部主機的httpd是啓動的
ansible storm_cluster -m service -a "name=httpd state=started"

重啓storm_cluster組全部主機的httpd服務
ansible storm_cluster -m service -a "name=httpd state=restarted"

確保storm_cluster組全部主機的httpd是關閉的
ansible storm_cluster -m service -a "name=httpd state=stopped"

啓動storm_cluster組全部主機的nginx服務,確保開機時啓動
ansible storm_cluster -m service -a "name=nginx state=started enabled=yes"

=====================================================================

蒐集系統信息
搜索主機的全部信息
#ansible all -m setup

蒐集和內存相關的信息
#ansible all -m setup -a "filter=ansible_*_mb"

===============================================================================

後臺運行
長時間運行的操做能夠放到後臺執行,ansible會檢查任務的狀態,在主機執行的同一個任務會分配同一個job ID
後臺執行命令3600s,-B表示後臺執行的時間
#ansible all -B 3600 -a "/usr/bin/long_running_operation --do-stuff"

檢查任務的狀態
ansible all -m async_status -a "jid=123456789"

===============================================================================

File設置文件的屬性
相關選項以下:
force:須要在兩種狀況下強制建立軟鏈接,一種是源文件不存在,但以後會創立的狀況下;另外一種是目標軟鏈接已存在,須要先取消以前的軟鏈,有兩個選項:yes|no.

group:定義文件/目錄的屬性

mode:定義文件/目錄的權限

owner:定義文件/目錄的屬性

path:必選項,定義文件/目錄的路徑

recurse:遞歸設置文件的屬性,只對目錄有效

src:被連接的源文件路徑,只應用於state=link的狀況

dest:被連接到的路徑,只應用於state=link的狀況

directory:若是目錄不存在,就建立目錄

touch:若是文件不存在,則會建立一個新的文件,若是文件或目錄已經存在,則更新其最後修改時間

absent:刪除目錄、文件或者取消鏈接文件

將服務器文件拷貝到不一樣的主機組(playbooks)


=========================================================================

User管理用戶
home: uid: name: system: state:
group: password: createhome: remove: shell:
建立一個用戶,並設置
#ansible storm_cluster -m user -a "createhome=yes home=/home/user1 password=123456 name=user2 state=present shell=/bin/bash"

==========================================================================

Mount配置掛載點
fstype:必選項,掛載文件的類型
name:必選項,掛載點
opts:傳遞給mount命令的參數

===========================================================================

Copy 複製文件到遠程主機
backup:在覆蓋以前,將源文件備份,備份文件包含時間信息。有兩個選項yes|no

content:用於代替「src」,能夠直接設定指定文件的值

dest:必選項,要將源文件複製到遠程主機的絕對路徑,若是源文件是一個目錄,那麼該路徑也必須是一個目錄

directory_mode:遞歸設置目錄的權限,默認爲系統默認權限

force:若是目標主機包含該文件,但內容不一樣,若是設置爲yes,則強制覆蓋,若是爲no,則只有當前目標主機的目標位置不存在該文件夾時,才複製,默認爲yes

others:全部的File模塊裏的選項均可以在這裏使用

src:被複制到遠程主機的本地文件,能夠是絕對路徑,也能夠是相對路徑,若是路徑是一個目錄,它將遞歸複製,在這種狀況下,若是路徑使用「/」來結尾,則只複製目錄裏的內容,若是沒有使用「/」來結尾,則包含在內的整個內容所有複製。

===============================================================================

Command 在遠程主機上執行命令
create:一個文件名,當該文件存在,則該命令不執行

free_form:要執行的Linux指令

chdir:在執行命令以前,先切換到該目錄

removes:一個文件名,當該文件不存在,則該選項不執行

executeble:切換shell來執行命令,該執行路徑必須是一個絕對路徑

shell 切換到某個shell執行指定的指令
參數與command相同,與command不一樣的是,此模塊能夠支持命令管道,同時還有另外一個模塊也具有此功能:raw

===============================================================================

Cron用於管理計劃任務
backup:對遠程主機上的原任務計劃內容修改以前作備份

cron_file:若是指定該選項,則用該文件替換遠程主機上的cron.d目錄下的任務計劃。

job:要執行的任務,依賴於state=present

special_time:指定何時執行,參數:reboot,yearly,monthly,weekly,daily,hourly

state:確認該任務計劃是建立仍是刪除

user:肯定任務的執行者

天天兩點的時候以root的身份重啓主機組,取消定時任務直接添加 state=absent
#ansible storm_cluster -m cron -a '"name=root system" hour=2 user=root job="/sbin/reboot"'

查看主機組crontab的任務
#ansible storm_cluster -m command -a "crontab -l"

每隔兩分鐘的時候查看主機組的home目錄
#ansible storm_cluster -m cron -a 'name="check the home directory" minute=*/3 job="ls -lh /home"'

每次重啓的時候echo出reboot
#ansible storm_cluster -m cron -a 'name="reboot" special_time=reboot job="echo reboot"'

天天12點檢查主機組指定目錄
#ansible storm_cluster -m cron -a 'name="check dirs" hour="12" job="ls -alh > /dev/null"'

===============================================================================

Filesystem在塊設備上建立文件系統
dev:目標塊設備

force:在一個已有文件系統的設備上強制建立

fstype:文件系統的類型

opts:傳遞給mkfs的選項

===============================================================================

playbooks詳解
playbooks是ansible管理配置、部署應用和編排的語言,可使用playbooks來描述你想在遠程主機執行的策略或者執行的一組步驟過程等。若是說ansible模塊是工做中的工具的話,那麼playbooks就是方案。

Playbooks組成

Target section
定義將要執行playbook的遠程主機組

Variable section
定義playbook運行時須要使用的變量

Task section
定義將要在遠程主機上執行的任務列表

Handler section
定義task執行完成之後須要調用的任務

 

 

相關文章
相關標籤/搜索