Ansibleを使用してディレクトリを作成する方法


回答:


637

ファイルモジュールが必要です。ディレクトリを作成するには、オプションを指定する必要がありますstate=directory

- name: Creates directory
  file:
    path: /src/www
    state: directory

他のオプションはhttp://docs.ansible.com/file_module.htmlで確認できます


36
の場合state=directory、直接のサブディレクトリが存在しない場合はすべて作成されます。1.7以降は、指定された権限で作成されます。
Alex

1
@Alex all immediate subdirectoriesは混乱しています。それを定義して例を挙げていただけますか?
ジェイミージャクソン

8
@JamieJackson間違いがあります。「すべての中間サブディレクトリ」である必要があります。
Alex

203

ファイルモジュールを拡張し、それを介して所有者、グループ、および権限を設定することもできます。(参照:Ansibleファイルのドキュメント

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775

さらに、ディレクトリを再帰的に作成することもできます。

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775
    recurse: yes

このようにして、存在しない場合は両方のディレクトリを作成します。


38
recursive引数は使用してのように、このくらいになりますmkdir -p(これらのグーグルのためansibleます。mkdir -p)。
Micah Elliott

2
子ファイルのアクセス許可も変更することがわかりました... mkdir -p / foo / bar && chmod -R 0775 / foo / barとほぼ同じです。Ansible2.0.0.2でこれを他の誰かが観察しています
ThePracticalOne

5
recurseパラメータは好きではありませんmkdir -p。指定されたファイル属性を再帰的に設定します(state = directoryにのみ適用されます)。の場合state=directory、直接のサブディレクトリが存在しない場合はすべて作成されます。1.7以降は、指定された権限で作成されます。
Alex

1
これは=文字付きの古い構文を使用します。:新しい行の各属性の構文でそれを更新するのに最適です
ympostor

@ThePracticalOne-はい... "recurse"を使用すると、まったく同じようにchmod -R動作します。つまり、pathすでにdirとして存在し、その中にファイルがある場合、recurseオプションは(残念ながら)ファイルに同じ権限を適用します。これは良くも悪くも、仕様によるものです。
デールアンダーソン、


14

ディレクトリはファイルにすぎないため、ファイルモジュールのみを使用してディレクトリを作成できます。

# create a directory if it doesn't exist
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: foo
    group: foo

8
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: someone
    group: somegroup

これは、実際に権限、所有者、グループを設定する方法でもあります。最後の3つのパラメーターは必須ではありません。


7

ディレクトリを作成できます。を使用して

# create a directory if it doesn't exist
- file: path=/src/www state=directory mode=0755

ディレクトリおよびファイルシステムの詳細については、http: //docs.ansible.com/ansible/file_module.htmlを参照することもでき ます。


7

ここでのすべての回答に加えて、複数のディレクトリを作成する必要がある状況がたくさんあるため、ディレクトリごとに個別のタスクを作成する代わりにループを使用することをお勧めします。

- name: Creates directory
  file:
    path: "{{ item }}"
    state: directory
  with_items:
  - /srv/www
  - /dir/foo
  - /dir/bar

3

特定の配布のためにタスクを実行するための条件を置くだけです

- name: Creates directory
  file: path=/src/www state=directory
  when: ansible_distribution == 'Debian'

3

次のステートメントを使用できます

- name: webfolder - Creates web folder
  file: path=/srv/www state=directory owner=www-data group=www-data mode=0775`

3

Windowsでディレクトリを作成する場合:

  • 名前:ディレクトリ構造の作成
    win_file:
    パス:C:\ Temp \ folder \ subfolder>
    状態:ディレクトリ



1

コマンドを直接実行し、ansibleを使用して直接作成できます

ansible -v targethostname -m shell -a "mkdir /srv/www" -u targetuser

または

ansible -v targethostname -m file -a "path=/srv/www state=directory" -u targetuser

1
---
- hosts: all
  connection: local
  tasks:
    - name: Creates directory
      file: path=/src/www state=directory

上記のプレイブックでは、/ srcパスにwwwディレクトリが作成されます。

上記のプレイブックを実行する前。ansibleホスト接続が設定されていることを確認してください。

「localhost ansible_connection = local」

/ etc / ansible / hostsに存在する必要があります

詳しくはお知らせください。


ファイル:path = / src / www state = directory
Saurabh

1

ディレクトリを作成する

ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"

1

ファイルモジュールを使用してディレクトリを作成し、コマンド「ansible-doc file」を使用してファイルモジュールに関する詳細を取得します

説明するオプション「状態」は次のとおりです。

の場合directory、直接のサブディレクトリが存在しない場合はすべて作成されます。1.7以降は、指定された権限で作成されます。
の場合file、ファイルが存在しないと作成されません。その動作が必要な場合は、[コピー]または[テンプレート]モジュールを参照してください。
の場合link、シンボリックリンクが作成または変更されます。hardハードリンクに使用します。
の場合absent、ディレクトリは再帰的に削除され、ファイルまたはシンボリックリンクはリンク解除されます。

file状態が変化しなかったとして、パスが存在しない場合は失敗しません。

場合touch(1.4の新機能)のパスが存在しない場合は、既存のファイルまたはディレクトリが(双方向に似て更新されたファイルへのアクセスと修正時刻受け取ることになりますが、空のファイルが作成されますtouch、コマンドラインからの作品を)。


1

この場合、「file」モジュールを使用できます。所有者、グループ、場所、モードなど、新しく作成されたディレクトリに渡すことができる非常に多くの引数があります。

fileモジュールの詳細な説明については、このドキュメントを参照してください...

https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module

このモジュールはディレクトリを作成するためだけのものではないことに注意してください!!!


1

Ansibleでディレクトリ作成する最も簡単な方法。

  • name:your_directoryが存在しない場合は作成します。ファイル:パス:/ etc / your_directory

または

そのディレクトリにsudo権限付与したいとします。

  • name:your_directoryが存在しない場合は作成します。ファイル:パス:/ etc / your_directoryモード: '777'

0

Playbookの例がたくさんありますが、アドホックコマンドの例についても触れておきます。

$ ansible -i Inventory -m file -a "path = / tmp / direcory state = directory(ディレクトリの代わりに、ファイルを作成するためにtouchと言うことができます)


0

この場合、ファイルモジュールを使用する必要があります。以下のプレイブックを参考にしてください。

    ---
     - hosts: <Your target host group>
       name: play1
       tasks: 
        - name: Create Directory
          files:
           path=/srv/www/
           owner=<Intended User>
           mode=<Intended permission, e.g.: 0750>
           state=directory 

0

ディレクトリが存在するかどうかを確認してから、いくつかのタスク(たとえば、ディレクトリの作成)を実行するには、以下を使用します。

- name: Check if output directory exists
    stat:
    path: /path/to/output
    register: output_folder

- name: Create output directory if not exists
    file:
    path: /path/to/output
    state: directory
    owner: user
    group: user
    mode: 0775
    when: output_folder.stat.exists == false

0

fileモジュールが必要です。ディレクトリを作成するには、オプションを指定する必要がありますstate: directory

- name: Creates directory
  file:
    path: /src/www
    state: directory

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.