ansible常見企業級應用模塊詳解
查看模塊幫助文檔
ansible-doc -l #查看所有模塊
ansible-doc -s MODULE_NAME #查看指定模塊的詳細幫助
ansible命令應用基礎使用
ansible: (host-pattern)
#語法說明:
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
#參數說明:
-f forks #啓動的併發線程數
-m module_name #要使用的模塊
-a args #模塊特有的參數
ansible-galaxy
連接galaxy.ansible.com下載相應的roles(角色)
- 列出所有已經安裝的galaxy
ansible-galaxy list
- 安裝galaxy,角色包
ansible-galaxy install geerlingguy.redis
- 刪除galaxy角色包
ansible-galaxy remove geerlingguy.redis
ansible模塊詳解
ping模塊
- 一個簡單的測試模塊,這個模塊總是返回‘pong’在成功連接時,這個模塊在劇本中時沒有意義的,但是能夠使用ansible命令驗證登陸能力和用於pyth的配置,
- 這個並不是傳統的ICMP ping,而是先檢查能否通過SSH登陸節點,在檢查python版本是否滿足要求,能滿足返回pong,
[root@m01 /server/scripts 20:37:43]# ansible shuai -m ping
172.16.1.31 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.1.41 | SUCCESS => {
"changed": false,
"ping": "pong"
}
copy模塊
使用說明
ansible 主機組模塊名 -m 模塊名稱-a “src=源 dest=目標”
ansible 主機組模塊名 -m 模塊名稱 -a “src=源 dest=目標 backup=yes”
說明:backup選項在分發文件前,對以後源文件進行備份
ansible 主機組模塊名-m 模塊名稱 -a “src=源 dest=目標 mode=600 owner=shuai
group=shuai backup=yes”
說明:更改用戶權限
ansible 主機組模塊名 -m 模塊名稱 -a “content='shuai NB\n' dest=目標/zhang.txt mode=600 owner=shuai group=shuai backup=yes”
ansible 主機組模塊名-m 模塊名稱 -a “src=源 dest=目標/a/b/c/d/e/f mode=600 owner=shuiai group=shuai backup=yes
說明:可以遞歸創建目錄,但是不能跟文件名!
小技巧可以把主控端的某個服務的配置文件複製一份直接copy到被控端,直接覆蓋/變動文件
fetch: (從客戶端取單個文件)
從被控端取文件到主控端,與copy模塊相反
注意!只能抓取被控端的單個
!文件
!,不能是目錄
!
# 演示
ansible app -m fetch -a 'src=/ansible/1.sh dest=/data/'
src : 源
dest : 目標,在抓取文件到主控端後,會生成一個被控端主機IP,及抓取時的文件的路徑!
因爲只能抓取一個文件,可以先行打包文件,然後在抓取壓縮包
shell模塊:(萬能模塊、可以操作特殊符號)
ansible 主機組模塊名 -m 模塊名稱 -a “腳本/server/scripts/ceshi.sh”
ansible 主機組模塊名 -m 模塊名稱 -a “命令tree /tmp”
ansible 主機組模塊名 -m 模塊名稱script -a "腳本" # 利用script模塊執行腳本
說明:script模塊與shell模塊的區別
(1)shell:需要將腳本文件複製到遠程服務器,然後執行遠程服務器上的腳本
(2)script:不需要將腳本文件複製到遠程服務器上,實質是將腳本執行過程在遠程服務器上進行執行
script模塊: (運行腳本)
(1)script模塊的作用是在運行腳本的是,無需
在被控端運行腳本
,直接在主控端寫好腳本
後,直接運行,會在所有被控端主機上執行
主控端裏的腳本內容
(2)相當於scp+shell組合
# 格式
ansible 172.16.1.21 -m script -a
'/PATH/TO/SCRIPT_FILE'
#演示
ansible 172.16.1.21 -m script -a ceshi.sh
"changed": true,
"rc": 0,
"stderr": "Shared connection to 172.16.1.21 closed.\r\n",
"stderr_lines": [
"Shared connection to 172.16.1.21 closed."
],
"stdout": "node1\r\nnode1\r\n",
"stdout_lines": [
"node1",
"node1"
]
}
command模塊 :(最通用的功能、默認模塊)
因爲是默認模塊可以不寫command
ansible app -a 'df -h'
ansible shuai -m command -a "free -m"
ansible shuai -m command -a "cat /etc/redhat-release"
# 說明:執行一個命令在遠程節點上
特殊點
:不支持的字符,例如 > < | &等 $HOME,替代方案利用用shell模塊
ansible shuai -m shell -a "ps -ef|grep ssh"
ansible shuai -m shell -a "echo oldboy >/tmp/a.log"
yum模塊:通過yum模塊安裝軟件
依賴於機器裏的yum源,如果yum源不匹配會安裝失敗
# 安裝nmap包
ansible shuai -m yum -a “name=nmap state=installed”
#多個包一起安裝方法
name=vsftp,nmap,nginx,mysql
#卸載包
ansible shuai -m yum -a "name=nmap state=removed"
#更新yum緩存
ansible shuai -m yum -a “name=nmap update_cache=yes”
小技巧:
如果是在互聯網上下載下來的rpm包
,可以先從主控端使用copy模塊
複製到被控端,然後在使用yum模塊
進行安裝!
service模塊:管理軟件服務
ansible 主機 -m service -a “name=服務名 state=狀態
ansible app -m service -a "name=vsftp state=started"
ansible app -m service -a "name=vsftp state=started enabled=yes"
都是過去式(stoped/restarted/started)
enabled=是否開機啓動<===>yes/no”
file模塊:設置文件屬性
說明:設置文件屬性信息/鏈接/目錄或者移動文件/鏈接/目錄,很多相同的模塊有(copy/template/assemble)
- file模塊參數使用說明:
ansible 主機 -m 模塊 -a src= dest= state=
# 創建硬連接
ansible shuai -m file -a "src=源,遠程主機信息 dest=目標 state=hard"
# 創建軟連接,於copy的src不同的是copy是指本地源,file的src是指遠端
ansible shuai -m file -a "src=源,遠程主機信息 dest=目標 state=link"
# 創建目錄
ansible shuai -m file -a “dest=目標 state=directory”
# 創建文件,類似於touch命令的工作方式
ansible shuai -m file -a “dest=目標 state=touch”
#或
ansible app -m file -a 'name=/ansible/f2 state=touch'
# 遞歸刪除,如果文件鏈接會取消鏈接
ansible shuai -m file -a “dest=目標 state=absent”
# 更改用戶權限
ansible app -m file -a 'path=/ansible/1.sh owner=root mode=777'
上面用到的:
path/name/dest
都是相同的作用
state : 狀態,指定一個操作命令
cron模塊:計劃任務管理模塊
- 參數:
minute: # Minute when the job should run ( 0-59, *, */etc )
hour: # Hour when the job should run ( 0-23, *, */2, etc )
day: # Day of the month the job should run ( 1-31, */2, etc )
month: # Month of the year the job should run ( 1-12, */2, etc )
weekday: # Day of the week that the job should run ( 0- for Sunday-Saturday, *, etc )
job: # The command to execute or, if env is set, the value of environment variable. The command should not contain line breaks. Required if state=present(指定要幹什麼事/添加,默認參數,如果不等於會出錯).
- 正常寫法:
* * * * * /bin/sh /server/scripts/test.sh &>/dev/null
- 模塊寫法:
# 例一:
ansible shuai -m cron -a "name=alicron minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"
# 例二:刪除任務/慎用
ansible shuai -m cron -a "name=alicron minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' state=absent"
# 例三:註釋定時任務信息
ansible shuai -m cron -a "name=alicron minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'disabled=yes/no“
name=alicron #給計劃任務起名,可以防止多重添加一樣的定時任務
hostname: (管理主機名)
修改主機名,並且連帶修改掉
/etc/hostname
文件內容
ansible app -m hostname -a 'name=appserver'
user : (管理用戶)
Ansible user模塊主要用於操作系統用戶、組、權限、密碼等操作
- user模塊使用詳解:
system:默認創建爲普通用戶,爲
yes
則創建系統用戶
append:添加一個新的組
comment:添加描述信息
createhome:給用戶創建家目錄
force:強制刪除用戶
group:創建用戶主組
groups:將用戶加入組或者附屬組添加
home:指定用戶的家目錄
name:表示狀態,是否create、remove、modify
password:指定用戶的密碼,爲加密密碼
remove:刪除用戶
shell:設置用戶的shell登錄環境
uid:設置用戶ID
update_password:修改用戶密碼
state:用戶狀態,默認爲present,表示新建用戶
- 模塊使用演示
# 創建用戶
nsible app -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=504 comment="nginx service"'
# 刪除用戶並刪除家目錄
ansible app -m user -a 'name=nginx state=absent remove=yes'
mount模塊:掛載模塊
- 配置掛載點
參數說明:
dump
fstype:必選項,掛載文件的類型
name:必選項,掛載點
opts:傳遞給mount命令的參數
src:必選項,要掛載的文件
state:必選項
present:只處理fstab中的配置
absent:刪除掛載點
mounted:自動創建掛載點並掛載之
umounted:卸載
- 模塊演示說明:
ansible test -m mount -a 'name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present'
ansible test -m mount -a 'name=/srv/disk src='LABEL=SOME_LABEL' state=present'
ansible test -m mount -a 'name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present'
ansible test -m mount -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
ansible test -m mount -a 'losetup /dev/loop0 /disk.img'
ansible test -m filesystem 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'
synchronize模塊:使用rsync同步文件模塊
- 使用rsync同步文件,其參數如下:
(1)archive: 歸檔,相當於同時開啓recursive(遞歸)、links、perms、times、owner、group、-D選項都爲yes ,默認該項爲開啓
(2)checksum: 跳過檢測sum值,默認關閉
(3)compress:是否開啓壓縮
(4)copy_links:複製鏈接文件,默認爲no ,注意後面還有一個links參數
(5)delete: 刪除不存在的文件,默認no
(6)dest:目錄路徑
(7)dest_port:默認目錄主機上的端口 ,默認是22,走的ssh協議
(8)dirs:傳速目錄不進行遞歸,默認爲no,即進行目錄遞歸
(9)rsync_opts:rsync參數部分
(10)set_remote_user:主要用於/etc/ansible/hosts中定義或默認使用的用戶與rsync使用的用戶不同的情況
(11)mode: push或pull 模塊,push模的話,一般用於從本機向遠程主機上傳文件,pull 模式用於從遠程主機上取文件
- 模塊使用演示
ansible app -m synchronize -a 'src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"'
# 複製鏈接文件
ansible app -m synchronize -a 'src=some/relative/path dest=/some/absolute/path archive=no links=yes'
ansible app -m synchronize -a 'src=some/relative/path dest=/some/absolute/path checksum=yes times=no'
ansible app -m synchronize -a 'src=/tmp/helloworld dest=/var/www/helloword rsync_opts=--no-motd,--exclude=.git mode=pull