簡介
ansible是新出現的運維工具是基于Python研發的糅合了衆多老牌運維工具的優點實作了批量作業系統配置、批量程式的部署、批量運作指令等功能。
1.ansible的安裝直接用yum安裝,配置好epel源即可。
2.ansible安裝目錄在/etc/ansible下。
伺服器環境
192.168.32.200:作為ansible管理節點
192.168.32.202:被管理節點
ansible.cfg配置檔案
hostfile=/etc/ansible/hosts #指定預設hosts配置的位置
host_key_checking = False #不進行host_key檢查,省去目标key發生變化時輸入(yes/no)的步驟
ask_pass=True # 每次執行ansible指令是否詢問ssh密碼
ask_sudo_pass=True # 每次執行ansible指令時是否詢問sudo密碼
3.首先在ansible管理節點上修改hosts檔案
cd /etc/ansible/
vim hosts // 在最後一行加入以下内容
[test]
192.168.32.202
4.ssh-keygen -P '' 生成公鑰
ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] //将公鑰檔案傳輸到各節點上
5.示例 Ansible有一個非常有用的子產品是 command,相信很多人都需要它!Command子產品就是“遠端執行指令”
相比Ansible的内置子產品而言,Command子產品無法通過傳回值來判斷指令是否執行成功。
但Ansible添加了creates 和 removes 的屬性,以此檢查指令是否成功執行或者是否應該被執行。
如果你定義了 creates 屬性,當檔案已存在時,它不會再執行。相反如果定義了 removes 屬性,
則隻有檔案存在的情況下指令才會被執行
ansible webhosts -m command -a 'rm -rf /tmp/test removes=/tmp/test'
192.168.32.202 | success | rc=0 >>
如果“受控節點”上 /tmp/testfile 并不存在,Ansible則提示跳過,輸出如下: MachineName | skipped
否則,如果檔案存在,則傳回成功:
ansible test -m command -a 'date' //command和shell子產品可以在被控端執行指令
Sat Jan 10 16:13:44 EST 2015
ansible webhosts -m shell -a 'date'
Enter passphrase for key '/root/.ssh/id_rsa': 輸入公鑰密碼
Sat Jan 10 16:17:40 EST 2015
安裝軟體和啟動服務。yum,service子產品
ansible test -m yum -a 'name=vsftpd state=present' // yum子產品遠端安裝軟體
ansible test -m service -a ‘name=vsftpd state=started enabled=yes’
支援管道的指令:raw子產品,類似于shell子產品
ansible test -m raw -a 'ifconfig | grep eth0'
檢視系統資訊
ansible test -u root -m setup
字段名 參考值 含義
ansible_architecture x86_64 受控節點系統架構
ansible_distribution CentOS 受控節點的作業系統發行版
ansible_distribution_version 6.3 受控節點發行版本的版本号
ansible_domain kisops.org 受控節點的主域名
ansible_fqdn site01.kisops.org 受控節點的完整機器名
ansible_interfaces [“lo”,”eth0”] 列出受控節點所有的網卡
ansible_kernel 2.6.32-431.5.1.el6.x86_64 受控節點的核心版本号
ansible_memtotal_mb 30099 受控節點總記憶體大小(兆)
ansible_processor_count 24 受控節點的CPU核心
ansible_virualization_role guest 受控節點的身份:host為主控端,guest為虛拟機
ansible_virtualization_type kvm 受控節點的虛拟化類型
Ansible還有一個基礎子產品叫file,顧名思義是與檔案相關的。
它可以用于檢視檔案的屬性、修改檔案屬性、查詢檔案是否被修改等等
ansible test -u root -m file -a 'path=/etc/fstab'
192.168.32.202 | success >> {
"changed": false,
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"path": "/etc/fstab",
"size": 779,
"state": "file",
"uid": 0
}
在/tmp目錄以nobody使用者的身份建立一個test的檔案夾
ansible test -u root -m file -a 'path=/tmp/test state=directory mode=755 owner=nobody'
192.168.32.202 | success >> {
"changed": true,
"mode": "0755",
"owner": "nobody",
"path": "/tmp/test",
"size": 4096,
"state": "directory",
"uid": 99
如果目錄不存在或屬性和預設的不一緻,Changed的值就為True。
如果相同(比如重複執行指令),Changed的值将變為False。
copy子產品。Copy子產品的作用就是從“控制節點”上拷貝檔案到“受控節點”上。
ansible test -m copy -a 'src=/etc/fstab dest=/tmp/fstab mode=644 owner=root'
"checksum": "0eafb3ce197c848fca254e3a1356934a96f310bf",
"dest": "/tmp/fstab",
"md5sum": "99f84827ef399f896305ca09ce1c668a",
"size": 805,
"src": "/root/.ansible/tmp/ansible-tmp-1420871736.8-93337290722652/source",
檢視目前登入的使用者
ansible -i hosts all -a 'whoami'
Enter passphrase for key '/root/.ssh/id_rsa':
root
這是一條ad-hoc指令——臨時執行指令,ad-hoc是ansible裡的一個概念, 在上面指令中就是 -a ,
預設ansible執行時會從該配置中加載hosts配置,是以可以通過修改.ansible.cfg來指定預設的hosts檔案位址:
# .ansible.cfg
[defaults]
hostfile=/etc/ansible/hosts
檢視ansible的子產品
ansible-doc -l
ansible-doc file檢視制定子產品的幫忙資訊,以file子產品為例
ansible指令參數介紹
-m:要執行的子產品,預設為command
-a:子產品的參數
-u:ssh連接配接的使用者名,預設用root,ansible.cfg中可以配置
-k:提示輸入ssh登入密碼。當使用密碼驗證的時候用
-s:sudo運作
-U:sudo到那個使用者,預設為root
-K:提示輸入sudo密碼,當不是NOPASSWD模式時使用
-C:隻是測試一下會改變什麼内容,不會真正去執行
-c:連接配接類型(default=smart)
-f:fork多少個程序并發處理,預設為5個
-i:指定hosts檔案路徑,預設default=/etc/ansible/hosts
-I 指定pattern,對<host_pattern>已比對的主機中再過濾一次
--list-hosts:隻列印有哪些主機會執行這個playbook檔案,不是實際執行
-M:要執行的子產品路徑,預設為/usr/share/ansible
-o:壓縮輸出,摘要輸出
--private-key 私鑰路徑
-T: ssh連接配接逾時時間,預設10秒
-t:日志輸出到該目錄,日志檔案名以主機名命名
-v:verbost
playbook(劇本),顧名思義,就是需要定義一個腳本或者說配置檔案,然後定義好做什麼。
一個簡單的playbook是這樣的,把目前使用者名輸出到whoami.rst檔案中:
# playbook.yml
---
- hosts: webhosts # hosts中指定
remote_user: root # 如果和目前使用者一樣,則無需指定
tasks:
- name: whoami
shell: 'whoami > whoami.rst'
hosts後面根據webhosts是從hosts中讀取的,tasks是是關鍵詞,指明了要執行哪些任務;
下面的name是任務的名稱,shell是前面提到的module(子產品),單引号中是指令。
使用playbook批量安裝軟體
vim ftp.yml
- name: yum -y install ftp
shell: yum -y install ftp
ansible-playbook ftp.yml
PLAY [webhosts] ***************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.32.202]
TASK: [yum -y install ftp] ****************************************************
changed: [192.168.32.202]
PLAY RECAP ********************************************************************
192.168.32.202 : ok=2 changed=1 unreachable=0 failed=0
ansible實時批量執行腳本
ansible all -m script -a “/root/123.sh”
解決在運作ansible的時候會挑出一些warnning
vim /etc/ansible/ansible.cfg
system_warnings = False
如果用戶端的ssh端口不是22的話,需要修改hosts
[server]
172.16.21.102:16861
172.16.21.103:16861
ansible_ssh_port=16861
ansible 使用yml檔案時如何取消回執資訊:
在yml檔案裡添加gather_facts: no
本文轉自 shouhou2581314 51CTO部落格,原文連結:http://blog.51cto.com/thedream/1655570,如需轉載請自行聯系原作者