Ansible 經常使用模塊

一、ping模塊 :python

檢查指定節點機器是否還能連通,用法很簡單,不涉及參數
命令行敲:ansible erp -m pingmysql

二、raw : nginx

模塊 執行原始的命令,而不是經過模塊子系統。在任何狀況下,使用shell或命令模塊是合適的。給定原始的參數直接經過配置的遠程shell運行。可返回標準輸出、錯誤輸出和返回代碼。此模塊沒有變動處理程序支持。
這個模塊不須要遠程系統上的Python,就像腳本模塊同樣。此模塊也支持Windows目標。git

三、yum模塊 :sql

這個模塊是RedHat / CentOS做爲遠端節點的OS的時候,用的最多的。 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:表示刪除shell

四、apt模塊 :ubuntu

這個模塊是ubuntu做爲遠端節點的OS的時候,用的最多的。 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

五、pip模塊 :bash

用於管理Python庫依賴項,爲了使用pip模塊,必須提供參數name或者requirements
– chdir: 執行pip命令前cd進入的目錄
– name:要安裝的Python庫的名稱或遠程包的URL。
– requirements:一個pip requirements.txt文件的路徑,它應該是遠程系統的本地文件,若是使用chdir選項,則能夠將文件指定爲相對路徑。
– version:指定的Python庫的安裝版本。
– extra_args:額外的參數傳遞給pip。
– executable:顯式可執行文件或可執行文件的路徑名,用於爲系統中安裝的特定版本的Python運行pip。
– 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'選項。
使用遠程協議(bzr +,hg +,git +)安裝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
專門爲Python 3.3安裝bottle,使用'pip-3.3'可執行文件。
  • pip:
    name: bottle
    executable: pip-3.3
安裝 bottle,若是已安裝,強制從新安裝
  • pip:
    name: bottle
    state: forcereinstall

六、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"

七、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"

八、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

九、user 模塊與group模塊 :

user模塊是請求的是useradd, userdel, usermod三個指令,goup模塊請求的是groupadd, groupdel, groupmod 三個指令。
1:user模塊:
– home:指定用戶的家目錄,須要與createhome配合使用。
– groups:指定用戶的屬組。
– uid:指定用的uid。
– password:指定用戶的密碼。
注意:指定password參數時,不能使用明文密碼,由於後面這一串密碼會被直接傳送到被管理主機的/etc/shadow文件中,因此須要先將密碼字符串進行加密處理。而後將獲得的字符串放到password中便可
– 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

十、service 模塊 :

用於管理服務,記得針對Centos7就不要使用這個模塊了。
– 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

十一、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標頭。

十二、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: yes

1三、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

1四、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

1五、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

16.setup模塊 :

該模塊主要用於收集信息,是經過調用facts組件來實現的。
facts組件是Ansible用於採集被管機器設備信息的一個功能,咱們可使用setup模塊查機器的全部facts信息,可使用filter來查看指定信息。整個facts信息被包裝在一個JSON格式的數據結構中,ansible_facts是最上層的值。
ansible-doc -s setup
ansible mysql -m setup #查看mysql服務器上全部信息

17.script模塊 :

該模塊用於將本機的腳本在被管理端的機器上運行
在本身服務器設置腳本,其餘服務器去執行
ansible-doc -s script
#!/bin/bash
echo "this is test script" > /opt/script.txt
chmod 666 /opt/script.txt #設置權限
chmod +x shell.sh #爲腳本添加執行權限
ansible all -m script -a 'shell.sh'

18.cron模塊 :

該模塊適用於管理cron計劃任務的。
兩種狀態(state):present表示添加 absent 表示移除
ansible-doc -s cron #查看cron模塊信息
ansible all -m cron -a 'minute="/1" job="/usr/bin/echo heihei >> /opt/test.txt" name="test cron"' #-a: 指定添加參數 /1:每分鐘執行 job:執行內容

相關文章
相關標籤/搜索