ansible的簡單介紹

1、Ansible的安裝

官方網站: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

2、ansible的配置

一、新增主機和組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

3、命令行控制主機操做

一、命令行操做

例:調用對應主機的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'

3、ansible-playbook說明

一、使用方法

命令行執行: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"

4、其餘參考

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

相關文章
相關標籤/搜索