【Ansible Tower/AWX】fileモジュールでディレクトリを作成する


この記事はプロモーションを含みます。

Ansible

ホーム > Ansible Tower・AWX リファレンス

Ansibleのfileモジュールには様々な機能がありますが、ここでは、色々なパターン(再帰的・複数)で、ディレクトリを作成する方法を解説します。

fileモジュールについて

fileモジュールでは、主にファイルやディレクトリ操作を行うモジュールですが、かなり多機能なモジュールとなっています。
ここでは、ディレクトリの作成を行う方法を説明します。

AWXの各種定義

サンプルのプレイブックは、Ansible AWXで実行しています。
ここでは、AWXの各種定義について記載しています。

今回実行するテンプレートの設定になります。

  • 名前:DEV File Directory
  • ジョブタイプ:実行
  • インベントリー:Syutaku Inventory
  • プロジェクト:Developer Project
  • PLAYBOOK:file_directory.yml
  • 認証情報:syutaku
  • 詳細:1(Verbose)

プロジェクトや認証情報、インベントリーについては、特別な設定は行っていないので、割愛します。

単一のディレクトリを作成する

ここでは、単一のディレクトリを作成する方法を説明します。

プレイブック

---
- hosts: all
  gather_facts: False
  tasks:

  - name: "ディレクトリ作成(単体)"
    file:
      path: "/home/workspace/dir1"
      state: directory
      owner: syutaku
      group: syutaku
      mode: 0755

実行結果

プレイブックの実行結果です。

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 

PLAY [all] *********************************************************************

TASK [ディレクトリ作成(単体)] ************************************************************
changed: [STKPUB002] => {"changed": true, "gid": 9000, "group": "syutaku", "mode": "0755", "owner": "syutaku", "path": "/home/workspace/dir1", "size": 6, "state": "directory", "uid": 9000}

PLAY RECAP *********************************************************************
STKPUB002                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

lsコマンドで作成したディレクトリを確認します。

[syutaku@STKPUB002 workspace]$ ls -ld /home/workspace/dir1/
drwxr-xr-x. 2 syutaku syutaku 6  2月  5 05:56 /home/workspace/dir1/

複数のディレクトリを作成する

ここでは、複数のディレクトリを作成する方法を説明します。

プレイブック

---
- hosts: all
  gather_facts: False
  tasks:

  - name: "ディレクトリ作成(複数)"
    file:
      path: "{{ item }}"
      state: directory
      owner: syutaku
      group: syutaku
      mode: 0755
    with_items:
      - "/home/workspace/dir2_1"
      - "/home/workspace/dir2_2"

実行結果

プレイブックの実行結果です。

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 

PLAY [all] *********************************************************************

TASK [ディレクトリ作成(複数)] ************************************************************
changed: [STKPUB002] => (item=/home/workspace/dir2_1) => {"ansible_loop_var": "item", "changed": true, "gid": 9000, "group": "syutaku", "item": "/home/workspace/dir2_1", "mode": "0755", "owner": "syutaku", "path": "/home/workspace/dir2_1", "size": 6, "state": "directory", "uid": 9000}
changed: [STKPUB002] => (item=/home/workspace/dir2_2) => {"ansible_loop_var": "item", "changed": true, "gid": 9000, "group": "syutaku", "item": "/home/workspace/dir2_2", "mode": "0755", "owner": "syutaku", "path": "/home/workspace/dir2_2", "size": 6, "state": "directory", "uid": 9000}

PLAY RECAP *********************************************************************
STKPUB002                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

lsコマンドで作成したディレクトリを確認します。

[syutaku@STKPUB002 workspace]$ ls -l /home/workspace/
合計 0
drwxr-xr-x. 2 syutaku syutaku 6  2月  5 06:02 dir2_1
drwxr-xr-x. 2 syutaku syutaku 6  2月  5 06:02 dir2_2

異なる権限設定でディレクトリを作成する

ここでは、複数のディレクトリを作成する方法を説明します。
また、作成するディレクトリの所有者/グループ/権限は、ディレクトリごとに異なる値を設定します。

プレイブック

---
- hosts: all
  gather_facts: False
  tasks:

  - name: "ディレクトリ作成(所有者/グループ/権限を個々に指定)"
    file:
      path: "{{ item.path }}"
      state: directory
      owner: "{{ item.owner }}"
      group: "{{ item.group }}"
      mode: "{{ item.mode }}"
    with_items:
      - path: "/home/workspace/dir3_1"
        owner: test1
        group: test1
        mode: "775"
      - path: "/home/workspace/dir3_2"
        owner: test2
        group: test2
        mode: "777"
    become: yes

実行結果

プレイブックの実行結果です。

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 

PLAY [all] *********************************************************************

TASK [ディレクトリ作成(所有者/グループ/権限を個々に指定)] ******************************************
changed: [STKPUB002] => (item={'path': '/home/workspace/dir3_1', 'owner': 'test1', 'group': 'test1', 'mode': '775'}) => {"ansible_loop_var": "item", "changed": true, "gid": 9001, "group": "test1", "item": {"group": "test1", "mode": "775", "owner": "test1", "path": "/home/workspace/dir3_1"}, "mode": "0775", "owner": "test1", "path": "/home/workspace/dir3_1", "size": 6, "state": "directory", "uid": 9001}
changed: [STKPUB002] => (item={'path': '/home/workspace/dir3_2', 'owner': 'test2', 'group': 'test2', 'mode': '777'}) => {"ansible_loop_var": "item", "changed": true, "gid": 9002, "group": "test2", "item": {"group": "test2", "mode": "777", "owner": "test2", "path": "/home/workspace/dir3_2"}, "mode": "0777", "owner": "test2", "path": "/home/workspace/dir3_2", "size": 6, "state": "directory", "uid": 9002}

PLAY RECAP *********************************************************************
STKPUB002                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

lsコマンドで作成したディレクトリを確認します。
作成した2つのディレクトリのパーミッションや所有者、グループが違うことが分かります。

[syutaku@STKPUB002 workspace]$ ls -l /home/workspace/
合計 0
drwxrwxr-x. 2 test1 test1 6  2月  5 06:13 dir3_1
drwxrwxrwx. 2 test2 test2 6  2月  5 06:13 dir3_2

再帰的にディレクトリを作成する

ここでは、ディレクトリを再帰的に作成する方法を説明します。

プレイブック

---
- hosts: all
  gather_facts: False
  tasks:

  - name: "ディレクトリ作成(再帰的)"
    file:
      path: "/home/workspace/dir4_1/dir4_2/dir4_3"
      state: directory
      owner: syutaku
      group: syutaku
      mode: 0755
      recurse: yes

実行結果

プレイブックの実行結果です。

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 

PLAY [all] *********************************************************************

TASK [ディレクトリ作成(再帰的)] ***********************************************************
changed: [STKPUB002] => {"changed": true, "gid": 9000, "group": "syutaku", "mode": "0755", "owner": "syutaku", "path": "/home/workspace/dir4_1/dir4_2/dir4_3", "size": 6, "state": "directory", "uid": 9000}

PLAY RECAP *********************************************************************
STKPUB002                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

lsコマンドで作成したディレクトリを確認します。

[syutaku@STKPUB002 workspace]$ ls -lR /home/workspace/
/home/workspace/:
合計 0
drwxr-xr-x. 3 syutaku syutaku 20  2月  5 06:46 dir4_1

/home/workspace/dir4_1:
合計 0
drwxr-xr-x. 3 syutaku syutaku 20  2月  5 06:46 dir4_2

/home/workspace/dir4_1/dir4_2:
合計 0
drwxr-xr-x. 2 syutaku syutaku 6  2月  5 06:46 dir4_3

/home/workspace/dir4_1/dir4_2/dir4_3:
合計 0

コントロールノードにディレクトリを作成する

ここでは、コントロールノードにディレクトリを作成する方法を説明します。

プレイブック

---
- hosts: all
  gather_facts: False
  tasks:

  - name: "ディレクトリ作成(コントロールノード)"
    file:
      path: "/home/awx/dir5"
      state: directory
      owner: root
      group: root
      mode: 0755
    delegate_to: localhost

実行結果

プレイブックの実行結果です。

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 

PLAY [all] *********************************************************************

TASK [ディレクトリ作成(コントロールノード)] *****************************************************
changed: [STKPUB002] => {"changed": true, "gid": 0, "group": "root", "mode": "0755", "owner": "root", "path": "/home/awx/dir5", "size": 4096, "state": "directory", "uid": 0}

PLAY RECAP *********************************************************************
STKPUB002                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

lsコマンドで作成したディレクトリを確認します。

[root@STKAWX001 awx]# ls -l /home/awx/
total 51724
drwxr-xr-x. 2 root root     4096 Feb  5 06:50 dir5

コメント

タイトルとURLをコピーしました