Ansible基礎配置與常用模塊使用


環境介紹
Ansible服務端IP:192.168.2.215
Ansible客戶端IP:192.168.2.216、192.168.2.218、192.168.2.113
 
一、創建Ansible主配置文件
# mkdir /etc/ansible
# cd /etc/ansible
# vi ansible.cfg #添加如下內容
[defaults]
# some basic default values...
hostfile = /etc/ansible/hosts
library  = /usr/share/ansible
remote_tmp  = $HOME/.ansible/tmp
pattern  = *
forks  = 5
poll_interval = 15
sudo_user  = root
#ask_sudo_pass = True
#ask_pass  = True
transport  = smart
remote_port  = 33891
host_key_checking = False
log_path = /var/log/ansible.log

部分配置項說明:
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密碼
log_path= /var/log/ansible.log # ansible用戶時需要:chown -R admin:admin ansible.log(筆者服務器使用admin用戶)

二、創建主機分組文件

vi hosts  #支持IP和域名,支持分組,變量設置
[local]     #組名稱,本機
127.0.0.1
[test]     #組名稱,遠程服務器
192.168.2.216 ansible_ssh_user=admin ansible_ssh_port=33891
192.168.2.218 ansible_ssh_user=admin ansible_ssh_port=33891
192.168.2.113 ansible_ssh_user=admin ansible_ssh_port=33891

hosts文件內部支持的一些特定指令(inventory參數):
ansible_ssh_host:指定主機別名對應的真實IP,如:251ansible_ssh_host=183.60.41.251,隨后連接該主機無須指定完整IP,只需指定251就行
ansible_ssh_port:指定連接到這個主機的ssh端口,默認22
ansible_ssh_user:連接到該主機的ssh用戶
ansible_ssh_pass:連接到該主機的ssh密碼(連-k選項都省了),安全考慮還是建議使用私鑰或在命令行指定-k選項輸入
ansible_sudo_pass:sudo密碼
ansible_sudo_exe(v1.8+的新特性):sudo命令路徑
ansible_connection:連接類型,可以是local、ssh或paramiko,ansible1.2之前默認為paramiko
ansible_ssh_private_key_file:私鑰文件路徑
ansible_shell_type:目標系統的shell類型,默認為sh,如果設置csh/fish,那么命令需要遵循它們語法
ansible_python_interpreter:python解釋器路徑,默認是/usr/bin/python,但是如要要連*BSD系統的話,就需要該指令修改python路徑
ansible_*_interpreter:這里的"*"可以是ruby或perl或其他語言的解釋器,作用和ansible_python_interpreter類似

三、ssh免秘鑰登陸設置

# admin用戶
$ ssh-keygen -t rsa #每台機器上執行
$ ssh-copy-id admin@192.168.2.216
$ ssh-copy-id admin@192.168.2.218
$ ssh-copy-id admin@192.168.2.113

# 使用非默認22端口,例:
$ ssh-copy-id "-p 33891 192.168.2.113"

四、Ansible參數詳解

Usage:ansible <host-pattern> [options]
Options:
-m MODULE_NAME,--module-name=MODULE_NAME //要執行的模塊,默認為command
-a MODULE_ARGS,--args=MODULE_ARGS //模塊的參數
-u REMOTE_USER,--user=REMOTE_USER //ssh連接的用戶名,默認用root,ansible.cfg 中可以配置
-k,--ask-pass //提示輸入ssh登錄密碼,當使用密碼驗證登錄的時候用
-s,--sudo //sudo運行
-U SUDO_USER,--sudo-user=SUDO_USER //sudo到哪個用戶,默認為root
-K,--ask-sudo-pass //提示輸入sudo密碼,當不是NOPASSWD模式時使用
-B SECONDS,--background=SECONDS //runasynchronously,failingafterXseconds(default=N/A)
-P POLL_INTERVAL,--poll=POLL_INTERVAL //setthepollintervalifusing-B(default=15)
-C,--check //只是測試一下會改變什么內容,不會真正去執行
-c CONNECTION //連接類型(default=smart)
-f FORKS,--forks=FORKS //fork多少個進程並發處理,默認5
-i INVENTORY,--inventory-file=INVENTORY //指定hosts文件路徑,默認default=/etc/ansible/hosts
-l SUBSET,--limit=SUBSET //指定一個pattern,對<host_pattern>已經匹配的主機中再過濾一次
--list-hosts //只打印有哪些主機會執行這個playbook文件,不是實際執行該playboo
-M MODULE_PATH,--module-path=MODULE_PATH //要執行的模塊的路徑,默認為/usr/share/ansible/
-o,--one-line //壓縮輸出,摘要輸出
--private-key=PRIVATE_KEY_FILE //私鑰路徑
-T TIMEOUT,--timeout=TIMEOUT //ssh連接超時時間,默認10秒
-t TREE,--tree=TREE //日志輸出到該目錄,日志文件名會以主機名命名
-v,--verbose //verbose mode(-vvv for more,-vvvv to enable connection debugging)

基本格式:
ansible <pattern_goes_here> -m <module_name> -a <arguments>
匹配所有主機
*或者all
匹配多個組
group1:group2
在group1這個組里,但不能在group2這個組里的主機
group1:!group2
取兩個組的交集
group2:&group2
排除某一主機
ansible-playbook site.yaml --limit salt-msater
當然也可以用正則,在/etc/ansible/hosts里面去定義。如
~salt(master|minion)\.li*\.com

四、常用模塊使用

常用的模塊有:command、user、copy、cron、file、filesystem、group、hostname、mount、ping、yum、shell、service、script
ansible 默認提供了很多模塊來供我們使用。在 Linux 中,我們可以通過 ansible-doc -l 命令查看到當前 ansible 都支持哪些模塊,通過 ansible-doc -s 模塊名 又可以查看該模塊有哪些參數可以使用。
ping模塊
目的:檢查指定節點機器是否還能連通
命令:ansible test -m ping
執行效果:

command模塊
目的:在指定節點上運行nc命令,測試端口是否相通
命令:ansible test -m command -a 'nc -nz 192.168.2.213 80'
ansible默認使用的就是command模塊,所以命令可以簡寫成:
ansible test -a 'nc -nz 192.168.2.213 80'
執地效果:

shell模塊
目的:在指定節點查看進程
命令:ansible test -m shell -a 'ps -ef|grep nginx'
在這里我們使用command模塊可以嗎?不行。因為command模塊不支持管道、通配符等。
執地效果:

raw模塊
目的:在指定節點查看進程
命令:nsible test -m raw -a 'whoami'
執地效果:

command模塊不支持的特性,我們可以和shell模塊,shell模塊不支持的特性可以用raw模塊。

script模塊:
目的:在指定節點運行服務端的腳本
命令:ansible test -m script -a "/app/admin/sbin/test.sh"
先寫一個簡單腳本:
$ cat test.sh
#!/bin/bash
ps -ef|grep nginx

執行效果:

group模塊
目的:在所有節點上創建一個組名為nolinux,gid為2017的組
命令:ansible test -m group -a 'gid=2017 name=test' -s #創建用戶及組需要root權限,admin用戶具有sudo權限,因此命令后面使用-s,即使用sudo權限。
執行效果:

 

user模塊
目的:在指定節點上創建一個用戶名為test,組為test的用戶
命令:ansible test -m user -a 'name=test groups=test state=present' -s
執行效果:

copy模塊(文件較多情況下,效率不高)
目的:將主控方/app/admin/soft目錄推送到指定節點的/app/admin目錄下(效率太低下)
命令:ansible test -m synchronize -a 'src=/app/admin/soft dest=/app/admin/'
執行效果:

synchronize模塊
目的:將主控方/app/admin/soft目錄推送到指定節點的/app/admin目錄下(使用rsync同步文件,效率較高)
命令:ansible test -m synchronize -a 'src=/app/admin/soft dest=/app/admin/ delete=yes'
delete=yes 使兩邊的內容一樣(即以推送方為主)
compress=yes 開啟壓縮,默認為開啟
--exclude=.svn 忽略同步.svn結尾的文件
執行效果:

其它參數:

archive: 歸檔,相當於同時開啟recursive(遞歸)、links、perms、times、owner、group、-D選項都為yes ,默認該項為開啟
checksum: 跳過檢測sum值,默認關閉
compress:是否開啟壓縮
copy_links:復制鏈接文件,默認為no ,注意后面還有一個links參數
delete: 刪除不存在的文件,默認no
dest:目錄路徑
dest_port:默認目錄主機上的端口 ,默認是22,走的ssh協議
dirs:傳速目錄不進行遞歸,默認為no,即進行目錄遞歸
rsync_opts:rsync參數部分
set_remote_user:主要用於/etc/ansible/hosts中定義或默認使用的用戶與rsync使用的用戶不同的情況
mode: push或pull 模塊,push模的話,一般用於從本機向遠程主機上傳文件,pull 模式用於從遠程主機上取文件

get_url模塊
目的:將nginx的安裝包下載到指定節點的/tmp目錄下
命令:ansible test -m get_url -a 'url=http://124.202.164.11/files/3182000009C41C0C/nginx.org/download/C/nginx.org/download/nginx-1.10.3.tar.gz dest=/tmp'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM