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

Ansible常用模組介紹

ansible 預設提供了很多模組來供我們使用。在 Linux 中,我們可以通過 ansible-doc -l 命令檢視到當前 ansible 都支援哪些模組,通過 ansible-doc -s 模組名 又可以檢視該模組有哪些引數可以使用。
官網文件:http://docs.ansible.com/ansible/latest/list_of_all_modules.html

Ansible常用模組
1、ping模組
2、raw模組
3、yum模組
4、apt模組
5、pip模組
6、synchronize模組
7、template模組
8、copy模組
9、user 模組與group模組
10、service 模組
11、get_url 模組
12、fetch模組
13、file模組
14、unarchive模組
15、command 模組和shell

1、ping模組
檢查指定節點機器是否還能連通,用法很簡單,不涉及引數,主機如果線上,則回覆pong
ansible 10.1.1.113 -m ping

[root@localhost ~]# ansible erp -m ping
192.168.10.6 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.168.10.7 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

2、raw模組
執行原始的命令,而不是通過模組子系統。在任何情況下,使用shell或命令模組是合適的。給定原始的引數直接通過配置的遠端shell執行。可返回標準輸出、錯誤輸出和返回程式碼。此模組沒有變更處理程式支援。
這個模組不需要遠端系統上的Python,就像指令碼模組一樣。此模組也支援Windows目標。

- name: Bootstrap a legacy python 2.4 host
  raw: yum -y install python-simplejson

- name: Bootstrap a host without python2 installed
  raw: dnf install -y python2 python2-dnf libselinux-python

- name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)
  raw: cat < /tmp/*txt
  args:
    executable: /bin/bash

- name: safely use templated variables. Always use quote filter to avoid injection issues.
  raw: "{{package_mgr|quote}} {{pkg_flags|quote}} install {{python_simplejson|quote}}"

3、yum模組
這個模組是RedHat / CentOS作為遠端節點的OS的時候,用的最多的。Yum是啥就不多說了,RedHat / CentOS包管理工具
使用`yum’軟體包管理器管理軟體包,其選項有:
– config_file:yum的配置檔案 (optional)
– disable_gpg_check:關閉gpg_check (optional)
– disablerepo:不啟用某個源 (optional)
– enablerepo:啟用某個源(optional)
– name:要進行操作的軟體包的名字,預設最新的程式包,指明要安裝的程式包,可以帶上版本號,也可以傳遞一個url或者一個本地的rpm包的路徑
– state:狀態(present,absent,latest),表示是安裝還解除安裝
   present:預設的,表示為安裝
   lastest: 安裝為最新的版本
   absent:表示刪除

[root@localhost ~]# ansible test -m yum -a 'name=httpd state=latest'
[root@localhost ~]# ansible test -m yum -a 'name="@Development tools" state=present'
[root@localhost ~]# ansible test -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'


4、apt模組
這個模組是ubuntu作為遠端節點的OS的時候,用的最多的。Apt是啥就不多說了,Ubuntu/Debian的包管理工具。
– deb: 用於安裝遠端機器上的.deb字尾的軟體包(optional)
– install_recommends:這個引數可以控制遠端電腦上是否只是下載軟體包,還是下載後安裝,預設引數為true,設定為false的時候只下載軟體包,不安裝
– update_cache: 當這個引數為yes的時候等於apt-get update(optional)
– name: apt要下載的軟體包名字,支援name=git=1.6 這種制定版本的模式
– state:狀態(present,absent,latest),表示是安裝還解除安裝
   present:預設的,表示為安裝
   lastest: 安裝為最新的版本
   absent:表示刪除

# 在安裝foo軟體包前更新然後安裝foo
- apt: name=foo update_cache=yes
# 移除foo軟體包
- apt: name=foo state=absent
# 安裝foo軟體包
- apt: name=foo state=present
# 安裝foo 1.0軟體包
- apt: name=foo=1.00 state=present
# 安裝nginx最新的名字為squeeze-backport釋出包,並且安裝前執行更新
- apt: name=nginx state=latest default_release=squeeze-backports update_cache=yes
# 只下載openjdk-6-jdk最新的軟體包,不安裝
- apt: name=openjdk-6-jdk state=latest install_recommends=no
# 安裝所有軟體包到最新版本
- apt: upgrade=dist
# 更新apt-get的list
- apt: update_cache=yes
# 3600秒後停止update_cache
- apt: update_cache=yes cache_valid_time=3600

# 安裝遠端節點上的/tmp/mypackage.deb軟體包
- apt: deb=/tmp/mypackage.deb

5、pip模組
用於管理Python庫依賴項,為了使用pip模組,必須提供引數name或者requirements
– chdir: 執行pip命令前cd進入的目錄
– name:要安裝的Python庫的名稱或遠端包的URL。
– requirements:一個pip requirements.txt檔案的路徑,它應該是遠端系統的本地檔案,如果使用chdir選項,則可以將檔案指定為相對路徑。
– version:指定的Python庫的安裝版本。
– extra_args:額外的引數傳遞給pip。
– executable:顯式可執行檔案或可執行檔案的路徑名,用於為系統中安裝的特定版本的Python執行pip。 例如pip-3.3,如果系統中安裝了Python 2.7和3.3,並且想要為Python 3.3安裝執行pip。 它不能與“virtualenv”引數一起指定(在2.1中新增)。 預設情況下,它將採用適用於python直譯器的版本。 pip3在python 3上,pip2或pip在python 2上。
– virtualenv:要安裝到的virtualenv目錄的可選路徑。 它不能與’executable’引數一起指定(在2.1中新增)。 如果virtualenv不存在,則將在安裝軟體包之前建立它。 可選的virtualenv_site_packages,virtualenv_command和virtualenv_python選項會影響virtualenv的建立。
– virtualenv_command:用於建立虛擬環境的命令或路徑名。 例如pyvenv,virtualenv,virtualenv2,~/bin /virtualenv,/usr/local/bin/virtualenv。
– virtualenv_python:用於建立虛擬環境的Python可執行檔案。 例如python3.5,python2.7。 未指定時,將使用用於執行ansible模組的Python版本。 當virtualenv_command使用pyvenv或-m venv模組時,不應使用此引數。
– state:狀態(present,absent,latest, forcereinstall),表示是安裝還解除安裝
   present:預設的,表示為安裝
   lastest: 安裝為最新的版本
   absent:表示刪除
   forcereinstall:“forcereinstall”選項僅適用於可ansible 2.1及更高版本。

# 安裝bottle python包。
- pip:
    name: bottle

# 在0.11版安裝bottle python包。
- pip:
    name: bottle
    version: 0.11

# 使用遠端協議(bzr +,hg +,git +,svn +)安裝MyApp。 您不必在extra_args中提供'-e'選項。
- pip:
    name: svn+http://myrepo/svn/MyApp#egg=MyApp

# 使用遠端協議(bzr +,hg +,git +)安裝MyApp。
- pip:
    name: git+http://myrepo/app/MyApp
    
# 從本地壓縮包安裝MyApp
- pip:
    name: file:///path/to/MyApp.tar.gz
    
# 將bottle安裝到指定的virtualenv中,繼承全域性安裝的模組
- pip:
    name: bottle
    virtualenv: /my_app/venv
    virtualenv_site_packages: yes
    
# 使用Python 2.7將bottle安裝到指定的virtualenv中
- pip:
    name: bottle
    virtualenv: /my_app/venv
    virtualenv_command: virtualenv-2.7

# 在使用者主目錄中安裝bottle。
- pip:
    name: bottle
    extra_args: --user

# 安裝指定的python requirements
- pip:
    requirements: /my_app/requirements.txt

# 在指定的virtualenv中安裝指定的python requirements。
- pip:
    requirements: /my_app/requirements.txt
    virtualenv: /my_app/venv

# 安裝指定的python requirements和自定義pip源URL
- pip:
    requirements: /my_app/requirements.txt
    extra_args: -i https://example.com/pypi/simple

# 專門為Python 3.3安裝bottle,使用'pip-3.3'可執行檔案。
- pip:
    name: bottle
    executable: pip-3.3

# 安裝 bottle,如果已安裝,強制重新安裝
- pip:
    name: bottle
    state: forcereinstall


6、synchronize模組
– 使用rsync同步檔案,將主控方目錄推送到指定節點的目錄下,其引數如下:
– delete: 刪除不存在的檔案,delete=yes 使兩邊的內容一樣(即以推送方為主),預設no
– src: 要同步到目的地的源主機上的路徑; 路徑可以是絕對的或相對的。如果路徑使用"/“來結尾,則只複製目錄裡的內容,如果沒有使用”/"來結尾,則包含目錄在內的整個內容全部複製
– dest:目的地主機上將與源同步的路徑; 路徑可以是絕對的或相對的。
– dest_port:預設目錄主機上的埠 ,預設是22,走的ssh協議。
– mode: push或pull,預設push,一般用於從本機向遠端主機上傳檔案,pull 模式用於從遠端主機上取檔案。
– rsync_opts:通過傳遞陣列來指定其他rsync選項。

# 將控制機器上的src同步到遠端主機上
- synchronize:
    src: some/relative/path
    dest: /some/absolute/path

# 同步傳遞額外的rsync選項
- synchronize:
    src: /tmp/helloworld
    dest: /var/www/helloworld
    rsync_opts:
      - "--no-motd"
      - "--exclude=.git"

7、template模組
基於模板方式生成一個檔案複製到遠端主機(template使用Jinjia2格式作為檔案模版,進行文件內變數的替換的模組。它的每次使用都會被ansible標記為”changed”狀態。)
– backup: 如果原目標檔案存在,則先備份目標檔案
– src:在ansible控制器上的Jinja2格式化模板的路徑。 這可以是相對或絕對的路徑。
– dest:將模板渲染到遠端機器上的位置。
force:是否強制覆蓋,預設為yes
– owner:目標檔案屬主
– group:目標檔案屬組
– mode:目標檔案的許可權模式,模式可以被指定為符號模式(例如,u + rwx或u = rw,g = r,o = r)。

# Example from Ansible Playbooks
- template:
    src: /mytemplates/foo.j2
    dest: /etc/file.conf
    owner: bin
    group: wheel
    mode: 0644

# 同樣的例子,但使用等效於0644的符號模式
- template:
    src: /mytemplates/foo.j2
    dest: /etc/file.conf
    owner: bin
    group: wheel
    mode: "u=rw,g=r,o=r"

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

# Example from Ansible Playbooks
- copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: 0644

# 與上述同樣的例子,但是使用等價於0644的符號模式
- copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: u=rw,g=r,o=r

# 另一個符號模式示例,新增一些許可權並刪除其他
- copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: u+rw,g-wx,o-rwx

9、user 模組與group模組
user模組是請求的是useradd, userdel, usermod三個指令,goup模組請求的是groupadd, groupdel, groupmod 三個指令。

1、user模組
– home:指定使用者的家目錄,需要與createhome配合使用。
– groups:指定使用者的屬組。
– uid:指定用的uid。
– password:指定使用者的密碼。
注意:指定password引數時,不能使用明文密碼,因為後面這一串密碼會被直接傳送到被管理主機的/etc/shadow檔案中,所以需要先將密碼字串進行加密處理。然後將得到的字串放到password中即可。
echo “123456” | openssl passwd -1 -salt $(< /dev/urandom tr -dc ‘[:alnum:]’ | head -c 32) -stdin
$14 P 4 P l F u E 4P4PlFuE4P4PlFuEur9ObJiT5iHNrb9QnjaIB0
– name:指定使用者名稱。
– createhome:是否建立家目錄 yes|no。
– system:是否為系統使用者。
– remove:當state=absent時,remove=yes則表示連同家目錄一起刪除,等價於userdel -r。
– state:是建立還是刪除。(present,absent)
– shell:指定使用者的shell環境。
– generate_ssh_key:是否為相關使用者生成SSH金鑰。 這不會覆蓋現有的SSH金鑰。
– ssh_key_bits:可選擇指定要建立的SSH金鑰中的位數。
– ssh_key_passphrase:設定SSH金鑰的密碼。 如果沒有提供密碼,SSH金鑰將預設沒有密碼。
– ssh_key_file:指定SSH金鑰檔名(可選)。 如果這是一個相對的檔名,那麼它將是相對於使用者的主目錄。
– ssh_key_type:指定要生成的SSH金鑰的型別(可選)。 可用的SSH金鑰型別將取決於目標主機上的實現。

# 使用bash shell新增使用者“james”,將組“管理員”和“開發人員”附加到使用者組
- user:
    name: james
    shell: /bin/bash
    groups: admins,developers
    append: yes

# 刪除使用者'johns'
- user:
    name: johnd
    state: absent
    remove: yes

# 在~/.ssh/id_rsa中為使用者jsmith建立一個2048位的SSH金鑰
- user:
    name: jsmith
    generate_ssh_key: yes
    ssh_key_bits: 2048
    ssh_key_file: .ssh/id_rsa


2、group模組
– gid:指定用的gid。
– name:指定使用者名稱。
– state:是建立還是刪除。(present,absent)
– system:如果是,則表示建立的組是系統組。

# Example group command from Ansible Playbooks
- group:
    name: somegroup
    state: present
4
10、service 模組
用於管理服務。
– arguments:給命令列提供一些選項
– enabled:是否開機啟動 yes|no, 要求狀態(state)和啟用(enabled)中至少有一個。
– name:必選項,服務名稱
– runlevel:執行級別
– sleep:如果執行了restarted,在則stop和start之間沉睡幾秒鐘
– state:對當前服務執行啟動,停止、重啟、重新載入等操作(started,stopped,restarted,reloaded)

# 啟動服務httpd,如果不執行
- service:
    name: httpd
    state: started

# 停止服務httpd,如果執行
- service:
    name: httpd
    state: stopped
    
# 啟用服務httpd的示例操作,而不使用執行狀態
- service:
    name: httpd
    enabled: yes

11、get_url 模組
該模組主要用於從http、ftp、https伺服器上下載檔案(類似於wget),主要有如下選項:
– sha256sum:下載完成後進行sha256 check;
– timeout:下載超時時間,預設10s
– url:下載的URL
– url_password、url_username:主要用於需要使用者名稱密碼進行驗證的情況
– dest:將檔案下載到哪裡的絕對路徑。如果dest是目錄,則使用伺服器提供的檔名,或者如果沒有提供,將使用遠端伺服器上的URL的基本名稱。
– headers:以格式“key:value,key:value”為請求新增自定義HTTP標頭。

- name: Download foo.conf
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    mode: 0440

- name: Download file with custom HTTP headers
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    headers: 'key:value,key:value'

- name: Download file with check (sha256)
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    checksum: sha256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c

12、fetch模組
它用於從遠端機器獲取檔案,並將其本地儲存在由主機名組織的檔案樹中。
– src:遠端系統上要獲取的檔案。 這必須是一個檔案,而不是一個目錄。 後續版本可能會支援遞迴提取。
– dest:儲存檔案的目錄。 例如,如果dest目錄是/backup,在主機host.example.com上命名為/ etc/profile的src檔案將被儲存到/backup/host.example.com/etc/profile。
– flat:允許您覆蓋將目標檔案新增到主機名/ path / to / file的預設行為。

# 將檔案儲存到/tmp/fetched/host.example.com/tmp/somefile中
- fetch:
    src: /tmp/somefile
    dest: /tmp/fetched

# 直接指定路徑
- fetch:
    src: /tmp/somefile
    dest: /tmp/prefix-{{ inventory_hostname }}
    flat: yes

# 指定目標路徑
- fetch:
    src: /tmp/uniquefile
    dest: /tmp/special/
    flat: yes13、file模組
file模組主要用於遠端主機上的檔案操作,file模組包含如下選項:
– force:需要在兩種情況下強制建立軟連結,一種是原始檔不存在但之後會建立的情況下;另一種是目標軟連結已存在,需要先取消之前的軟鏈,然後建立新的軟鏈,有兩個選項:yes|no
– group:定義檔案/目錄的屬組
– mode:定義檔案/目錄的許可權
– owner:定義檔案/目錄的屬主
– path:必選項,定義檔案/目錄的路徑
– recurse:遞迴的設定檔案的屬性,只對目錄有效
– src:要被連結的原始檔的路徑,只應用於state=link的情況
– dest:被連結到的路徑,只應用於state=link的情況
– state:
   directory:如果目錄不存在,建立目錄
   file:即使檔案不存在,也不會被建立
   link:建立軟連結
   hard:建立硬連結
   touch:如果檔案不存在,則會建立一個新的檔案,如果檔案或目錄已存在,則更新其最後修改時間
   absent:刪除目錄、檔案或者取消連結檔案

# 更改檔案所有權,組和模式。 當使用八進位制數指定模式時,第一個數字應始終為0。
- file:
    path: /etc/foo.conf
    owner: foo
    group: foo
    mode: 0644
    
# touch建立檔案,使用符號模式設定許可權(相當於0644)
- file:
    path: /etc/foo.conf
    state: touch
    mode: "u=rw,g=r,o=r"

# touch建立檔案,新增/刪除一些許可權
- file:
    path: /etc/foo.conf
    state: touch
    mode: "u+rw,g-wx,o-rwx"

# 建立一個目錄,如果它不存在
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755

14、unarchive模組
用於解壓檔案,模組包含如下選項:
– copy:在解壓檔案之前,是否先將檔案複製到遠端主機,預設為yes。若為no,則要求目標主機上壓縮包必須存在。
– creates:指定一個檔名,當該檔案存在時,則解壓指令不執行
– dest:遠端主機上的一個路徑,即檔案解壓的絕對路徑。
– group:解壓後的目錄或檔案的屬組
– list_files:如果為yes,則會列出壓縮包裡的檔案,預設為no,2.0版本新增的選項
– mode:解壓後文件的許可權
– src:如果copy為yes,則需要指定壓縮檔案的源路徑
– owner:解壓後文件或目錄的屬主

- name: 將foo.tgz解壓縮到/var/lib/foo中
  unarchive:
    src: foo.tgz
    dest: /var/lib/foo

- name: 解壓遠端計算機上已存在的檔案
  unarchive:
    src: /tmp/foo.zip
    dest: /usr/local/bin
    remote_src: yes

- name: 解壓文件需要下載的檔案(2.0中新增)
  unarchive:
    src: https://example.com/example.zip
    dest: /usr/local/bin
    remote_src: yes

15、command 模組和shell
用於在各被管理節點執行指定的命令
shell和command的區別:shell模組可以特殊字元,而command是不支援

1、command模組
– chdir:在執行命令之前,切換到此目錄。

- name: return motd to registered var
  command: cat /etc/motd
  register: mymotd

- name: Run the command if the specified file does not exist.
  command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database

# 您還可以使用“args”表單提供選項。
- name: This command will change the working directory to somedir/ and will only run when /path/to/database doesn't exist.
  command: /usr/bin/make_database.sh arg1 arg2
  args:
    chdir: somedir/
    creates: /path/to/database

2、shell模組
– chdir:在執行命令之前,切換到此目錄。
– executable:更改用於執行命令的shell(bash,sh)。 應該是可執行檔案的絕對路徑。

- name: Execute the command in remote shell; stdout goes to the specified file on the remote.
  shell: somescript.sh >> somelog.txt

- name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)
  shell: cat < /tmp/*txt
  args:
    executable: /bin/bash
————————————————
版權宣告:本文為CSDN博主「pushiqiang」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/pushiqiang/article/details/78249665