私のAnsibleプレイブックでは何度もそこにファイルを作成する必要があります
- name: Copy file
template:
src: code.conf.j2
dest: "{{project_root}}/conf/code.conf"
今度conf
はdirがそこにありません。次に、そのディレクトリを最初に作成するためのタスクをさらに作成する必要があります。
オプションが存在しない場合にディレクトリを自動作成する簡単な方法はありますか
私のAnsibleプレイブックでは何度もそこにファイルを作成する必要があります
- name: Copy file
template:
src: code.conf.j2
dest: "{{project_root}}/conf/code.conf"
今度conf
はdirがそこにありません。次に、そのディレクトリを最初に作成するためのタスクをさらに作成する必要があります。
オプションが存在しない場合にディレクトリを自動作成する簡単な方法はありますか
回答:
今、これが唯一の方法です
- name: Ensures {{project_root}}/conf dir exists
file: path={{project_root}}/conf state=directory
- name: Copy file
template:
src: code.conf.j2
dest: "{{project_root}}/conf/code.conf"
recurse=yes
ためにfile
呼び出しに追加する必要がある場合があることに注意してくださいmkdir -p
dirname
フィルターです。
フルパスでの成功を保証するには、recurse = yesを使用します
- name: ensure custom facts directory exists
file: >
path=/etc/ansible/facts.d
recurse=yes
state=directory
recurse=yes
アクセス許可は再帰的にのみ適用されます。ただし、ドキュメントでは、これはv1.7以降自動的にrecurse
行われるため、廃止されている可能性があります。
Ansible> = 2.0を実行している場合は、パスのディレクトリ部分を抽出するために使用できるdirnameフィルターもあります。このようにして、1つの変数を使用してパス全体を保持し、両方のタスクが同期しないようにすることができます。
たとえば、次のdest_path
ような変数で定義されたプレイブックがある場合、同じ変数を再利用できます。
- name: My playbook
vars:
dest_path: /home/ubuntu/some_dir/some_file.txt
tasks:
- name: Make sure destination dir exists
file:
path: "{{ dest_path | dirname }}"
state: directory
recurse: yes
# now this task is always save to run no matter how dest_path get's changed arround
- name: Add file or template to remote instance
template:
src: foo.txt.j2
dest: "{{ dest_path }}"
AFAIK、これを行うことができる唯一の方法は、state=directory
オプションを使用することです。一方でtemplate
、ほとんどのモジュールがサポートするcopy
ターンサポートにほとんどのオプション、file
オプションは、あなたがのようなものを使用することはできませんstate=directory
それとを。さらに、それは非常に混乱します(それ{{project_root}}/conf/code.conf
がディレクトリであるという意味ですか?それとも{{project_root}}/conf/
最初に作成する必要があるという意味ですか?)
そのため、前のfile
タスクを追加しない限り、これは現在可能ではないと思います。
- file:
path: "{{project_root}}/conf"
state: directory
recurse: yes
最新のドキュメントによると、状態がディレクトリに設定されている場合、親ディレクトリを作成するためにパラメータ再帰を使用する必要はありません。ファイルモジュールがそれを処理します。
- name: create directory with parent directories
file:
path: /data/test/foo
state: directory
これは、親ディレクトリの作成するための運賃は十分であるデータやテストをしてFOO
パラメータの説明を参照してください-「状態」 http://docs.ansible.com/ansible/latest/modules/file_module.html
お使いのansibleバージョンに応じて、以下を使用してフォルダーを作成できます。
最新バージョン2 <
- name: Create Folder
file:
path: "{{project_root}}/conf"
recurse: yes
state: directory
古いバージョン:
- name: Create Folder
file:
path="{{project_root}}/conf"
recurse: yes
state=directory
存在しない場合は、copyモジュールがディレクトリを作成します。この場合、それはresolved.conf.dディレクトリを作成しました
- name: put fallback_dns.conf in place
copy:
src: fallback_dns.conf
dest: /etc/systemd/resolved.conf.d/
mode: '0644'
owner: root
group: root
become: true
tags: testing