Ansible基礎
阿新 • • 發佈:2017-11-18
linux ansible
介紹:
ansible是基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點
具有批量系統配置、批量程序部署、批量運行命令等功能。
是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。
操作:
以下通過實際演練來更好的理解ansible的工作原理
使用三臺機器組建ansible使用環境
註意:三臺主機要網絡同步時間,101主機作為ansible控制機,106和107主機作為普通服務器
yum -y install ansible
#安裝ansible
基於密鑰進行ssh認證
配置/etc/ansible/hosts
ssh-keygen -t rsa -P ‘‘
for i in 106 107;do ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected].$i ;done
ansible -help -m 指定調用的模塊 -a 每個模塊都有自己的專有的參數,指定此模塊參數 -f 指定每批處理多少臺主機,默認5臺 #更多的參數可自行了解 eg: ansible all --list-hosts #列出當前處於同一模式的所有主機 ansible webservers --list-hosts
ping模塊: ansible all -m ping #測試ansible到各個服務器的連通性 192.168.1.106 | SUCCESS => { #狀態是成功的,即連通性是沒問題 "changed": false, #修改狀態是失敗,說明我們未做任何修改操作 "ping": "pong" #ansible發出ping驗證,對方返回pong告知連接正常 } 192.168.1.107 | SUCCESS => { "changed": false, "ping": "pong" }
ansible-doc -h #查看ansible文檔的幫助信息 ansible-doc -l #列出ansible支持的所有模塊信息,如上文只能中的ping模 ansible-doc -s command #查看指定模塊的參數信息,command是一種常用的模塊,默認不指定模塊時就是使用command
command模塊:
[root@node1 ~]#ansible 192.168.1.106 -m command -a ‘pwd chdir=/app‘ #在執行命令pwd之前,先cd進入chdir指定的目錄,所以結果顯示目錄是/app而不是root的家目錄 #-m指定模塊,-a指定參數(基本都是鍵值對),只是這裏的參數實際上是兩臺命令一個是pwd,一個是chdir,而這兩個命令又有先後之分 ansible 192.168.1.106 -m command -a ‘mkdir dir chdir=/app creates=dir‘ #創建目錄dir,creates表示如果dir已經存在就不再執行mkdir操作,直接跳過。此過程實現冪等性 #冪等:執行一次和執行多次的結果都是一樣的 #creates表示指定路徑文件不存在才執行指令,而removes則相反,表示指定路徑文件存在才執行指令 #creates和removes含義相反,註意區分,而且他們都是針對指定目錄下的文件而不針對用戶或進程操作 command模塊是不能是被shell語法的,所有在用到如bash類的shell時可以使用shell模塊 ansible all -m shell -a "echo centos| passwd --stdin user1" #shell模塊與command模塊基本相同,只是此模塊支持shell類型的語法 #如果換成command模塊,則結果是echo後的內容全部作為字符串輸出,即command是不識別管道和passwd等shell語言的
user和group模塊:
group模塊: ansible webservers -m group -a ‘name=group1 system=yes state=present‘ #使用group組模塊,向webservers中創建組gruop1,並且是系統組,present是創建此組的含義,absent是刪除此組的意思 192.168.1.106 | SUCCESS => { "changed": true, "gid": 983, "name": "group1", "state": "present", "system": true } #組id、組名稱、狀態、系統組,操作成功 user模塊: ansible webservers -m user -a "name=tomm groups=group1 state=present uid=20000 shell=/bin/csh" #創建tomm用戶,指定輔助組、uid和shell類型,創建present, 192.168.1.106 | SUCCESS => { #上述操作成功 "changed": true, "comment": "", "createhome": true, #創建家目錄 "group": 20000, # "groups": "group1", "home": "/home/tomm", #未指定用戶家目錄,則采用默認 "name": "tomm", "shell": "/bin/csh", "state": "present", "system": false, #表示不是系統用戶 "uid": 20000 } #此時webservers組內的成員都創建了用戶tomm
copy模塊:
將文件復制到遠程位置 ansible webservers -m copy -a ‘src=/root/aaa dest=/app/ owner=daemon group=nobody mode=664‘ #使用copy模塊,將本地的aaa文件復制到遠程主機webservers組中,並修改用戶/組和權限 192.168.1.106 | SUCCESS => { "changed": true, "checksum": "7272fa0670a2f6d5cf0f5c1e6f31641fad625bf8", "dest": "/app/aaa", "gid": 99, "group": "nobody", "md5sum": "890b22b2dc6ff3f00f2374dce5634526", "mode": "0664", "owner": "daemon", "secontext": "system_u:object_r:default_t:s0", "size": 1493, "src": "/root/.ansible/tmp/ansible-tmp-1510928315.78-72588321449487/source", #生成臨時文件,而不是直接將源文件復制過去 "state": "file", "uid": 2 } #此時對aaa文件進行修改後在執行此操作,會發現changed字段依然是true,原因是aaa修改後的hash值改變了 ansible webservers -m copy -a "content=‘hello,ansible‘ dest=/app/bbb owner=daemon group=nobody mode=664" #本機沒有源文件而只是指定字符串,到目標webservers組,即遠程主機上就會生成bbb文件,並設置成相應的所屬用戶權限等信息 #content只是修改文件內容,如果針對文件本身屬性進行操作,可以使用file模塊
file模塊:
本文出自 “a_pan” 博客,謝絕轉載!
Ansible基礎