Ansible-roles

提供:Dev Guides
移動先:案内検索

Ansible-ロール

ロールは、変数、タスク、ファイル、テンプレート、およびモジュールの完全に独立した、または相互に依存するコレクションのフレームワークを提供します。

Ansibleの役割は、プレイブックを複数のファイルに分割するための主要なメカニズムです。 これにより、*複雑なプレイブック*の記述が簡単になり、再利用しやすくなります。 プレイブックの分割により、プレイブックを論理的に再利用可能なコンポーネントに分割できます。

各ロールは基本的に特定の機能または目的の出力に制限されており、そのロール自体または依存関係としてリストされている他のロールのいずれかで結果を提供するために必要なすべてのステップがあります。

役割はプレイブックではありません。 ロールは、独立して使用できる小さな機能ですが、プレイブック内で使用する必要があります。 ロールを直接実行する方法はありません。 ロールには、ロールが適用されるホストの明示的な設定はありません。

トップレベルのプレイブックは、インベントリファイルからホストに適用されるロールへのホストを保持するブリッジです。

新しい役割を作成する

新しい役割を作成するには、役割のディレクトリ構造が不可欠です。

ロール構造

ロールには、ファイルシステム上に構造化されたレイアウトがあります。 デフォルトの構造は変更できますが、ここではデフォルトのままにします。

各役割は、それ自体がディレクトリツリーです。 ロール名は、/rolesディレクトリ内のディレクトリ名です。

$ ansible-galaxy -h

使用法

ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...

オプション

  • -h、--help -このヘルプメッセージを表示して終了します。
  • -v、-verbose -詳細モード(詳細は-vvv、接続デバッグを有効にするには-vvvv)
  • *-version *-プログラムのバージョン番号を表示して終了します。

役割ディレクトリの作成

上記のコマンドにより、役割ディレクトリが作成されました。

$ ansible-galaxy init vivekrole
ERROR! The API server (https://galaxy.ansible.com/api/) is not responding, please try again later.

$ ansible-galaxy init --force --offline vivekrole
- vivekrole was created successfully

$ tree vivekrole/
vivekrole/
├── defaults
│   └── main.yml
├── files ├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md ├── tasks
│   └── main.yml
├── templates ├── tests │   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files

この例ではすべてのディレクトリが使用されるわけではなく、例ではそれらの一部の使用方法を示します。

Playbookでのロールの活用

これは、デモ用に作成したプレイブックのコードです。 このコードは、プレイブックvivek_orchestrate.ymlのものです。 ホスト: tomcat-node を定義し、 install-tomcat および start-tomcat の2つのロールを呼び出しました。

問題の声明は、Ansible経由でマシンに展開する必要がある戦争があるということです。

---
- hosts: tomcat-node
roles:
   - {role: install-tomcat}
   - {role: start-tomcat}

プレイブックを実行しているディレクトリ構造のコンテンツ。

ディレクトリ

$ ls
ansible.cfg  hosts  roles  vivek_orchestrate.retry vivek_orchestrate.yml

ロール

各ディレクトリの下にtasksディレクトリがあり、main.ymlが含まれています。 install-tomcatのmain.ymlの内容は次のとおりです-

---
#Install vivek artifacts
-
   block:
      - name: Install Tomcat artifacts
         action: >
            yum name = "demo-tomcat-1" state = present
         register: Output

   always:
      - debug:
         msg:
            - "Install Tomcat artifacts task ended with message: {{Output}}"
            - "Installed Tomcat artifacts - {{Output.changed}}"

開始Tomcatのmain.ymlの内容は次のとおりです-

#Start Tomcat
-
   block:
      - name: Start Tomcat
      command: <path of tomcat>/bin/startup.sh"
      register: output
      become: true

   always:
      - debug:
         msg:
            - "Start Tomcat task ended with message: {{output}}"
            - "Tomcat started - {{output.changed}}"

プレイブックをロールに分割する利点は、Tomcatのインストール機能を使用したい人は誰でもTomcatのインストールロールを呼び出すことができることです。

プレイブックをロールに分割する

ロール用でない場合、それぞれのロールのmain.ymlのコンテンツをプレイブック yml ファイルにコピーできます。 しかし、モジュール性を持たせるために、役割が作成されました。

再利用可能な機能として再利用できる論理エンティティは、そのエンティティをロールに移動できます。 この例は上に示されています

プレイブックを実行するコマンドを実行しました。

-vvv option for verbose output – verbose output
$ cd vivek-playbook/

これは、プレイブックを実行するコマンドです

$ sudo ansible-playbook -i hosts vivek_orchestrate.yml –vvv
-----------------------------------------------------------------
-----------------------------------------------------------------------

出力

生成された出力は、画面に表示されるとおりです-

*/users/demo/vivek-playbook/ansible.cfg* を構成ファイルとして使用します。
PLAYBOOK: vivek_orchestrate.yml *********************************************************
********************************************************** *
1 plays in vivek_orchestrate.yml

PLAY [tomcat-node]* *********************************************************************
******** ************************************************ *

TASK [Gathering Facts]* ************************************************
****************************** ******************************************** *
Tuesday 21 November 2017  13:02:05 +0530 (0:00:00.056) 0:00:00.056* **** *
Using module file/usr/lib/python2.7/sitepackages/ansible/modules/system/setup.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC/bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC/bin/sh -c '( umask 77 && mkdir -p "` echo
  /root/.ansible/tmp/ansible-tmp-1511249525.88-259535494116870 `" &&
   echo ansible-tmp-1511249525.88-259535494116870="`
   echo/root/.ansible/tmp/ansibletmp-1511249525.88-259535494116870 `" ) && sleep 0'
<localhost> PUT/tmp/tmpPEPrkd TO
  /root/.ansible/tmp/ansible-tmp-1511249525.88259535494116870/setup.py
<localhost> EXEC/bin/sh -c 'chmod u+x
  /root/.ansible/tmp/ansible-tmp1511249525.88-259535494116870/
  /root/.ansible/tmp/ansible-tmp-1511249525.88259535494116870/setup.py && sleep 0'
<localhost> EXEC/bin/sh -c '/usr/bin/python
  /root/.ansible/tmp/ansible-tmp1511249525.88-259535494116870/setup.py; rm -rf
   "/root/.ansible/tmp/ansible-tmp1511249525.88-259535494116870/" >/dev/null 2>&1 && sleep 0'
ok: [server1]
META: ran handlers

TASK [install-tomcat : Install Tomcat artifacts]* **********************************
************************************************************** *
task path:/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:5
Tuesday 21 November 2017  13:02:07 +0530 (0:00:01.515)       0:00:01.572* **** *
Using module file/usr/lib/python2.7/sitepackages/ansible/modules/packaging/os/yum.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC/bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC/bin/sh -c '( umask 77 && mkdir -p "` echo
  /root/.ansible/tmp/ansible-tmp-1511249527.34-40247177825302 `" && echo
   ansibletmp-1511249527.34-40247177825302="` echo
  /root/.ansible/tmp/ansible-tmp1511249527.34-40247177825302 `" ) && sleep 0'
<localhost> PUT/tmp/tmpu83chg TO
  /root/.ansible/tmp/ansible-tmp-1511249527.3440247177825302/yum.py
<localhost> EXEC/bin/sh -c 'chmod u+x
  /root/.ansible/tmp/ansible-tmp1511249527.34-40247177825302/
  /root/.ansible/tmp/ansible-tmp-1511249527.3440247177825302/yum.py && sleep 0'
<localhost> EXEC/bin/sh -c '/usr/bin/python
  /root/.ansible/tmp/ansible-tmp1511249527.34-40247177825302/yum.py; rm -rf
   "/root/.ansible/tmp/ansible-tmp1511249527.34-40247177825302/" >/dev/null 2>
   &1 && sleep 0'
changed: [server1] => {
   "changed": true,
   "invocation": {
      "module_args": {
         "conf_file": null,
         "disable_gpg_check": false,
         "disablerepo": null,
         "enablerepo": null,
         "exclude": null,
         "install_repoquery": true,
         "installroot": "/",
         "list": null,
         "name": ["demo-tomcat-1"],
         "skip_broken": false,
         "state": "present",
         "update_cache": false,
         "validate_certs": true
      }
   },
   "msg": "",
   "rc": 0,
   "results": [
      "Loaded plugins: product-id,
      search-disabled-repos,
      subscriptionmanager\nThis system is not registered to Red Hat Subscription Management.
      You can use subscription-manager to register.\nResolving Dependencies\n-->
      Running transaction check\n--->
      Package demo-tomcat-1.noarch 0:SNAPSHOT-1 will be installed\n--> Finished Dependency
      Resolution\n\nDependencies Resolved\n
      \n================================================================================\n
      Package Arch Version Repository
      Size\n==================================================================\nInstalling:\n
      demo-tomcat-1 noarch SNAPSHOT-1 demo-repo1 7.1 M\n\nTransaction
      Summary\n==================================================================\nInstall  1
      Package\n\nTotal download size: 7.1 M\nInstalled size: 7.9 M\nDownloading
         packages:\nRunning transaction
      check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing :
      demotomcat-1-SNAPSHOT-1.noarch 1/1 \n  Verifying  :
      demo-tomcat-1-SNAPSHOT-1.noarch 1/1 \n\nInstalled:\n
      demo-tomcat-1.noarch 0:SNAPSHOT-1 \n\nComplete!\n"
   ]
}

TASK [install-tomcat : debug]* *********************************************************
************************************************************************** *
task path:/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:11
Tuesday 21 November 2017  13:02:13 +0530 (0:00:06.757) 0:00:08.329* **** *
ok: [server1] => {
   "changed": false,
   "msg": [
      "Install Tomcat artifacts task ended with message: {
         u'msg': u'', u'changed': True, u'results':
         [u'Loaded plugins: product-id,
         search-disabledrepos,
         subscription-manager\\nThis system is not registered to Red Hat Subscription Management.
         You can use subscription-manager to register.\\nResolving Dependencies\\n-->
         Running transaction check\\n--->
         Package demo-tomcat-1.noarch 0:SNAPSHOT-1 will be installed\\n-->
         Finished Dependency Resolution\\n
         \\nDependencies
         Resolved\\n\\n==================================================================\\n
         Package Arch Version Repository
         Size\\n========================================================================
         =====\\nInstalling:\\n demo-tomcat-1 noarch SNAPSHOT-1 demo-repo1 7.1 M\\n\\nTransaction
         Summary\\n=========================================================\\nInstall  1
         Package\\n\\nTotal download size: 7.1 M\\nInstalled size: 7.9 M\\nDownloading
            packages:\\nRunning
         transaction check\\nRunning transaction test\\nTransaction test succeeded\\nRunning
            transaction\\n
         Installing : demo-tomcat-1-SNAPSHOT-1.noarch 1/1 \\n  Verifying  :
         demo-tomcat-1-SNAPSHOT-1.noarch
         1/1 \\n\\nInstalled:\\n  demo-tomcat-1.noarch 0:SNAPSHOT-1  \\n\\nComplete!\\n'], u'rc': 0
      }",
      "Installed Tomcat artifacts - True"
   ]
}

TASK [install-tomcat : Clean DEMO environment]* ***************************************
*********************************************************** *
task path:/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:19
Tuesday 21 November 2017  13:02:13 +0530 (0:00:00.057) 0:00:08.387* **** *
[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or
   {% %}. Found: {{installationOutput.changed}}

Using module file/usr/lib/python2.7/sitepackages/ansible/modules/files/file.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC/bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC/bin/sh -c '( umask 77 && mkdir -p "` echo
  /root/.ansible/tmp/ansible-tmp-1511249534.13-128345805983963 `" && echo
   ansible-tmp-1511249534.13-128345805983963="` echo
  /root/.ansible/tmp/ansibletmp-1511249534.13-128345805983963 `" ) && sleep 0'
<localhost> PUT/tmp/tmp0aXel7 TO
  /root/.ansible/tmp/ansible-tmp-1511249534.13128345805983963/file.py
<localhost> EXEC/bin/sh -c 'chmod u+x
  /root/.ansible/tmp/ansible-tmp1511249534.13-128345805983963/
  /root/.ansible/tmp/ansible-tmp-1511249534.13128345805983963/file.py && sleep 0'
<localhost> EXEC/bin/sh -c '/usr/bin/python
  /root/.ansible/tmp/ansible-tmp1511249534.13-128345805983963/file.py; rm -rf
   "/root/.ansible/tmp/ansible-tmp1511249534.13-128345805983963/" >/dev/null 2>&1
   && sleep 0'
changed: [server1] => {
   "changed": true,
      "diff": {
         "after": {
            "path": "/users/demo/DEMO",
            "state": "absent"
      },
      "before": {
         "path": "/users/demo/DEMO",
         "state": "directory"
      }
   },

   "invocation": {
      "module_args": {
         "attributes": null,
         "backup": null,
         "content": null,
         "delimiter": null,
         "diff_peek": null,
         "directory_mode": null,
         "follow": false,
         "force": false,
         "group": null,
         "mode": null,
         "original_basename": null,
         "owner": null,
         "path": "/users/demo/DEMO",
         "recurse": false,
         "regexp": null,
         "remote_src": null,
         "selevel": null,
         "serole": null,
         "setype": null,
         "seuser": null,
         "src": null,
         "state": "absent",
         "unsafe_writes": null,
         "validate": null
      }
   },
   "path": "/users/demo/DEMO",
   "state": "absent"
}

TASK [install-tomcat : debug]* *******************************************************
************************************************************ *
task path:/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:29
Tuesday 21 November 2017  13:02:14 +0530 (0:00:00.257)       0:00:08.645* **** *
ok: [server1] => {
   "changed": false,
   "msg": [
      "Clean DEMO environment task ended with message:{u'diff': {u'after': {u'path':
         u'/users/demo/DEMO', u'state': u'absent'},
      u'before': {u'path': u'/users/demo/DEMO', u'state': u'directory'}}, u'state': u'absent',
         u'changed': True, u'path': u'/users/demo/DEMO'}",
      "check value  :True"
   ]
}

TASK [install-tomcat : Copy Tomcat to user home]* ************************************
******************************************************* *
task path:/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:37
Tuesday 21 November 2017  13:02:14 +0530 (0:00:00.055)       0:00:08.701* **** *
[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or
   {% %}. Found: {{installationOutput.changed}}

Using module file/usr/lib/python2.7/sitepackages/ansible/modules/commands/command.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC/bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC/bin/sh -c '( umask 77 && mkdir -p "` echo
  /root/.ansible/tmp/ansible-tmp-1511249534.43-41077200718443 `" && echo
   ansibletmp-1511249534.43-41077200718443="` echo
  /root/.ansible/tmp/ansible-tmp1511249534.43-41077200718443 `" ) && sleep 0'
<localhost> PUT/tmp/tmp25deWs TO
  /root/.ansible/tmp/ansible-tmp-1511249534.4341077200718443/command.py
<localhost> EXEC/bin/sh -c 'chmod u+x
  /root/.ansible/tmp/ansible-tmp1511249534.43-41077200718443/
  /root/.ansible/tmp/ansible-tmp-1511249534.4341077200718443/command.py && sleep 0'
<localhost> EXEC/bin/sh -c '/usr/bin/python
  /root/.ansible/tmp/ansible-tmp1511249534.43-41077200718443/command.py; rm -rf
   "/root/.ansible/tmp/ansibletmp-1511249534.43-41077200718443/" >/dev/null 2>&1
   && sleep 0'
changed: [server1] => {
   "changed": true,
   "cmd": [
      "cp",
      "-r",
      "/opt/ansible/tomcat/demo",
      "/users/demo/DEMO/"
   ],
   "delta": "0:00:00.017923",
   "end": "2017-11-21 13:02:14.547633",
   "invocation": {
      "module_args": {
         "_raw_params": "cp -r/opt/ansible/tomcat/demo/users/demo/DEMO/",
         "_uses_shell": false,
         "chdir": null,
         "creates": null,
         "executable": null,
         "removes": null,
         "warn": true
      }
   },
   "rc": 0,
   "start": "2017-11-21 13:02:14.529710",
   "stderr": "",
   "stderr_lines": [],
   "stdout": "",
   "stdout_lines": []
}

TASK [install-tomcat : debug]* *******************************************************
********************************************************* *
task path:/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:47
Tuesday 21 November 2017  13:02:14 +0530 (0:00:00.260)       0:00:08.961* **** *
ok: [server1] => {
   "changed": false,
   "msg": "Copy Tomcat to user home task ended with message {
      'stderr_lines': [], u'changed': True, u'end': u'2017-11-21 13:02:14.547633', u'stdout':
      u'', u'cmd': [u'cp', u'-r', u'/opt/ansible/tomcat/demo', u'/users/demo/DEMO/'], u'rc': 0,
      u'start': u'2017-11-21 13:02:14.529710', u'stderr': u'', u'delta': u'0:00:00.017923',
      'stdout_lines': []}"
}

TASK [start-tomcat : Start Tomcat]* *************************************************
********************************************************* *
task path:/users/demo/vivek-playbook/roles/start-tomcat/tasks/main.yml:5
Tuesday 21 November 2017  13:02:14 +0530 (0:00:00.044)       0:00:09.006* **** *
Using module file/usr/lib/python2.7/sitepackages/ansible/modules/commands/command.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC/bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC/bin/sh -c '( umask 77 && mkdir -p "` echo
  /root/.ansible/tmp/ansible-tmp-1511249534.63-46501211251197 `" && echo
   ansibletmp-1511249534.63-46501211251197="` echo
  /root/.ansible/tmp/ansible-tmp1511249534.63-46501211251197 `" ) && sleep 0'
<localhost> PUT/tmp/tmp9f06MQ TO
  /root/.ansible/tmp/ansible-tmp-1511249534.6346501211251197/command.py
<localhost> EXEC/bin/sh -c 'chmod u+x
  /root/.ansible/tmp/ansible-tmp1511249534.63-46501211251197/
  /root/.ansible/tmp/ansible-tmp-1511249534.6346501211251197/command.py && sleep 0'
<localhost> EXEC/bin/sh -c '/usr/bin/python
  /root/.ansible/tmp/ansible-tmp1511249534.63-46501211251197/command.py; rm -rf
   "/root/.ansible/tmp/ansibletmp-1511249534.63-46501211251197/" >/dev/null 2>&1
   && sleep 0'
changed: [server1] => {
   "changed": true,
   "cmd": [ "/users/demo/DEMO/bin/startup.sh" ],
   "delta": "0:00:00.020024",
   "end": "2017-11-21 13:02:14.741649",
   "invocation": {
      "module_args": {
         "_raw_params": "/users/demo/DEMO/bin/startup.sh",
         "_uses_shell": false,
         "chdir": null,
         "creates": null,
         "executable": null,
         "removes": null,
         "warn": true
      }
   },
   "rc": 0,
   "start": "2017-11-21 13:02:14.721625",
   "stderr": "",
   "stderr_lines": [],
   "stdout": "Tomcat started.",
   "stdout_lines": [ "Tomcat started." ]
}

TASK [start-tomcat : debug]* ************************************************
********************************************************************* *
task path:/users/demo/vivek-playbook/roles/start-tomcat/tasks/main.yml:10
Tuesday 21 November 2017  13:02:14 +0530 (0:00:00.150)       0:00:09.156* **** *
ok: [server1] => {
   "changed": false,
   "msg": [
      "Start Tomcat task ended with message: {'
         stderr_lines': [], u'changed': True, u'end': u'2017-11-21 13:02:14.741649', u'stdout':
         u'Tomcat started.', u'cmd': [u'/users/demo/DEMO/bin/startup.sh'], u'rc': 0, u'start':
         u'2017-11-21 13:02:14.721625', u'stderr': u'', u'delta': u'0:00:00.020024',
         'stdout_lines': [u'Tomcat started.']}",
      "Tomcat started - True"
   ]
}
META: ran handlers
META: ran handlers

PLAY RECAP* ******************************************************************************
******************************************************** *
server1  : ok = 9    changed = 4    unreachable = 0    failed = 0

Tuesday 21 November 2017  13:02:14 +0530 (0:00:00.042)       0:00:09.198* *****
===============================================================================
install-tomcat : Install Tomcat artifacts ------------------------------- 6.76s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:5 --------------
Gathering Facts --------------------------------------------------------- 1.52s
 ------------------------------------------------------------------------------
install-tomcat : Copy Tomcat to user home ------------------------------- 0.26s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:37 -------------

install-tomcat : Clean DEMO environment --------------------------------- 0.26s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:19 -------------

start-tomcat : Start Tomcat --------------------------------------------- 0.15s
/users/demo/vivek-playbook/roles/start-tomcat/tasks/main.yml:5 ----------------

install-tomcat : debug -------------------------------------------------- 0.06s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:11 -------------

install-tomcat : debug -------------------------------------------------- 0.06s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:29 -------------

install-tomcat : debug -------------------------------------------------- 0.04s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:47 -------------

start-tomcat : debug ---------------------------------------------------- 0.04s
/users/demo/vivek-playbook/roles/start-tomcat/tasks/main.yml:10 ---------------

次のURLにアクセスすると、以下に示すページが表示されます- http://10.76.0.134:11677/HelloWorld/HelloWorld

Hello World

デプロイされた戦争には、「Hello World」を表示するサーブレットがあります。 詳細な出力は、ansible.cfgファイルに追加されたエントリのために、すべてのタスクにかかった時間を示しています-

[defaults]
callback_whitelist = profile_tasks