1. 程式人生 > 其它 >Ansible的常用模組

Ansible的常用模組

Ansible的常用模組

Ansible的常用模組

ansible的執行

  • ad-hoc
  • playbook

ansible ad-hoc的基本概述

什麼是ansible ad-hoc

ad-hoc:臨時的命令,執行後結束,不會儲存

ad-hoc模式的使用場景

比如在多臺機器上檢視某個程序是否啟動,或拷貝指定檔案到本地,等等

ad-hoc模式的命令使用

# 1.語法
ansible 主機名(主機清單中的主機名或主機組) -m 模組名 [-a 動作]

[root@m01 ~]# ansible web_group -m shell -a 'free -m'
web01 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         196         310          41         465         553
Swap:          1023           0        1023
web02 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         191         429          43         351         567
Swap:          1023           0        1023

ad-hoc結果返回顏色

  • 綠色: 被管理端執行成功,並且結果不會發生改變
  • 黃色: 被管理端執行成功,但是結果是變化的
  • 紅色: 執行失敗,注意看報錯

Ansible常用模組

ansible 檢視模組的命令

ansible-doc 模組名

[root@m01 ~]# ansible-doc yum

Ansible命令模組:command、shell、script

command模組

# 語法
ansible web_group -m command -a '命令'(不帶特殊符號)

# 舉例
[root@m01 ~]# ansible web_group -m command -a 'df -h'
web01 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.7G   17G  10% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       497M  120M  378M  25% /boot
tmpfs            98M     0   98M   0% /run/user/0
web02 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.9G   17G  10% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       497M  120M  378M  25% /boot
tmpfs            98M     0   98M   0% /run/user/0

shell模組

# 語法
ansible web_group -m shell -a '命令'

[root@m01 ~]# ansible web_group -m shell -a 'free -m'
web01 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         196         310          41         465         553
Swap:          1023           0        1023
web02 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         191         429          43         351         567
Swap:          1023           0        1023

script模組(遠端執行指令碼)

# ansible遠端執行指令碼
ansible web_group -m script -a '指令碼路徑'

# 建立指令碼
[root@m01 ~]# cat test.sh 
#!/bin/bash
mkdir /root/dsr -p
echo 123 > /root/dsr/text

#在本地執行模組,等同於在遠端執行,不需要將指令碼檔案進行推送目標主機執行
[root@m01 ~]# ansible web_group -m script -a '/root/test.sh'

[root@web01 ~]# cat /root/dsr/1.txt 
123
[root@web02 ~]# cat /root/dsr/1.txt
123

ansible軟體管理模組:yum、yum_repository

yum模組(安裝,刪除軟體)

# 語法
ansible web_group -m yum -a 'name=包名 state=安裝或刪除'

# 選項
	- name:
		-直接指定包名:從倉庫安裝
		-http://    從指定URL安裝
		-file://    從本地安裝 類似於 yum
		
	- state:
    	-present     安裝軟體包
    	-absent      刪除軟體包
    	-latest      安裝最新軟體包
    	
    - download_only:
    	-true: 只下載不安裝
    	-false: 下載並安裝
    	
 [root@m01 ~]# ansible-doc yum
exclude=kernel*,foo*            #排除某些包
list=ansible                    #類似於yum list檢視是否可以安裝
disablerepo="epel,ol7_latest"   #禁用指定的yum倉庫
download_only=true              #只下載不安裝 yum install d

# 同時在web01和web02安裝tree
[root@m01 ~]# ansible web_group -m yum -a 'name=tree state=present'
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "changes": {
        "installed": [
            "tree"
        ]
    }, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\nResolving Dependencies\n--> Running transaction check\n---> Package tree.x86_64 0:1.6.0-10.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package        Arch             Version                   Repository      Size\n================================================================================\nInstalling:\n tree           x86_64           1.6.0-10.el7              base            46 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 46 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : tree-1.6.0-10.el7.x86_64                                     1/1 \n  Verifying  : tree-1.6.0-10.el7.x86_64                                     1/1 \n\nInstalled:\n  tree.x86_64 0:1.6.0-10.el7                                                    \n\nComplete!\n"
    ]
}

yum_repository模組(建立,追加,刪除yum倉庫

# 語法
 ansible 主機名 -m yum_repository -a ‘name=倉庫名 description=描述 baseurl=倉庫url gpgcheck=yes或no enabled=yes或no file=倉庫的檔名’

# 選項
yum_repository
	- name:倉庫名字(如果有file,只是倉庫名,如果沒有file,檔名和倉庫名)
	- file:指定倉庫的檔名
	- description:倉庫的描述(name)
	- baseurl:倉庫的url
	- gpgcheck:
		- no:不開啟 0
		- yes:開啟 1(預設)
	- enabled:
		- no:不開啟 0
		- yes:開啟 1 (預設)
	- state:
    	-present:建立倉庫(預設可寫可不寫)
    	-absent : 刪除倉庫    
    	    

## 建立新的倉庫配置檔案
[root@m01 ~]# ansible lb_group -m yum_repository -a 'name=dsr description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'

[root@lb01 ~]# cat /etc/yum.repos.d/dsr.repo 
[dsr]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx

[root@lb02 ~]# cat /etc/yum.repos.d/dsr.repo
[dsr]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx

## 建立新的倉庫配置,並且檔名和倉庫名不同
ansible web01 -m yum_repository -a 'name=local file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'

[root@m01 ~]# ansible web01 -m yum_repository -a 'name=local file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "repo": "local", 
    "state": "present"
}
[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo 
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx


## 追加倉庫
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=test2 file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo 
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx

[test2]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx


## 刪除倉庫
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=test2 file=zls_local state=absent'
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "repo": "test2", 
    "state": "absent"
}

[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo 
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx

Ansible檔案管理模組:copy、file、get_url

copy模組(遠端推送、將命令變成cp命令,拷貝軟連結)

# 語法
ansible 主機名 -m 模組名 -a 'src=原始檔 dest=目標路徑'

# 選項
copy
	- src:指定原始檔的路徑
	- dest:指定目標路徑
	- owner:指定屬主
	- group:指定屬組
	- mode:指定許可權
	- backup:
		- yes:如果目標路徑,存在同名檔案,就將目標檔案備份
		- no:不備份直接覆蓋(預設)
	- content:將指定文字內容覆蓋到目標檔案中
	- remote_src:將命令變成cp
		- yes:將原始檔,程式設計遠端的原始檔(ansible被管理端)
		- no:原始檔還是本地檔案(ansible管理端 預設)
	- follow:拷貝軟連線
		- yes:會將軟連線一起拷貝
		- no:會生成一個新的軟連線檔案
	


## 遠端推送檔案
[root@m01 ~]# ansible lb01 -m copy -a 'src=/etc/passwd dest=/tmp'
[root@lb01 ~]# ll /tmp/
-rw-r--r-- 1 root root 1022 Aug 11 04:15 passwd

## 遠端有同名檔案時,想把同名檔案備份
[root@m01 ~]# ansible lb01 -m copy -a 'src=/etc/passwd dest=/tmp backup=yes'
[root@lb01 ~]# ll /tmp/
total 8
-rw-r--r-- 1 root root 1022 Aug 11 04:24 passwd
-rw-r--r-- 1 root root 1041 Aug 11 04:24 passwd.63406.2021-08-11@04:24:59~