ansiblle具有如下特點:
1、部署簡單,只需在主控端部署Ansible環境,被控端無需做任何操作;
2、默認使用SSH協議對設備進行管理;
3、主從集中化管理;
4、配置簡單、功能強大、擴展性強;
5、支持API及自定義模塊,可通過Python輕松擴展;
6、通過Playbooks來定制強大的配置、狀態管理
7、對雲計算平台、大數據都有很好的支持;redis配置文件:這樣寫可以獲取到客戶機的ipv4地址,bind {{ ansible_default_ipv4.address }}

1 安裝ansible
Ansible倉庫默認不在yum倉庫中,因此我們需要使用下面的命令啟用epel倉庫。
yum install epel-release -y
yum install ansible -y
2. ansible命令參數
anisble命令語法: ansible [-i 主機文件] [-f 批次] [組名] [-m 模塊名稱] [-a 模塊參數]
ansible詳細參數:
-v,–verbose # 詳細模式,如果命令執行成功,輸出詳細的結果 (-vv –vvv -vvvv)
-i PATH, -inventory=PATH # 指定 host 文件的路徑,默認是在 /etc/ansible/hosts
inventory [ˈɪnvəntri] 庫存
-f NUM,-forks=NUM # NUM 是指定一個整數,默認是 5 ,指定 fork 開啟同步進程的個數。
-m NAME,-module-name=NAME # 指定使用的 module 名稱,默認使用 command模塊
-a,MODULE_ARGS #指定 module 模塊的參數
-k,-ask-pass #提示輸入 ssh 的密碼,而不是使用基於 ssh 的密鑰認證
-sudo # 指定使用 sudo 獲得 root 權限
-K,-ask-sudo-pass #提示輸入 sudo 密碼,與 -sudo 一起使用
-u USERNAME,-user=USERNAME # 指定移動端的執行用戶
-C,–check #測試此命令執行會改變什么內容,不會真正的去執行
3. 生成密鑰
ssh-keygen默認就行
使用ssh-copy-id命令來復制Ansible公鑰到節點
ssh-copy-id root@節點ip
43. 定義主機清單
1、基於端口,用戶,密碼定義主機清單
ansible基於ssh連接-i (inventory)參數后指定的遠程主機時,也可以寫端口,用戶,密碼。
格式:ansible_ssh_port:指定ssh端口 ansible_ssh_user:指定 ssh 用戶 ansible_ssh_pass:指定 ssh 用戶登錄是認證密碼(明文密碼不安
全)
ansible_sudo_pass:指明 sudo 時候的密碼
vim /etc/ansible/hosts #文件 /etc/ansible/hosts 維護着Ansible中服務器的清單。在文件最后追加以下內容
[web-servers]
ansible服務器ip ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
[web-server]
節點ip

5. 測試主機連通性
ansible -i /etc/ansible/hosts web-servers -m ping
-i # 指定 host 文件的路徑,默認是在 /etc/ansible/hosts
-m # 指定使用的ping模塊
報錯:
192.168.1.63 | FAILED! => {
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
}
ssh root@192.168.1.63 #手動連接一下/etc/ansible/hosts主機清單中的主機,這樣就可以在ansible服務器上保存目標主機的fingerprint指紋。再連接試試,如果不行,修改配置文件ansible.cfg,將host_key_checking = False打開就OK了。

5.1 獲取節點服務器運行時間
ansible -m command -a "uptime" web-servers
ansible -i hosts web-servers -m command -a "uptime"


5.2 給節點增加用戶
ansible -i hosts web-servers -m command -a "useradd xiaoxiao"



5.3 scripts模塊
使用scripts模塊可以在本地寫一個腳本,在遠程服務器上執行
copy模塊
實現主控端向目標主機拷貝文件,類似scp功能
ansible -i /etc/ansible/hosts web-servers -m copy -a "src=/ai.sh dest=/tmp owner=liutao group=liutao mode=755"
相當於scp文件,可以定義擁有者,組以及權限。

5.4 獲取遠程文件信息
stat模塊
ansible -i hosts web-servers -m stat -a "path=/tmp/ai.sh"

5.5 get_url模塊實現遠程主機下載指定url到本地
ansible -i /etc/ansible/hosts web-servers -m get_url -a "url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm dest=/tmp/ mode=0440 force=yes"
注:url=https://xxx 的等號=前后不能有空格
如果force=yes,當下載文件時,如果所下的內容和原目錄下的文件內容不一樣,則替換原文件,如果一樣,就不下載了。
如果為“否”,則僅在目標不存在時才下載文件。 一般來說,只有小型本地文件才應該為“是”。 在0.6之前,該模塊表現為默認為“是”
5.6 yum模塊linux平台軟件包管理。
yum模塊可以提供的status狀態: latest ,present,installed #這3個代表安裝;removed, absent #后面2個是卸載
安裝http,mysql軟件
ansible -i /etc/ansible/hosts web-servers -m yum -a "name=httpd state=latest"
5.7 cron模塊:執行定時任務
ansible -i /etc/ansible/hosts web-servers -m cron -a "name='mkdir' minute=5 hour=02 day=15 month=8 weekday=3 job='mkdir /tmp/a.txt'"
minute hour day month weekday 分 時 日 月 周
5.8 service模塊 遠程主機系統服務管理
name參數:此參數用於指定需要操作的服務名稱,比如 nginx,httpd。
state參數:此參數用於指定服務的狀態,比如,我們想要啟動遠程主機中的httpd,則可以將 state 的值設置為 started;如果想要停止遠程主機中的服務,則可以將 state 的值設置為 stopped。此參數的可用值有 started、stopped、restarted(重啟)、reloaded。
enabled參數:此參數用於指定是否將服務設置為開機 啟動項,設置為 yes 表示將對應服務設置為開機啟動,設置為 no 表示不會開機啟動。
注:想使用service模塊啟動服務,被啟動的服務,必須可以使用service 命令啟動或關閉 reloaded, restarted, started, stopped 平滑重啟,重啟,啟動,關閉
enabled=yes開機自啟動,no開機不啟動
ansible -i /etc/ansible/hosts web-servers -m service -a "name=httpd state=started"
ansible -i /etc/ansible/hosts web-servers -m service -a "name=httpd enabled=yes"
5.9 sysctl模塊遠程主機sysctl配置。
開啟路由轉發功能
ansible -i /etc/ansible/hosts web-servers -m sysctl -a "name=net.ipv4.ip_forward value=1 reload=yes"
user模塊遠程主機用戶管理
ansible -i hosts web-servers -m user -a "name=xxx state=present"
state參數state=absent(刪除用戶,不刪除家目錄) 默認是present(創建用戶)
state=absent remove=yes(刪除用戶同事刪除家目錄,用戶不存在不操作)
