ansible是基於模塊化的,經過調用特定的模塊,完成特定的任務web
基於Python語言實現,由Paramiko、PyYAML和Jinja2三個關鍵模塊實現shell
部署簡單,agentless(無需部署客戶端,經過ssh協議管理各客戶端)apache
基於主從模式編程
支持自定義模塊 (其餘編程語言寫的模塊,也能夠通過ansible的接口調用)vim
支持Playbook 連續任務按前後順序完成less
支持冪等性:命令可重複運行ssh
ansible的組成部分:編程語言
ansible core:ansible自身核心模塊模塊化
host inventory:主機庫,定義可管控的主機列表測試
connection plugins:鏈接插件,默認基於ssh協議鏈接
modules:core modules(自帶模塊或核心模塊)、custom modules(自定義模塊,用戶可基於任何編程語言編寫自定義模塊)
配置文件:
(1)ansible應用程序的主配置文件:/etc/ansible/ansible.cfg
(2) Host Inventory定義管控主機:/etc/ansible/hosts
安裝: yum -y install epel-release yum -y install ansible
命令的使用格式:ansible <host-pattern> [-m module_name] [-a args] [options]
vim /etc/ansible/hosts
上面是自定義單個主機示例
自定義單個組示例,中括號中的字符是組名,一個主機能夠屬於多個主
能夠使用ansible -i /somefile 指明inventory host文件路徑
自定義兩個組
ansible-doc 命令查看相關幫助, ansible-doc -l 列出ansible支持哪些模塊,ansible-doc -s MODULE-NAME 查看模塊支持哪些
參數
最簡單的一條命令:ansible web1 -m ping,因爲ssh不是基於密鑰驗證,此處會顯示UNREACHABLE
先得在各主機上配置密鑰驗證,首先建立密鑰對,命令很簡單ssh-keygen,加三次回車
cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys chmod 700 /root/.ssh/authorized_keys
scp -p authorized_keys id_rsa id_rsa.pub 192.168.238.170:/root/.ssh/ (經過scp將密鑰發往各主機)
此時再來測試 ansible all -m ping all表示全部主機
ansible經常使用模塊介紹
ansible <host-pattern> [-m module_name] [-a args] [options]
args:是key=value格式
command:默認模塊,可省略。在遠程主機上進行操做命令,command不是key=value格式,後面直接跟命令
例如:ansible all -m command -a ’ifconfig'
注意:要用到管道類的命令,command沒法執行
user:添加刪除user命令
例如:ansible web1 -m user -a "name=apache state=present" name指定用戶名,present表示建立,absent表示刪除
刪除家目錄,要使用remove=true,要建立系統用戶添加system=true
cron 定義crontab中的條目的
例如:ansible all -m cron -a "minute='*/5' job='/usr/sbin/ntpdate 133.100.11.8 &> /dev/null' name='sync time'"
上面的name必須指定
刪除: ansible all -m cron -a "name='sync time' state=absent", 另外的參數month= day= weekday=
file 設置文件屬性
例如:ansible web1 -m file -a "path=/tmp/dir state=directory" 建立dir目錄
ansible web1 -m file -a "path=/tmp/nihao owner=root state=touch" 建立一個nihao的空文件
yum 包管理器
例如: ansible web1 -m yum -a "name=httpd state=present" 安裝httpd包
copy 完成文件複製
例如:ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab mode=600' src指定本地文件絕對路徑,dest指定目標主機絕
對路徑,mode指定文件權限
template 跟copy相似
service 啓動關閉 各個服務
例如:ansible web1 -m service -a 'name=httpd state=started enabled=true' 啓動http服務,enabled=true指定開機啓動
shell 在shell環境中運行shell命令
例如:ansible all -m shell -a 'echo "0" | passwd --stdin root'
setup 獲取遠程主機上的主機屬性信息
例如:ansible 192.168.238.170 -m setup
script 指定本地一個腳本文件,傳遞到遠程主機上執行一遍
vim /tmp/date.sh
例如:ansible all -m script -a '/tmp/date.sh' 在全部主機上執行腳本設定時區