Ansible簡單介紹及基本使用

Ansible

隨着運維自動化經歷了從本地部署到基礎設施即服務(IaaS)、平臺即服務(PaaS)在到軟件即服務(SaaS)的發展階段,掌握多種自動化運維工具就成了運維人員必備技能之一,ansible就是目前國內使用比較廣泛的自動化運維工具之一。

工具介紹

簡介

ansible是基於SSH協議的自動化運維工具,使用Python開發的,使用起來靈活、簡單。

可以非常方便的實現批量系統配置、批量程序部署、批量運行命令等操作。

特性

模塊化:

調用特定的模塊,完成特定任務
有Paramiko,PyYAML,Jinja2(模板語言)三個關機模塊
支持自定義模塊
基於Python語言實現
部署簡單,基於python和SSH(默認已安裝),agentless
安全,基於OpenSSH
支持playbook編排任務

冪等性

一個任務執行1遍和執行n遍效果一樣,不因重複執行帶來意外情況
無需代理不依賴PKI(無需ssl)
可使用任何編程語言寫模塊
YAML格式,編排任務,支持豐富的數據結構
較強大的多層解決方案

主要組成部分

  • API:供第三方程序調用的應用程序編程接口
  • Inventory:Ansible管理主機清單,存放在/etc/ansible/hosts
  • Modules:模塊,Ansible執行命令的功能的模塊,多個命令的組合
  • Playbook:劇本,多個模塊的組合,編排定義Ansible任務集的配置文件,由Ansible順序依次執行,通常是JSON格式的YML文件
  • Plugins:模塊功能的補充,如連接類型的插件、循環插件、變量插件、過濾插件等,該功能不常用
  • Ansible:組合Inventory、API、Modules、Plugins的綠框,可以理解爲是ansible命令工具,其爲核心執行工具

相關文件

/etc/ansible/ansible.cfg    主配置文件,配置ansible工作特性
/etc/ansible/hosts          主機清單文件
/etc/ansible/rules          角色目錄

程序:

/usr/bin/ansible            主程序,臨時命令執行工具
/usr/bin/ansible-doc        查看配置文檔,模塊功能查看工具
/usr/bin/ansible-galaxy     下載/上傳優秀代碼或Roles模塊的官網平臺
/usr/bin/ansible-playbook   定製自動化任務,編排劇本工具/usr/bin/ansible-pull 

遠程執行命令的工具:

/usr/bin/ansible-vault      文件加密工具
/usr/bin/ansible-console    基於Console界面與用戶交互的執行工具

/etc/ansible/ansible.cfg ansible

配置文件(一般保持默認)

[defaults]
#forks               = 5        併發執行數量,默認5
#poll_interval = 15             拉取數據間隔時間,默認15秒
#sudo_user     = root           sudo命令默認用戶
#remote_port = 22               連接遠程端口號
#host_key_checking = False      檢查對應服務器的host_key,##建議取消註釋
#log_path=/var/log/ansible.log  日誌文件,##建議取消註釋

ansible 命令介紹

功能:通過ssh實現配置管理、應用部署、任務執行等功能

建議:配置ansible端能基於密鑰認證的方式聯繫各被管理節點

格式:ansible <host-pattern> [-m module_name] [-a args]

常用選項:
–version                  顯示版本
-m module              指定模塊,默認爲command
-v 詳細過程                   –vv -vvv更詳細
–list-hosts              顯示主機列表,可簡寫—list
-k, –ask-pass                  提示連接密碼,默認Key驗證
-K, –ask-become-pass 提示輸入sudo
-C, –check              檢查,並不執行
-T, –timeout=TIMEOUT        執行命令的超時時間,默認10s
-u, –user=REMOTE_USER    執行遠程執行的用戶
-b, –become                   代替舊版的sudo 切換
<host-pattern>                         匹配主機的列表
ALL                    表示列表中的所有主機

示例:
ansible all -m  ping

* 支持通配符

示例:
ansible “*” -m ping
ansible 192.168.1.* -m ping
ansible “*srvs” -m ping

或關係

示例:
ansible “websrvs:appsrvs”  -m ping
ansible “192.168.1.10:192.168.1.20” -m ping

邏輯與

ansible “websrvs:&dbsrvs”  -m ping
在websrvs組,但不在dbsrvs組中的主機

邏輯非

ansible ‘websrvs:!dbsrvs’  -m ping

綜合邏輯

ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ -m -ping

正則表達式

ansible “websrvs:&dbsrvs”  -m ping
ansible “~(web|db).*\.magedu\.com” -m ping

常用模塊

簡單介紹常用模塊如何使用,模塊的參數僅是常用的參數,完整具體的參數,請參考ansible文檔,或者使用ansible-doc命令查看模塊的幫助文檔。

command 執行命令

ansible的默認模塊,因此可以省略-m參數。

ansible lanyulei -m command -a "hostname"
ansible lanyulei -a "hostname"

shell 執行shell命令

與上面的command基本相同,但shell模塊兼容性更好。

例如:當命令中需要管道操作的時候,則不能使用command模塊,需要使用shell模塊來執行命令。

ansible lanyulei -m shell -a "ps -ef |grep ansible" -f 1
-f 參數表示每次返回多少條結果

yum 安裝軟件

推送腳本文件到遠程主機,並遠程執行腳本文件

ansible lanyulei -m yum -a "name=httpd state=installed"

參數介紹

name    指定要安裝的軟件包的名稱
state   指定使用yum的方式
    installed, present    安裝軟件包
    removed, adsent       移除軟件包
    latest                安裝目前最新的軟件包

copy 推送文件

將本地文件推送到客戶端

ansible lanyulei -m copy -a "src=/etc/hosts dest=/tmp/test.txt"

在推送覆蓋遠程主機文件時,對遠程主機已有的文件進行備份,按照時間備份

ansible lanyulei -m copy -a "src=/etc/hosts desc=/tmp/test.txt backup=yes"

直接想遠程機器文件內寫入數據,並且直接覆蓋遠程文件內原有的數據

ansible lanyulei -m copy -a "content='bgx' dest=/tmp/test.txt"

參數介紹

src       要推送數據的源文件信息
dest      要推送到目標機器的啥路徑
backup    對推送過去的文件,進行備份
content   直接在遠程主機上對文件進行原地修改
group     推送文件的時候,指定文件屬組
owner     推送文件的時候,指定文件屬主
mode     推送文件的時候,指定文件權限

fetch 拉取文件

文件拉取模塊主要是將遠程主機中的文件拷貝到本機中,和copy模塊的作用剛剛相反,並且在保存的時候使用hostname來進行保存,當文件不存在的時候,會出現錯誤,除非設置了選項fail_on_missing爲yes

ansible lanyulei -m fetch -a "dest=/opt src=/tmp/cron.txt"

詳細參數可參考

ansible-doc -s fetch

service 啓停服務

啓動或者停止服務

ansible lanyulei -m service -a "name=httpd state=stopped enabled=yes"

參數介紹

name     定義要啓停的服務名稱
state    指定服務狀態,停止或者啓動
    started    啓動
    stopped    停止
    restarted  重啓
    reloaded   重載
enabled  是否讓服務開機自啓動

script 執行腳本文件

在本地運行模塊,等同於在遠程執行,不需要將腳本文件進行文件推送,就可以執行

ansible lanyule -m script -a "/tmp/test.sh"

user 用戶管理

操作系統的用戶

創建用戶,並配置對應的用戶密碼(-1 表示使用MD5進行加密)
passwd=`echo "lanyulei" | openssl passwd -1 -stdin`
ansible lanyulei -m user -a "name=lanyulei password='$passwd'"
創建用戶,設置uid爲888, 並加入gid爲888的組
ansible lanyulei -m user -a "name=lanyulei uid=888 group=888 shell=/sbin/nologin create_home=no"

參數介紹

uid          指定用戶的uid
group        指定用戶組名稱
groups       指定附加組名稱
password     設置用戶密碼
shell        指定用戶登陸的shell
create_home  是否創建家目錄

group 組管理

操作系統的用戶組

創建組
ansible lanyulei -m group -a "name=lanyulei gid=888"

參數介紹

name      指定創建的組名
gid       指定組的gid
state
    absent     移除遠程主機的組
    present    創建遠程主機的組

file 目錄及文件操作

對目錄及文件進行操作

創建目錄
ansible lanyulei -m file -a "path=/tmp/lanyulei state=diretory"
創建文件
ansible lanyulei -m file -a "path=/tmp/lanyulei state=touch mode=555 owner=root group=root"
創建鏈接文件
ansible lanyulei -m file -a "src=/tmp/lanyulei path=/tmp/lanyulei_link state=link"

參數介紹

path     指定遠程主機目錄或者文件信息
recurse  遞歸授權
state
    directory     在遠程主機上創建目錄
    touch         在遠程主機上創建文件
    link/hard     在遠程主機上給文件或者目錄創建鏈接文件
    absent        刪除遠程主機上的目錄或者文件
    mode          設置遠程主機上文件或者目錄的權限
    owner         設置遠程主機上文件或者目錄的屬主
    group         設置遠程主機上文件或者目錄的屬組

cron 定時任務

操作crontab定時任務

創建一個定時任務
ansible lanyulei -m cron -a "minute=* hour=* day=* month=* weekday=* job='/bin/sh /tmp/test.sh'"
默認全都是*,因此可以寫成如下:
ansible lanyulei -m cron -a "job='/bin/sh /tmp/test.sh'"
設置定時任務註釋信息,防止重複,name設定
ansible lanyulei -m cron -a "name='cron2' job='/bin/sh /tmp/test.sh'"
刪除相應的定時任務
ansible lanyulei -m cron -a "name='ansible cron2' minute=0 hour=0 job='/bin/sh /tmp/test.sh' state=absent"
註釋相應的定時任務,使定時任務失效
ansible lanyulei -m cron -a "name='ansible cron2' minute=0 hour=0 job='/bin/sh /tmp/test.sh' disabled=no"

mount 掛載

用於掛載的模塊

ansible lanyulei -m mount -a "path=/backup src=192.168.1.131:/data fstype=nfs opts=defautls,noatime state=mounted"

參數介紹

state
    present        開機掛載,僅將掛載配置寫入/etc/fstab,但是不會執行掛載的操作
    mounted        掛載設備,並將配置寫入/etc/fatab
    unmounted      臨時卸載設備,不會清除/etc/fstab寫入的配置
    absent         卸載設備,會清理/etc/fstab寫入的配置

參考:

http://www.178linux.com/99715

http://edu.51cto.com/course/15617.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章