ホーム > 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
リンク
コメント