官方網站:http://www.ansible.comhtml
官方文檔:http://docs.ansible.com/ansible/latest/intro_installation.htmljava
一、yum源安裝linux
以centos爲例,默認在源裏沒有ansible,不過在fedora epel源裏有ansible,配置完epel 源後,能夠直接經過yum 進行安裝。這裏以centos6.8爲例:git
# yum install http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install ansible
也能夠用rpm安裝github
$ git clone https://github.com/ansible/ansible.git $ cd ./ansible $ make rpm $ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
二、apt-get安裝shell
在ubuntu及其衍生版中,能夠經過增長ppa源進行apt-get安裝,具體以下:json
$ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible
其餘問題參考:http://www.361way.com/ansible-install/4371.htmlubuntu
一、新增主機和組vim
ansible要控制一臺主機必須先新增主機到組centos
例:要控制172.19.2.49和172.19.2.50的主機
vim /etc/ansible/hosts [kubernetes] #中括號內爲組名,組名自定義 172.19.2.50 #在組內爲包含的主機 172.19.2.51 #一個組中能夠存在多個主機,一個主機能夠存在多個組
ansible可經過組名同時控制多臺主機,也可直接經過ip控制單臺主機,但都須要將主機添加至/etc/ansible/hosts
二、控制主機前操做
由於ansible是依靠ssh來進行主機操做的,因此須要用到ssh密鑰通訊
在對應用戶下生成密鑰:
ssh-keygen -t rsa
傳輸密鑰:
ssh-copy-id -i .ssh/id_rsa.pub root@172.19.2.1
一、命令行操做
例:調用對應主機的ifconfig命令
ansible kubernetes -s -m shell -a "ifconfig" #kubernetes就是以前在/etc/ansible/hosts中設置的組,表示控制該組的全部主機 # -s 是使用sudo,若是客戶端原本是在root下操做能夠不加該參數,不加的時候命令執行速度更快 # -m shell 是指定執行的模塊,這裏調用了shell模塊 # -a "ifconfig" 是調用模塊後執行的操做,這裏執行了ifconfig命令 #若是對單臺主機進行操做則:ansible 172.19.2.50 -s -m shell -a "ifconfig"
使用ansible -h可查看各參數含義
二、經常使用模塊說明
shell模塊:用於執行shell命令,支持命令管道
例:執行遠程主機上的shell腳本
ansible kubernetes -m shell -a "/tmp/rocketzhang_test.sh"
common模塊:用於執行命令,功能和shell基本相同,不支持命令管道
例:在遠程主機上執行date命令
ansible kubernetes -m common -a "date"
copy模塊:從ansible所在主機複製文件到遠程主機
相關參數以下: src:爲ansible所在主機的文件所在路徑 dest:文件要複製到目標主機所在的路徑 owner:文件複製後的屬主 group:文件複製後的屬組 mode:文件複製後的權限
例:將本地文件「/etc/ansible/ansible.cfg」複製到遠程服務器
ansible kubernetes -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"
file模塊:用於操做文件或目錄
相關參數以下: group:定義文件/目錄的屬組 mode:定義文件/目錄的權限 owner:定義文件/目錄的屬主 path:必選項,定義文件/目錄的路徑 recurse:遞歸的設置文件的屬性,只對目錄有效 src:要被連接的源文件的路徑,只應用於state=link的狀況 dest:被連接到的路徑,只應用於state=link的狀況 state: directory:若是目錄不存在,建立目錄 file:即便文件不存在,也不會被建立 link:建立軟連接 hard:建立硬連接 touch:若是文件不存在,則會建立一個新的文件,若是文件或目錄已存在,則更新其最後修改時間 absent:刪除目錄、文件或者取消連接文件
例:遞歸刪除test目錄
file: path=/home/app/test recurse=yes state=absent
例:遞歸建立test目錄
path=/home/app/test recurse=yes mode=775 owner=app group=app state=directory
其餘模塊可參考官方文檔:
http://docs.ansible.com/ansible/latest/modules_by_category.html
例:ansible批量更新jdk
ansible routechang -s -m shell -a 'rpm -qa | grep jdk' ansible routechang -s -m shell -a 'rpm -qa | grep java' ansible routechang -s -m shell -a 'yum -y remove java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64' ansible routechang -s -m shell -a 'yum -y remove -y java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64' ansible routechang -s -m shell -a 'yum -y remove java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64' ansible routechang -s -m copy -a "src=/home/app/test/jdk-7u80-linux-x64.rpm dest=/home/app/jdk-7u80-linux-x64.rpm mode=755" ansible routechang -s -m shell -a 'rpm -i /home/app/jdk-7u80-linux-x64.rpm' ansible routechang -s -m shell -a 'java -version'
一、使用方法
命令行執行:ansible-playbook -vvv /home/app/test.yaml
test.yaml是一個相似於腳本的json格式文件
其中 -v 可看到整個playbook的執行過程,包括報錯緣由,v越多顯示越詳細
二、yaml文件經常使用項說明
這裏須要特別注意,yaml文件對格式要求很是嚴格,多一個空格少一個空格都不行
hosts:指定了對哪些主機進行操做; user:指定使用什麼用戶登陸遠程主機操做; vars:指定變量 task:指定了一個任務 name:對該模塊實現的功能作一個描述,相似於註釋 ignore_errors:忽略本行報錯 remote_user:遠程執行過程當中使用的用戶
注意事項:
YAML和Ansible Playbook的變量語法不能在一塊兒。這裏特指冒號後面的值不能以 { 開頭,須要再以前加雙引號
特別是在tasks中寫shell命令容易出現衝突
例:
下面的代碼會報錯:
- hosts: app_servers vars: app_path: /22
解決辦法:要在{ 開始的值加上引號:
- hosts: app_servers vars: app_path: "/22"
yaml文件傳參:
http://blog.csdn.net/angle_sun/article/details/52728105
ansible非root用戶批量修改root密碼:
http://www.cnblogs.com/zhanmeiliang/p/6197762.html
ansible批量修改主機密碼:
http://147546.blog.51cto.com/137546/1892537