Ansible安裝部署和經常使用命令,及其主機清單inventory(二)

1.ansible的安裝方式

1.1使用yum源安裝

yum install ansible -y 

1.2使用rpm包安裝

https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

2.主機認證

2.1主機分配

  採用2臺主機作測試環境nginx

主控制端 192.168.152.129
被控制端 192.168.152.130

2.2單向主機認證

ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" -q  
ssh-copy-id  -i /root/.ssh/id_dsa.pub  root@192.168.152.130

2.3使用expect  

 expect工具實現非交互式的ssh-copy-id,避免每次都詢問登錄主機的用戶和密碼web

 同時也可使用,ansible自帶的批量添加祕鑰模塊,批量的分發到控制端節點,authorized_key模塊便可完成,詳見介紹經常使用的ansible的模塊。正則表達式

 

# 安裝expect
[root@server1 ~]# yum -y install expect

# expect腳本
[root@server1 ~]# cat auto_sshcopyid.expect 
#!/usr/bin/expect

set timeout 10
set user_hostname [lindex $argv 0]
set password [lindex $argv 1]

spawn ssh-copy-id $user_hostname
expect {
        "(yes/no)?"
        {
                send "yes\n"
                expect "*password: " { send "$password\n" }
        }
        "*password: " { send "$password\n" }
}

expect eof

# 批量調用expect的shell腳本
[root@server1 ~]# cat sshkey.sh 
#!/bin/bash

ip=`echo -n "$(seq -s "," 131 134),150" | xargs -d "," -i echo 192.168.152.{}`
password="123456"
#user_host=`awk '{print $3}' /root/.ssh/id_rsa.pub`

for i in $ip;do
        /root/auto_sshcopyid.expect root@$i $password &>>/tmp/a.log
        ssh root@$i "echo $i sure "
done

# 執行shell腳本配置互信
[root@server1 ~]# chmod +x /root/{sshkey.sh,auto_sshcopyid.expect}
[root@server1 ~]# ./sshkey.sh

  

 

 

3.主要配置文件

/etc/ansible/ansible.cfg       #主配置文件,配置ansible工做特性
/etc/ansible/hosts             #主機清單文件
/etc/ansible/rules             #角色目錄

/etc/ansible/ansible.cfg 配置文件簡單介紹:
[defaults]
# some basic default values...
#inventory      = /etc/ansible/hosts      #host的主機清單
#library        = /usr/share/my_modules/  #模塊目錄
#module_utils   = /usr/share/my_module_utils/ #模塊目錄
#remote_tmp     = ~/.ansible/tmp  # tmp遠端臨時存放的目錄 ,命令執行完目錄下生成的腳本刪除
#local_tmp      = ~/.ansible/tmp     #主控端執行命令的時候,把命令腳本存放,發送到被控制端的零時存放,執行完刪除
#forks          = 5  #指定進程爲5
#poll_interval  = 15  #拉取數據間隔時間
#sudo_user      = root  #主控端執行命令的時候非root身份,須要切換以什麼用戶身份執行命令
#ask_sudo_pass = True 
#ask_pass      = True
#transport      = smart
#remote_port    = 22  #默認端口號
#module_lang    = C
#module_set_locale = False
####
#host_key_checking = False   #檢查對應服務器的host_key ,建議取消註釋(不檢查第一次鏈接主機的時候 輸入yes)
#log_path=/var/log/ansible.log #日誌文件存放路徑
#roles_path    = /etc/ansible/roles:/usr/share/ansible/roles #roles相關
程序文件: /usr/bin/ansible #主程序,臨時命令執行工具 /usr/bin/ansible-doc #查看配置文檔,模塊功能查看工具   -a   #列出全部模塊的文檔   -l,--list   #列出能夠用的模塊   -s,--snippet   #顯示指定模塊的playbook片斷(顯示簡單的使用方法) /usr/bin/ansible-galaxy #下載/上傳優秀代碼或Roles模塊的官網平臺 /usr/bin/ansible-playbook #定製自動化任務,編排劇本工具/usr/bin/ansible-pull 遠程執行命令的工具: /usr/bin/ansible-vault #文件加密工具 /usr/bin/ansible-console #基於Console界面與用戶交互的執行工具

4.ansible的語法結構

功能:經過ssh實現配置管理、應用部署、任務執行等功能shell

語法:
    ansible <host-pattern> [options]
    ansible <host-pattern> [-m module_name] [-a args]
    ansible 主機清單 -m 模塊 -a 模塊參數(命令) [-o單行顯示]
經常使用選項:
    -m :模塊
    -a :模塊選項
    -o :結果單行顯示
    -u :主機的用戶名
    -k :密碼詢問方式
    -i :自定義主機清單文件
    –version                  顯示版本ansible的版本號
    -v 詳細過程                –vv -vvv更詳細
    –list-hosts               顯示主機列表,可簡寫--list
-k, –ask-pass 沒有作密碼密鑰認證的時候,須要加,提示鏈接密碼,默認Key驗證 -K, –ask-become-pass 遠端執行命令的時候是以誰的用戶身份執行,要輸入誰的密碼 -C, –check 檢查,並不執行 -T, –timeout=TIMEOUT 執行命令的超時時間,默認10s -u, –user=REMOTE_USER 遠端執行命令的時候是以誰的用戶身份執行, -b, –become 代替舊版的sudo 切換 root時候或者其餘用戶的時候使用    -B, 異步運行,並在多少秒後,超時就中止運行 例如 -B 200 ;默認是同步,保持長鏈接,等待讓全部任務完成返回結果。 -P, 異步運行間隔時間 默認15秒 -t, 執行及結果輸出到目錄,目錄名爲host的主機名做爲目錄名,也可作重定向使用       --syntax-check, 檢查playbook的語法,不執行語句內容

  

4.1特殊的表達式

支持正則表達式:

 *  支持通配符
示例:
ansible 「*」 -m ping
ansible 192.168.152.* -m ping
ansible 「*srvs」 -m ping

與:交集關係
示例: ansible 「web:&db」 -m ping 或: 示例: ansible 「websrvs:dbsrvs」 -m ping ansible 「192.168.152.130:192.168.152.131」 -m ping 非: ansible ‘websrvs:!dbsrvs’ -m ping 在websrvs組,但不在dbsrvs組中的主機 正則表達式: ansible 「~(web|db).*\.liych\.com」 -m ping

5.Inventory主機配置清單格式

  用於定義ansible要管理的主機列表,能夠定義單個主機和主機組,一般用於定義要管理主機的認證信息,例如ssh登陸用戶名,密碼等相關,主機配置文件在/etc/ansible/hosts就是默認的inventory。apache

  使用是須要定義主機清單,inventory經常使用的定義規則以下:bash

cat -n /etc/ansible/hosts

1)定義主機組方式
[webservers]     #一個組名
192.168.152.131  #組內主機
192.168.152.132

2)批量定義主機
[webservers]
192.168.152.[131:134]  #【能夠指定範圍】 通常爲順序可連表明着.131,132,133,134

3)域名批量定製
[websrvs]
www[01:100].example.com  #同上
[dbsrvs]
db-[a:f].example.com  #同上

4)內置參數:用戶名和密碼,ssh端口;命令行不用輸入-u和-k選項 在主機清單內設置密碼可見
[webservers]
192.168.152.[131:132] ansible_ssh_user='root' ansible_ssh_pass='123456' ansible_ssh_port='22'
  ansible_ssh_user #當前主機的用戶
  ansible_ssh_pass  #當前主機的密碼
  
5)vars變量 :定義主機的內置參數 
webservers] 
192.168.152.[131:132] 
[webservers:vars] #能夠設置一組,生效於多個主機 
ansible_ssh_user='root'
ansible_ssh_pass='123456'
ansible_ssh_port='22'

6)子組分類變量:children
[nginx]
192.168.152.131
[apache]
192.168.152.132
[webservers:children]
apache
nginx
[webservers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='123456'
ansible_ssh_port='22'

#以上表示定義2個組,而後把2個小組加到一個大組內(webservers) ,同時爲大組內的小組創建通用的通訊帳戶信息。

  

簡單命令執行,驗證是能夠通訊使用的。服務器

ping測試使用:ssh

建立目錄文件:異步

6.命令的執行過程:

1. 首先讀主配置文件並加載 默認/etc/ansible/ansible.cfg工具

2.獲取主機列表加載本身對應的模塊文件,如command等

3.經過ansible將模塊或命令生成對應的臨時py文件,並將該文件傳輸至遠程服務器的對應執行用戶$HOME/.ansible/tmp/ansible-tmp-數字/XXX.PY文件

4.給該文件傳輸至遠程服務器文件+x執行權限

5.主控制端執行並返回結果,輸出到屏幕

6.刪除臨時遠端的py臨時文件,sleep 0退出

6.1返回結果顏色說明:

綠色:執行成功

黃色:執行成功而且對目標主機作過修改,例如建立文件後,在同目錄下建立目錄的話,返回黃色,如上圖。

紅色:執行失敗

紫色:提示警告

 

下篇文章預告:介紹經常使用的ansible的模塊。

相關文章
相關標籤/搜索