ansible運維自動化工具 php
軟件包的安裝
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install ansible -y
配置免密鑰
在master服務器生成ssh-key,並分發到全部客戶端
ssh-keygen -t rsa 【一路回車】
ssh-copy-id -i ~/.ssh/id_rsa.pub【客戶端IP地址】
* ANSIBLE_CONFIG (環境變量) html
* ansible.cfg (當前目錄下) web
* .ansible.cfg (用戶家目錄下) shell
* /etc/ansible/ansible.cfgvim
默認ansible執行時會從該配置中加載hosts配置,所以能夠經過修改.ansible.cfg來指定默認的hosts文件地址:服務器
[defaults] hostfile=/Users/the5fire/hosts
有幾個參數須要記錄下:
-u username # 指定ssh鏈接的用戶名
-f 10 # 指定併發數
--sudo [-K] # 若是須要root權限執行的話,-K參數是用來輸入root密碼的
定義hosts文件:併發
ansible的hosts默認在/etc/ansible/目錄中,其中提示ansible是支持域名和ip兩種客戶端命名格式的,在這裏定義了一個「slave」組 vim /etc/ansbile/hosts [slave]app
192.168.17.18
192.168.17.19
vim /etc/ansible/hosts
方法一: [webhosts] 172.16.10.22 ansible_ssh_user=root ansible_ssh_pass=guoting 172.16.10.33 ansible_ssh_user=root ansible_ssh_pass=guoting
方法二:
[GameServer]
Android1-2 ansible_ssh_host=10.10.113.31 ansible_ssh_user=joy ansible_ssh_port=888
Android3-4 ansible_ssh_host=10.10.243.59 ansible_ssh_user=joy ansible_ssh_port=888
IOS1-2 ansible_ssh_host=10.10.240.248 ansible_ssh_user=joy ansible_ssh_port=888
Tencent1-2 ansible_ssh_host=10.10.243.67 ansible_ssh_user=joy ansible_ssh_port=888 解釋 ansible_ssh_user=root 是ssh登錄用戶 ansible_ssh_pass=guoting 是ssh登錄密碼三、測試各個模塊
# 注意每一個模塊的用法可使用 ansible-doc MOD 來查看例如ansible-doc copy ansible命令最經常使用的用法 ansible <Host-partten> -m MOE -a 'MOD_ARV'所支持的模塊可使用ansible-doc -l來查看
上面的ad hoc是指執行一條臨時的不須要保存的命令,那麼複雜的命令怎麼執行呢?所以也就有了playbook這個命令: ansible-playbook 。運維
playbook(劇本),就是須要定義一個腳本或者說配置文件,而後定義好作什麼。ssh
ymal中的變量:
在 yaml 中可使用vars關鍵字來定義變量
vars:
var_name: value
例子:
變量的引用
{{ var_name }}
例子:
添加 2 個用戶 方式1通常作法 - name: add user testuser1 user: name=testuser1 state=present groups=wheel - name: add user testuser2 user: name=testuser2 state=present groups=wheel 方式2使用變量方式 - name: add several users vars: user1: testuser1 user2: testuser2 user: name={{ user1 }} state=present groups=wheel user: name={{ user2 }} state=present groups=wheel 方式3使用迭代方式 - name: add several users user: name={{ item }} state=present groups=wheel with_items: - testuser1 - testuser2 事實上with_items中可使用元素還可爲hashes例如 - name: add several users user: name={{ item.name }} state=present groups={{ item.groups }} with_items: - { name: 'testuser1', groups: 'wheel' } - { name: 'testuser2', groups: 'root' }
例子:把當前用戶名輸出到whoami.rst文件中:
cat /etc/ansible/playbook.yml
--- - hosts: slave # hosts文件中定義的組 remote_user: root # 若是和當前用戶同樣,則無需指定 tasks: # tasks是是關鍵詞,指明瞭要執行哪些任務 - name: whoami # name是任務的名稱 shell: 'whoami > whoami.rst' # shell是指定使用的module(模塊),單引號中是命令。 - hosts: slave remote_user: root tasks: - name: whoami copy: src=~/hosts dest=~/hosts.dest # 本地拷貝到遠端 notify: # 若是copy執行完以後~/hosts.dest文件發送了變化,則執行 - clear copy handlers: - name: clear copy # 調用handler shell: 'mv ~/hosts.dest hosts.del' # 重命名
或
cat playbook.yml
- hosts: slave remote_user: root tasks: - name: whoami copy: src=~/hosts dest=~/hosts.dest - name: clear copy shell: 'mv ~/hosts.dest hosts.del'