ansible史上最全常見企業級應用模塊詳解

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

Alt text

  • 刪除galaxy角色包
ansible-galaxy remove geerlingguy.redis

ansible模塊詳解

ping模塊

  1. 一個簡單的測試模塊,這個模塊總是返回‘pong’在成功連接時,這個模塊在劇本中時沒有意義的,但是能夠使用ansible命令驗證登陸能力和用於pyth的配置,
  2. 這個並不是傳統的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模塊

Alt text
使用說明

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,及抓取時的文件的路徑!
因爲只能抓取一個文件,可以先行打包文件,然後在抓取壓縮包
Alt text

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)

  1. 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'

Alt text

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章