1. 程式人生 > 其它 >Ansible基本配置以及使用示例

Ansible基本配置以及使用示例

##Ansible基本使用以及模組詳解

準備條件:注意:前提是ansible已經正常安裝,並且可以使用

1.在ansible主機上建立ssh公私鑰對

ansible-sh-4.1sh-4.1# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
de:74:be:8b:2e:a2:9f:03:78:a2:4a:40:27:ee:c5:3e [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
| o .             |
|o +              |
|.. +    S . .    |
|o = o  . o o     |
| + E .  . . .    |
|o   . o..  . .   |
|o   .ooo oo o.   |
+-----------------+
一切採用預設就行

2.在目標機新增ansible主機的公鑰 (當然也可以使用密碼驗證的方式):

注意:需要在目標主機的對應使用者家目錄下有.ssh目錄以及authorized_keys檔案,若無可以自行建立.ssh目錄許可權必須為0700,authorized_keys檔案的許可權必須為0644 將ansible主機的公鑰內容拷貝到目標主機,多種方式:

ansible-sh-4.1# ssh-copy-id /root/.ssh/id_rsa.pub 目標IP:       #預設就是將當前使用者的公鑰(id_rsa.pub)傳到目標主機並且存入認證檔案
target-sh-4.1#curl pd.api.com/host_key >> /root/.ssh/authorized_keys  #可以將ansible主機的公鑰檔案存入公共儲存,然後追加到目標主機的認證檔案中

3.測試連線

ansible-sh-4.2# ansible target-sh -m ping
target-sh | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

###Ansible目錄結構介紹以及配置介紹

1. Ansible目錄結構

使用rpm包或者apt包安裝會預設建立目錄結構,但是使用pip或者原始碼包需要對基本的目錄結構進行構建

  • 主配置檔案:/etc/ansible/ansible.cfg
  • 主機資訊配置檔案: /etc/ansible/hosts
  • roles規則目錄: /etc/ansible/roles/

2.優化後的配置配置:

ansible-sh-4.1#cat /etc/ansible/ansible.cfg
[defaults]                                    #常規連線類配置
inventory      = /etc/ansible/hosts           #定義主機資訊配置檔案,預設路徑
forks          = 5                            #定義預設開啟的併發數
poll_interval  = 15                           #定義輪詢時間間隔
sudo_user      = root                         #定義預設sudo使用者
#ask_sudo_pass  = True                        #是否需要sudo密碼
#ask_pass      = True                         #是否需要密碼
remote_port    = 51899                        #定義ssh埠
roles_path    = /etc/ansible/roles            #預設的role規則路徑
host_key_checking = False                     #首次連線檢查key認證(record_host_keys協作使用)
timeout = 10                                  #預設超時時間
log_path = /var/log/ansible.log               #預設日誌路徑
deprecation_warnings = Flase                  #該引數在使用playbooks操作的時候sudo許可權不會進行提示
nocows = 1                                    #關閉cowsay功能,如果需要啟用的話必須首先安裝了cowsay才可以
nocolor = 0                                   #開啟顏色,下面的colors設定相關的顏色
[privilege_escalation]                        #許可權管理
#become    = True                             #是否sudo
#become_method  = True                        #sudo方式
#become_user    = root                        #sudo後變成root使用者
#become_ask_pass= False                       #sudo後是否驗證密碼  

[paramiko_connection]                         #連線配置
record_host_keys=Flase                        #記錄新主機的key.在host_key_checking 被禁用時候,設定為False時,效能將會提升

[ssh_connection]                              #ssh協議連線配置
ssh_args = -C -o ControlMaster=auto -o ControlPersist=1800s    #傳遞一組選項給Ansible,而不是使用以前的預設值.ControlPersist的值提高會提高效能,30分鐘會比較合適

[accelerate]                                  #加速配置
#accelerate_port = 5099                       #加速連線埠
#accelerate_timeout = 30                      #命令執行超時時間,單位秒
#accelerate_connect_timeout = 5.0             #連線超時時間
#accelerate_daemon_timeout = 30               #上一個活動連線的時間,單位分鐘

[selinux]                                     #該引數一般不會使用
[colors]                                      #配置常用的顏色
highlight = white
verbose = blue
warn = bright purple
error = red
ok = green
changed = yellow
diff_add = green
diff_remove = red
diff_lines = cyan
pipelining=true

###Ansible 模組使用指南: 使用Ad-Hoc模式(在命令列中定義任務並執行)來測試模組 格式如下:

ansible <host-pattern> -m module -a 'args' options

**ansible的Ad-Hoc模式特殊選項options:**可以在後面加上-C引數,這樣將預覽未來要做的操作,但是不會真正執行; --sudo表示使用sudo去執行相關的操作

####copy模組使用詳情 相關選項如下: backup:在覆蓋之前,將原始檔備份,備份檔案包含時間資訊。有兩個選項:yes|no content:用於替代“src”,可以直接設定指定檔案的值 dest:必選項。要將原始檔複製到的遠端主機的絕對路徑,如果原始檔是一個目錄,那麼該路徑也必須是個目錄 directory_mode:遞迴設定目錄的許可權,預設為系統預設許可權 force:如果目標主機包含該檔案,但內容不同,如果設定為yes,則強制覆蓋,如果為no,則只有當目標主機的目標位置不存在該檔案時,才複製。預設為yes others:所有的file模組裡的選項都可以在這裡使用 src:被複制到遠端主機的本地檔案,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它將遞迴複製。在這種情況下,如果路徑使用“/”來結尾,則只複製目錄裡的內容,如果沒有使用“/”來結尾,則包含目錄在內的整個內容全部複製,類似於rsync。

**示例1:**使用copy模組進行遠端拷貝檔案,並賦予相關的許可權。預設使用sudo切換到root執行

ansible jrm -m copy -a 'src=env.sh dest=/export/Domains/jrmcalendar.jd.local/server1/bin/ owner=admin group=admin mode=0755' --sudo

注意:copy模組中: backup=yes 會在目標路徑下備份一份檔案出來 如下命令會預覽在目標主機執行的操作,但是不會真正執行

ansible jrm -m copy -a 'src=start.sh dest=/export/Domains/jrmcalendar.jd.local/server1/bin/start.sh owner=admin group=admin mode=0755 backup=yes' --sudo -C

####file模組使用詳情 相關選項如下: force:需要在兩種情況下強制建立軟連結,一種是原始檔不存在,但之後會建立的情況下;另一種是目標軟連結已存在,需要先取消之前的軟鏈,然後建立新的軟鏈,有兩個選項:yes|no group:定義檔案/目錄的屬組 mode:定義檔案/目錄的許可權 owner:定義檔案/目錄的屬主 path:必選項,定義檔案/目錄的路徑 recurse:遞迴設定檔案的屬性,只對目錄有效 src:被連結的原始檔路徑,只應用於state=link的情況 dest:被連結到的路徑,只應用於state=link的情況 state

directory:如果目錄不存在,就建立目錄 file:即使檔案不存在,也不會被建立 link:建立軟連結 hard:建立硬連結 touch:如果檔案不存在,則會建立一個新的檔案,如果檔案或目錄已存在,則更新其最後修改時間 absent:刪除目錄、檔案或者取消連結檔案

**示例2:**使用file模組在原始檔不存在的情況下強制建立軟鏈:

ansible jrapp-h5 -m file -a "src=/export/Instances/licai.base.fundredempt/runtime dest=/export/App/sc.licai.base.jd.local/fund state=link force=yes " --sudo

####command模組使用詳情 相關選項如下: creates:一個檔名,當該檔案存在,則該命令不執行 free_form:要執行的linux指令 chdir:在執行指令之前,先切換到該目錄 removes:一個檔名,當該檔案不存在,則該選項不執行 executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑

####shell模組詳情 與command不同的是,此模組可以支援命令管道,同時還有另一個模組也具備此功能:raw

示例:
## 先在本地建立一個SHELL指令碼
# vim /tmp/rocketzhang_test.sh
#!/bin/sh
date +%F_%H:%M:%S

#chmod +x /tmp/rocketzhang_test.sh

## 將建立的指令碼檔案分發到遠端
# ansible storm_cluster -m copy -a "src=/tmp/rocketzhang_test.sh dest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755"

##然後遠端執行該指令碼
#ansible storm_cluster -m shell -a '/tmp/rocketzhang_test.sh'

**示例3:**使用yum模組進行安裝服務

#ansible bigdata -m yum -a "name=ntp state=present"
#ansible bigdata -m copy -a 'src=ntp.conf dest=/etc/ntp.conf backup=yes'

**示例4:**使用service模組進行管理服務

# ansible bigdata -m service -a "name=ntpd state=restarted"

**示例5:**使用pip模組安裝python依賴包

# ansible bigdata -m pip -a 'name=docker state=present'