03-常用模塊(一)-文件操作模塊

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=linkstate=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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容