過程以下:安裝→配置互信→配置主機組→獲取幫助→經常使用模塊及用法→playbookhtml
Ansible只是一個進程 不須要添加數據庫也不須要啓動和運行守護進程它只是一個進程你能夠輕鬆使用它安裝在任何一點主機上面(除了windows)ansible管理機不能安裝到windows上面java
版本的選擇 由於2.0有很是大的改進 通常都會使用2.0以上的版本控制機的要求 由於ansible是python寫的因此,須要在安裝了python2.6或者2.7以上的python版本才能夠安裝node
配置好epel源python
yum install -y ansible
Ansible使用ssh來進行遠程管理:linux
在服務器上執行:web
ssh-keygen -t rsa -P '' #生成公鑰 ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.103(這是node ip) #將公鑰分發到各被管理主機上,實現祕鑰登陸
注:固然也能夠攜帶密碼來進行管理http://www.javashuo.com/article/p-nxaomqde-cs.htmlshell
位置:/etc/ansible/hosts數據庫
案例:apache
# cat /etc/ansible/hosts [test] #表明test組,如下是組內包含的全部主機 192.168.12.5[1:4] #能夠用通配符來簡化,表明192.168.12.51-192.168.12.54 192.168.12.5[6:9] 192.168.13.101 192.168.13.103 [app] #表明app組 192.168.12.5[0:3] 192.168.12.5[5:9] #執行命令的時候做用於組名便可批量對組內全部用戶執行操做
主配置文件:windows
/etc/ansible/ansible.cfg
經常使用配置:取消host_key_checking = False 的註釋,解決ansible首次鏈接host服務器需驗證問題
ansible <host-pattern> [-m module_name] [-a args]
<host-pattern> :能夠是具體的主機、組、all(沒有在組裏的全部主機)
-m 指定模塊名
-a 指定命令
# ansible-doc –l
#ansible-doc -s modename
測試:使用ping模塊來測試鏈接狀況
說明:command、shell、raw模塊的核心參數爲命令自己;而其它模塊的參數一般爲「key=value」格式;
【command】
說明:在遠程主機上執行命令,不支持管道'|',是默認模塊,能夠不用-m指定
creates:若是這個參數對應的文件存在,就不運行command
free_form:要執行的linux指令
chdir:在執行指令以前,先切換到該指定的目錄
removes:與creates相反,若是這個參數對應的文件不存在,就不運行command
示例:
ansible test –m command -a "chdir=/tools touch test" #在/tools目錄下建立test文件
ansible test –a "chdir=/tools creates=/test touch test" #若是/tools下沒有test文件則建立
【shell】
說明:能夠指定運行環境,支持管道
ansible test -m shell -a 'bash /root/test.sh' ansible test -m shell -a "chdir=/testdir ls" ansible 192.168.12.50 -m shell -a "/usr/bin/python /root/test.py" #使用python環境執行py文件
【raw】
說明:和command 功能類似,支持管道符
ansible test -m raw -a "ps -ef | grep java" #我最經常使用的命令,通常任務均可以用raw來執行
【script】
說明:在遠程主機執行主控端的shell/python腳本 (使用相對路徑)
ansible test -m script -a "/etc/ansible/test.sh"
【copy】
src:源文件
dest:目標路徑
backup:覆蓋以前,是否備份原文件
owner:設定文件/目錄的屬主
group:設定文件/目錄的屬組
mode:設定文件/目錄的權限
示例:
ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644" ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes" #copy中使用backup將原來的文件備份一下再覆蓋
【file】
group:定義文件/目錄的屬組
owner:定義文件/目錄的屬主
mode:定義文件/目錄的權限
path:必選項,定義文件/目錄的路徑
recurse:遞歸設置文件的屬性,只對目錄有效
state:定義文件狀態
directory:若是目錄不存在,建立目錄
touch:若是文件不存在,建立一個新文件
absent:刪除文件或目錄
示例:
ansible test -m file -a "src=/etc/fstab.link dest=/tmp/fstab state=link" #建立連接文件 ansible test -m file -a "path=/tmp/fstab state=absent" #刪除文件 ansible test -m file -a "path=/tmp/test state=touch" #建立文件
【yum】
enablerepo:啓用某個源
name:要進行操做的軟件包的名字,也能夠傳遞一個url或者一個本地的rpm包的路徑
state:定義軟件包狀態
present:安裝
absent:刪除
latest:安裝最新的
示例:
ansible test -m yum -a 'name=httpd state=latest' #yum安裝最新的httpd ansible test -m yum -a 'name="@Development tools" state=present' ansible test -m yum -a 'name=lszrz state=present enablerepo=local' #指定yum源爲local
ansible test -m yum -a 'name=httpd state=remove' #yum卸載httpd
【cron】
backup:對遠程主機上的原任務計劃內容修改以前作備份
day:日(1-31,*,*/2,……)
hour:小時(0-23,*,*/2,……)
minute:分鐘(0-59,*,*/2,……)
month:月(1-12,*,*/2,……)
weekday:周(0-6,*,……)
job:要執行的任務,依賴於state=present
name:該任務的描述
special_time:指定何時執行,參數:reboot,yearly,annually,monthly,weekly,daily,hourly
state:確認該任務計劃是建立仍是刪除
user:以哪一個用戶的身份執行
示例:
ansible test -m cron -a 'name="check dirs" minute=1 hour=1 day=*/3 job="ls -alh > /dev/null"' #建立計劃任務每三天一次,執行時間爲01:01 ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"' #當重啓後立馬執行
ansible test -m cron -a 'name="a job for reboot" state=absent backup=yes' #刪除同時備份
【service】
arguments:給命令行提供一些選項
enabled:是否開機啓動 yes|no
name:必選項,服務名稱
runlevel:運行級別
sleep:若是執行了restarted,在則stop和start之間沉睡幾秒鐘
state:對當前服務執行啓動,中止、重啓、從新加載等操做(started,stopped,restarted,reloaded)
示例:
ansible test -m service -a "name=httpd state=started enabled=yes" #設置httpd服務爲啓動狀態,而且加入開機啓動項 ansible test -m service -a "name=foo pattern=/usr/bin/foo state=started" ansible test -m service -a "name=network state=restarted args=eth0" #帶參數啓動
【user】
home:指定家目錄,須要createhome爲yes
groups:用戶組
uid:用戶UID
password:指定用戶密碼
name:用戶名
createhome:是否建立家目錄
system:是否建立爲系統用戶
remove:但state=absent時,刪除家目錄
state:建立或者刪除
shell:指定用戶shell環境
示例:
ansible test -m user -a 'name=newuser' #若是用戶已經存在,則不進行任何操做。 ansible test -m user -a 'name=newuser group=testgroup' #用戶的主組爲 testgroup,testgroup 組須要提早存在,當不使用 group 設置主組時,默認主組與用戶名相同。 ansible test -m user -a 'name=newuser state=absent' #遠程主機上刪除用戶 ansible test -m user -a 'name=newuser state=absent remove=yes' #刪除用戶同時刪除家目錄
Ansible-playbook是用yaml編寫的批量任務列表
命令格式:
ansibe-playbook test.yaml
YAML:是YAML 是專門用來寫配置文件的語言,很是簡潔和強大,遠比 JSON 格式方便。
例子:
vi test.yaml
- hosts: test #做用的主機組 remote_user: root #指定用戶 tasks: #下面寫任務列表 - name: add a group #指定任務名稱 group: gid=1000 name=testgroup system=no #任務執行命令 - name: excute a command command: /bin/date
#此劇本完成兩個任務:①建立用戶組、②執行命令
執行說明:
Ansible-playbook的主體爲task list
執行過程:各任務按次序在每一個主機上執行,即在全部主機上完成第一個任務後才執行第二個,當中途發生錯誤,全部的任務都將回滾,所以,更改playbook後從新執行便可;
Ansible-playbook中的name儘量的詳細和簡潔,以便於查看執行結果
能夠使用ignore_errors來忽略錯誤信息:
tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand ignore_errors: True
練習:
製做一個playbook,要求爲web-servers主機組安裝最新版Apache服務,並將服務的端口經過修改配置問題改成8080,而後重啓服務
- hosts: web-servers remote_user: root tasks: - name: ensure apache latest version yum: state=latest name=httpd - name: apache configure file copy: src=/tools/httpd.conf dest=/etc/httpd/conf/httpd.conf force=yes - name: restart httpd service: name=httpd state=restarted