Ansible是一個系列文章,我會盡可能以通俗易懂、詼諧幽默的總結方式給你們呈現這些枯燥的知識點,讓學習變的有趣一些。
對於任何一個框架,一個應用,爲了更便於推廣,便於使用,便於商業化,都會順便提供不少經常使用的模塊,這樣讓你們也很容易使用起來。Ansible也是同樣的,因此這些經常使用的模塊,就比如基本功,基本招式同樣,咱們須要掌握這些基本功,掌握這些基本招式。這篇文章,就對這些經常使用的模塊進行一個比較全面的總結。web
ping
是測試遠程節點的SSH鏈接是否就緒的經常使用模塊,可是它並不像Linux命令那樣簡單地ping一下遠程節點,而是先檢查可否經過SSH登錄遠程節點,再檢查其Python版本可否知足要求,若是都知足則會返回pong,表示成功。使用方式以下:shell
ansible web -m ping
ping
無須任何參數。上述命令輸出結果以下所示:bash
192.168.1.2 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.1.4 | SUCCESS => { "changed": false, "ping": "pong" }
打印輸出信息,相似Linux上的echo命令。在後續的學習過程當中,咱們會常常用這個命令來調試咱們寫的playbook。微信
對於debug
模塊有兩種用法。下面就對這兩種用法都進行詳細的總結。框架
msg中能夠嵌入變量,好比我先定義瞭如下的一個playbook。學習
--- - hosts: web vars: name: jellythink tasks: - name: display debug: msg="I am {{name}}"
變量能夠是系統變量,也能夠是動態的執行結果,經過關鍵字register
注入變量中。對於變量,咱們能夠這樣玩:測試
--- - hosts: web vars: name: jellythink tasks: - name: display debug: var: name
對於注入變量,能夠這樣玩:spa
--- - hosts: web tasks: - name: register var shell: hostname register: result - name: display debug: var: result
從當前的機器上覆制靜態文件到遠程節點上,而且設置合理的文件權限。copy
模塊在複製文件的時候,會先比較一下文件的checksum,若是相同則不會複製,返回狀態爲OK;若是不一樣纔會複製,返回狀態爲changed。debug
通常狀況的使用,就是這樣的:調試
--- - hosts: server1 tasks: - name: copyDemo copy: src: /home/jelly/nameList.txt dest: /home/test1/nameList.txt
在實際的工做中,通常會在進行文件分發時,須要備份原文件,這個時候就須要咱們加上backup
選項:
--- - hosts: server1 tasks: - name: copyDemo copy: src: /home/jelly/nameList.txt dest: /home/test1/nameList.txt backup: yes
加上backup: yes
後,在目標主機上,就會對原來的文件進行備份,好比這樣子的備份文件:
nameList.txt.8648.2019-09-28@06:27:18~
若是隻是複製靜態文件,使用copy
模塊就能夠了;可是若是在複製的同時須要根據實際狀況修改部份內容,那麼就須要用到template
模塊了。
好比咱們在分發配置文件時,每一個配置文件須要根據遠程主機的一些屬性不一樣而配置不一樣的值,對於須要替換的部分,咱們就可使用template
模塊來進行替換。template
模塊使用的是Python中的Jinja2模板引擎,這裏咱們不須要過多的去關注這個模板引擎,只須要知道變量的表示法是{{}}
就能夠了。好比這裏就有一個http.conf.j2的模板文件,文件內容以下:
Listen {{ansible_default_ipv4.address}} Port {{http_port}}
其中{{ansible_default_ipv4.address}}
就是須要根據不一樣的主機,動態變化的。接下來,咱們就能夠這樣使用template
模塊來完成變量的替換。
--- - hosts: server1 vars: http_port: 8080 tasks: - name: Write Config File template: src: http.conf.j2 dest: /home/test1/http.conf
在目的主機上,文件內容以下:
Listen 192.168.1.3 Port 8080
和copy
模塊同樣,template
模塊也能夠進行權限設置和文件備份等功能。
file
模塊能夠用來設置遠程主機上的文件、軟連接和文件夾的權限,也能夠用來建立和刪除它們。
咱們可使用mode
參數進行權限修改,能夠直接賦值數字權限(必須以0開頭)。
--- - hosts: server1 tasks: - name: Modify Mode file: path: /home/test1/http.conf mode: 0777
咱們還能夠根據state
參數的不一樣,實現不一樣的行爲,好比建立軟連接:
--- - hosts: server1 tasks: - name: Create Soft Link file: src: /home/test1/http.conf dest: /home/test1/conf state: link
也能夠設置state: touch
建立一個新文件,好比這樣:
--- - hosts: server1 tasks: - name: Create a new file file: path: /home/test1/touchfile state: touch mode: 0700
還能夠設置state: directory
新建一個文件夾,好比這樣:
--- - hosts: server1 tasks: - name: Create directory file: path: /home/test1/testDir state: directory mode: 0755
user
模塊能夠對用戶進行管理,實現增、刪、改Linux遠程節點的用戶帳戶。好比增長用戶:
--- - hosts: server1 tasks: - name: Add user user: name: test3
刪除用戶:
--- - hosts: server1 tasks: - name: Add user user: name: test3 state: absent remove: yes
可是在使用這個user
模塊時,須要注意權限問題。
在遠程節點上經過/bin/sh
執行命令。若是一個命令能夠經過模塊yum
、copy
模塊實現時,那麼建議不要使用shell
或者command
這樣通用的命令模塊。由於通用的命令模塊不會根據具體操做的特色進行狀態判斷,因此當沒有必要再從新執行的時候,它仍是會從新執行一遍。
支持<
、>
、|
、;
和&
--- - hosts: server1 tasks: - name: Test shell
- 調用腳本
--- - hosts: server1 tasks: - shell: ~/test.sh >> somelog.txt ``` 在執行命令以前,咱們能夠改變工做目錄,而且僅在文件somelog.txt不存在時執行命令,除此以外,還能夠指定用bash運行命令: ``` --- - hosts: server1 tasks: - shell: ~/test.sh >> somelog.txt args: chdir: ~/testDir creates: somelog.txt executable: /bin/bash ```
在遠程節點上執行命令。和shell
模塊相似,但不支持<
、>
、|
、;
和&
等操做,其它的大抵都是類似的。
Ansible提供了很是多的經常使用模塊,咱們可使用ansible-doc -l
命令查看這些模塊。這篇文章只是總結了幾個用的頻率更高一點的,對於這裏總結的經常使用模塊,咱們須要作到「手到擒來」,熟練到上手就能寫的地步,你們須要在理解的基礎上,多上手寫,多練習。在從此的工做中多用這些經常使用的模塊來提高本身的工做效率。
夜,又靜了!
2019年9月29日,於內蒙古呼和浩特。