ansible的簡單介紹

一、Ansible的安裝

官方網站:http://www.ansible.com

官方文檔:http://docs.ansible.com/ansible/latest/intro_installation.html

1、yum源安裝

以centos爲例,默認在源裏沒有ansible,不過在fedora epel源裏有ansible,配置完epel 源後,可以直接通過yum 進行安裝。這裏以centos6.8爲例:

# yum install http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install ansible

也可以用rpm安裝

$ git clone https://github.com/ansible/ansible.git
$ cd ./ansible
$ make rpm
$ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm

2、apt-get安裝

在ubuntu及其衍生版中,可以通過增加ppa源進行apt-get安裝,具體如下:

$ 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.html

二、ansible的配置

1、新增主機和組

ansible要控制一臺主機必須先新增主機到組

例:要控制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

2、控制主機前操作

因爲ansible是依靠ssh來進行主機操作的,所以需要用到ssh密鑰通信

在對應用戶下生成密鑰:

ssh-keygen -t rsa

傳輸密鑰:

ssh-copy-id -i .ssh/id_rsa.pub [email protected]

三、命令行控制主機操作

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可查看各參數含義

2、常用模塊說明

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說明

1、使用方法

命令行執行:ansible-playbook -vvv /home/app/test.yaml

test.yaml是一個類似於腳本的json格式文件

其中 -v 可看到整個playbook的執行過程,包括報錯原因,v越多顯示越詳細

2、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


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