Ansible
Ansible version : 2.6.2
常用模塊(一)
文件操作模塊
- acl
- archive
- assemble
- blockinfile
- copy
- fetch
- file
- find
- ini_file
- iso_extract
- lineinfile
- patch
- replace
- stat
- synchronize
- tempfile
- template
- unarchive
- xattr
- xml
模塊:file
概要
設(shè)置文件、symlinks和目錄的屬性,或刪除文件/symlinks/目錄。許多其他模塊支持與[file]模塊相同的選項—包括[copy]、[template]和[assemble]。對于Windows主機,使用[win_file]模塊。
參數(shù)
| 參數(shù)(*必選) | 默認值 | 注釋 |
|---|---|---|
| attributes | null | 文件或者目錄具有的屬性。該字符串應(yīng)包含與`lsattr'顯示的屬性順序相同的屬性。 |
| follow | yes | 表示應(yīng)遵循文件系統(tǒng)鏈接(如果存在)。在2.5版本以前,默認值為no |
| force | no | 在兩種情況下強制創(chuàng)建符號鏈接:源文件不存在(但稍后會出現(xiàn)); 目標存在并且是一個文件(需要取消鏈接“路徑”文件并創(chuàng)建符號鏈接到“src”文件來替代)。 |
| group | null | 文件/目錄所屬組名,將會提供給chown使用 |
| mode | 設(shè)置文件或目錄權(quán)限。 1.為了yaml能夠解析,可以使用八進制表示,例如0644 2. ansible接收到字符串通過自己內(nèi)部的方式轉(zhuǎn)化為數(shù)字,例如'644'、‘0644’。 3. 采用symbolic模式。例如u+rwx 或者 u=rw,g=r,o=r | |
| owner | 文件/目錄所屬用戶名,將會提供給chown使用 | |
| * path | 要管理的文件的路徑。 別名:dest、name
|
|
| recurse | no | 遞歸設(shè)置指定的文件屬性(僅適用于目錄) |
| selevel | s0 | SELinux文件上下文的級別部分。 這是MLS / MCS屬性,有時稱為range。 _default功能與seuser功能相同。 |
| serole | null | SELinux文件上下文的角色部分。_default功能與seuser功能相同。 |
| setype | null | SELinux文件上下文的類型部分。_default功能與seuser功能相同。 |
| seuser | null | SELinux文件上下文的用戶部分。將默認系統(tǒng)策略,如果適用。如果設(shè)置為_default,它將使用策略的user部分(如果可用)。 |
| src | null | 要鏈接到的文件的路徑(僅適用于state=link和state=hard)。接受絕對,相對和不存在的路徑。相對路徑是相對于正在創(chuàng)建的文件path),這是UNIX命令ln -s SRC DEST處理相對路徑的方式。 |
| state | file | 1. 如果是directory,如果它們不存在,將創(chuàng)建所有中間子目錄。 從Ansible 1.7開始,它們將使用提供的權(quán)限創(chuàng)建。2. 如果是file,如果該文件不存在,則不會創(chuàng)建該文件; 如果您想要這種行為,請查看touch值或[copy]或[template]模塊。3. 如果是link,將創(chuàng)建或更改符號鏈接。 使用hard進行硬鏈接。4. 如果absent,將遞歸刪除目錄,并且將取消鏈接文件或符號鏈接。注意,如果path不存在,并且狀態(tài)沒有改變,那么absent不會導(dǎo)致file失敗。如果touch(1.4中新增),如果path不存在,將創(chuàng)建一個空文件,而現(xiàn)有文件或目錄將接收到更新的文件訪問和修改時間(類似于命令行中的touch工作方式)??蛇x參數(shù):absent, directory, file, hard, link, touch |
| unsafe_writes | no | 通常,此模塊使用原子操作來防止數(shù)據(jù)損壞或來自目標文件的不一致讀取,有時系統(tǒng)配置或僅以阻止此操作的方式中斷。 一個例子是docker掛載的文件,它們不能以原子方式更新,并且只能以安全的方式完成。 |
例子
ad-hoc
創(chuàng)建文件(指定權(quán)限)
ansible localhost -m file -a 'dest=/tmp/testdir.txt mode=0644 state=touch'
創(chuàng)建目錄(指定用戶、組、權(quán)限)
ansible localhost -m file -a 'dest=/tmp/testdir3 mode=0644 state=directory owner=luoshen group=luoshen'
playbook
修改所屬用戶、組、權(quán)限。如果mode使用8進制,首位必須為0.
- file:
path: /etc/foo.conf
owner: foo
group: foo
mode: 0644
- file:
src: /file/to/link/to
dest: /path/to/symlink
owner: foo
group: foo
state: link
- file:
src: '/tmp/{{ item.src }}'
dest: '{{ item.dest }}'
state: link
with_items:
- { src: 'x', dest: 'y' }
- { src: 'z', dest: 'k' }
創(chuàng)建文件(指定權(quán)限)
- file:
path: /etc/foo.conf
state: touch
mode: "u=rw,g=r,o=r"
修改已有文件權(quán)限
- file:
path: /etc/foo.conf
state: touch
mode: "u+rw,g-wx,o-rwx"
如果目錄不存在,則創(chuàng)建
- file:
path: /etc/some_directory
state: directory
mode: 0755
模塊:copy
概要
[copy]模塊將文件從本地或遠程計算機復(fù)制到遠程計算機上的某個位置。 使用[fetch]模塊將文件從遠程位置復(fù)制到本地。如果需要在復(fù)制的文件中進行變量插值,使用[template]模塊。 對于Windows,采用[win_copy]模塊。
參數(shù)
| 參數(shù)(*必選) | 默認 | 注釋 |
|---|---|---|
| attributes | null | 文件或目錄應(yīng)具有的屬性。 要獲得支持的標志,請查看目標系統(tǒng)上chattr的手冊頁。 該字符串應(yīng)包含與lsattr顯示的屬性順序相同的屬性。 |
| backup | no | 創(chuàng)建一個包含時間戳信息的備份文件,如果你以某種方式錯誤地破壞了原始文件,就可以將其恢復(fù)原狀。 |
| checksum | null | 預(yù)期的sha1校驗值,用于驗證文件副本是否成功。如果未提供,則ansible將使用src文件的本地計算校驗和。 |
| content | null | 當(dāng)替代src使用時,將文件的內(nèi)容直接設(shè)置為指定的值。 對于任何高級或格式化的內(nèi)容,查看template模塊。 |
| decrypt | yes | 此選項使用Vault控制源文件的自動解密。 |
| * dest | 復(fù)制到遠端必須是絕對路徑。如果'src'是一個目錄,'dest'也必須是一個目錄。如果'dest'是一個不存在的路徑并且'dest'已'/'結(jié)尾或者’src‘是一個目錄,'dest'被創(chuàng)建。如果'src'與'dest'都是文件,則'dest'的父文件夾不會被創(chuàng)建,如果不存在則task會失敗。 | |
| directory_mode | null | 執(zhí)行遞歸復(fù)制時,設(shè)置目錄的模式。 如果未設(shè)置,我們將使用系統(tǒng)默認值。 該模式僅在創(chuàng)建新目錄上設(shè)置,不會影響已存在的目錄。 |
| follow | no | 目標主機中的文件系統(tǒng)連接,如果存在,則保持一致。 |
| force | yes | 默認值為yes,當(dāng)內(nèi)容與源不同時,將替換遠程文件。 如果不是,則僅在目標不存在時才傳輸文件。 |
| group | null | 文件/目錄所屬組名,將會提供給chown使用 |
| local_follow | yes | 源主機中的文件系統(tǒng)連接,如果存在,則保持一致。 |
| mode | 設(shè)置文件或目錄權(quán)限。 對于習(xí)慣于/usr/bin/chmod的人來說,實際上是八進制數(shù)。 你必須指定首位為零,以便Ansible的YAML解析器知道它是一個八進制數(shù)(如0644或01777)或引用它(如'644'或'0644'所以Ansible接收一個字符串并可以自己從字符串轉(zhuǎn)換,在沒有遵循這些規(guī)則之一的情況下給Ansible一個數(shù)字將得到一個十進制數(shù),這將產(chǎn)生意想不到的結(jié)果。從版本1.8開始,模式可以指定為符號模式(例如,u + rwx或u = rw ,g = r,o = r)。從版本2.3開始,模式也可以是特殊的字符串保留.reserved表示文件將被賦予與源文件相同的權(quán)限。 |
|
| owner | null | 文件/目錄所屬用戶名,將會提供給chown使用 |
| remote_src | no | 如果不是,它將在來源/master上搜索src。如果是,它將轉(zhuǎn)到src的遠程/目標機器。 默認為否。目前remote_src不支持遞歸復(fù)制。remote_src僅適用于版本2.6的mode = preserve。 |
| selevel | s0 | SELinux文件上下文的級別部分。 這是MLS / MCS屬性,有時稱為range。 _default功能與seuser功能相同。 |
| serole | null | SELinux文件上下文的角色部分。_default功能與seuser功能相同。 |
| setype | null | SELinux文件上下文的類型部分。_default功能與seuser功能相同。 |
| seuser | null | SELinux文件上下文的用戶部分。將默認系統(tǒng)策略,如果適用。如果設(shè)置為_default,它將使用策略的user部分(如果可用)。 |
| src | null | 要復(fù)制到遠程服務(wù)器的文件的本地路徑; 可以是絕對的或相對的。 如果path是目錄,則以遞歸方式復(fù)制它。 在這種情況下,如果路徑以“/”結(jié)尾,則只將該目錄的內(nèi)部內(nèi)容復(fù)制到目標。 否則,如果它不以“/”結(jié)尾,則復(fù)制具有所有內(nèi)容的目錄本身。 此行為類似于Rsync。 |
| unsafe_writes | no | 通常,此模塊使用原子操作來防止數(shù)據(jù)損壞或來自目標文件的不一致讀取,有時系統(tǒng)配置或僅以阻止此操作的方式中斷。 一個例子是docker掛載的文件,它們不能以原子方式更新,只能以不安全的方式完成。這個布爾選項允許ansible回退到不安全的更新文件的方法,用于那些你沒有任何其他選擇的情況。 請注意,這受競爭條件的影響,并可能導(dǎo)致數(shù)據(jù)損壞。 |
| validate | null | 要在復(fù)制到位之前運行的驗證命令。 要驗證的文件的路徑是通過'%s'傳遞的,這必須在下面的例子中顯示。 該命令是安全傳遞的,因此擴展和管道等shell功能將無法正常工作。 |
注意
- [copy]模塊遞歸復(fù)制大量規(guī)模(超過數(shù)百個)文件,不會很方便。作為替代品,我們可以使用封裝了rsync的[synchronize]模塊。
- 對于windows主機,使用[win_copy]代替。
例子
ad-hoc
指定預(yù)期的校驗值
ansible localhost -m copy -a "src=1.py dest=/tmp/ checksum=bbe26b84e40cfb01ac6f1395260b55afedf641b7"
復(fù)制內(nèi)容到目標服務(wù)器
ansible localhost -m copy -a 'content="this is test text." dest=/tmp/test.txt'
playbook
復(fù)制文件(指定權(quán)限、用戶、組)
- name: example copying file with owner and permissions
copy:
src: /srv/myfiles/foo.conf
dest: /etc/foo.conf
owner: foo
group: foo
mode: 0644
復(fù)制文件,如果不一樣則先備份后復(fù)制
- name: Copy a new "ntp.conf file into place, backing up the original if it differs from the copied version
copy:
src: /mine/ntp.conf
dest: /etc/ntp.conf
owner: root
group: root
mode: 0644
backup: yes
在安全驗證之后,復(fù)制文件
- name: Copy a new "sudoers" file into place, after passing validation with visudo
copy:
src: /mine/sudoers
dest: /etc/sudoers
validate: /usr/sbin/visudo -cf %s
在安全驗證之后,源文件來自目標服務(wù)器,復(fù)制文件。
- name: Copy a "sudoers" file on the remote machine for editing
copy:
src: /etc/sudoers
dest: /etc/sudoers.edit
remote_src: yes
validate: /usr/sbin/visudo -cf %s
復(fù)制內(nèi)容到目標服務(wù)器,如果有內(nèi)容會覆蓋
- name: Copy using the 'content' for inline data
copy:
content: '# This file was moved to /etc/other.conf'
dest: /etc/mine.conf'
模塊:template
概要
template模塊是用來處理jinja語法的。6個額外的變量可以在template使用。
| 變量 | 注釋 |
|---|---|
| ansible_managed | 包含了一個字符串,可以用于描述模板名稱、主機、模板文件修改時間以及所有者的uid,可以通過ansible.cfg里面的default配置 |
| template_host | 包含了模板機器的節(jié)點名稱 |
| template_uid | 所有者的數(shù)字用戶ID |
| template_path | 模板路徑 |
| template_fullpath | 模板絕對路徑 |
| template_run_date | 模板呈現(xiàn)的日期。 |
參數(shù)
| 參數(shù)(*必選) | 默認值 | 注釋 |
|---|---|---|
| attributes | null | 文件或目錄應(yīng)具有的屬性。 要獲得支持的標志,請查看目標系統(tǒng)上chattr的手冊頁。 該字符串應(yīng)包含與lsattr顯示的屬性順序相同的屬性。 |
| backup | no | 創(chuàng)建一個包含時間戳信息的備份文件,如果你以某種方式錯誤地破壞了原始文件,就可以將其恢復(fù)原狀。 |
| block_end_string | %} | 標記塊結(jié)尾的字符串。 |
| block_start_string | {% | 標記塊起始的字符串。 |
| * dest | 在遠程計算機上呈現(xiàn)模板的位置。 | |
| follow | no | 此標志表示如果存在應(yīng)遵循目標中的文件系統(tǒng)鏈接。在Ansible 2.4版本以前為yes
|
| force | yes | 默認值為yes,當(dāng)內(nèi)容與源不同時,將替換遠程文件。 如果不是,則僅在目標不存在時才傳輸文件。 |
| group | null | 文件/目錄所屬組名,將會提供給chown使用 |
| lstrip_blocks | no | 如果將此設(shè)置為True,則前置空格和制表符將從行首開始刪除到塊。將此選項設(shè)置為True需要Jinja2版本> = 2.7。 |
| mode | null | 設(shè)置文件或目錄權(quán)限。 對于習(xí)慣于/usr/bin/chmod的人來說,實際上是八進制數(shù)。 你必須指定首位為零,以便Ansible的YAML解析器知道它是一個八進制數(shù)(如0644或01777)或引用它(如'644'或'0644'所以Ansible接收一個字符串并可以自己從字符串轉(zhuǎn)換,在沒有遵循這些規(guī)則之一的情況下給Ansible一個數(shù)字將得到一個十進制數(shù),這將產(chǎn)生意想不到的結(jié)果。從版本1.8開始,模式可以指定為符號模式(例如,u + rwx或u = rw ,g = r,o = r)。從版本2.3開始,模式也可以是特殊的字符串保留.reserved表示文件將被賦予與源文件相同的權(quán)限。 |
| newline_sequence | \n | 指定用于模板文件的換行符??蛇x:\n 、\r、 \r\n
|
| own | null | 文件/目錄所屬用戶名,將會提供給chown使用 |
| selevel | s0 | SELinux文件上下文的級別部分。 這是MLS / MCS屬性,有時稱為range。 _default功能與seuser功能相同。 |
| serole | null | SELinux文件上下文的角色部分。_default功能與seuser功能相同。 |
| setype | null | SELinux文件上下文的類型部分。_default功能與seuser功能相同。 |
| seuser | null | SELinux文件上下文的用戶部分。將默認系統(tǒng)策略,如果適用。如果設(shè)置為_default,它將使用策略的user部分(如果可用)。 |
| * src | Ansible控制節(jié)點上Jinja2格式化模板的路徑??梢允墙^對路徑或者相對路徑。 | |
| trim_blocks | yes | 如果將其設(shè)置為True,則刪除塊后的第一個換行符(塊,而不是變量標簽?。?。 |
| unsafe_writes | no | 通常,此模塊使用原子操作來防止數(shù)據(jù)損壞或來自目標文件的不一致讀取,有時系統(tǒng)配置或僅以阻止此操作的方式中斷。 一個例子是docker掛載的文件,它們不能以原子方式更新,只能以不安全的方式完成。這個布爾選項允許ansible回退到不安全的更新文件的方法,用于那些你沒有任何其他選擇的情況。 請注意,這受競爭條件的影響,并可能導(dǎo)致數(shù)據(jù)損壞。 |
| validate | null | 要在復(fù)制到位之前運行的驗證命令。 要驗證的文件的路徑是通過'%s'傳遞的,這必須在下面的例子中顯示。 該命令是安全傳遞的,因此擴展和管道等shell功能將無法正常工作。 |
| variable_end_string | }} | 標記打印語句末尾的字符串。 |
| variable_start_string | {{ | 標記打印語句起始的字符串。 |
例子
ansible playbook
- template:
src: /mytemplates/foo.j2
dest: /etc/file.conf
owner: bin
group: wheel
mode: 0644
symbolic模式的ansible playbook
- template:
src: /mytemplates/foo.j2
dest: /etc/file.conf
owner: bin
group: wheel
mode: "u=rw,g=r,o=r"
從template創(chuàng)建ini格式文件
- template:
src: config.ini.j2
dest: /share/windows/config.ini
newline_sequence: '\r\n'
sshd配置安全升級,避免自己鎖定退出
- template:
src: etc/ssh/sshd_config.j2
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: '0600'
validate: /usr/sbin/sshd -t -f %s
backup: yes