Ansible:コマンドラインからロールを実行できますか?


92

私が「apache」という役割を持っているとしましょう

ここで、Ansibleホストのコマンドラインからホスト192.168.0.10でそのロールを実行したいと思います

ansible-playbook -i  "192.168.0.10" --role  "path to role"

それを行う方法はありますか?

回答:


84

この機能については知りませんが、タグを使用して、プレイブックから1つの役割を実行することができます。

roles:
    - {role: 'mysql', tags: 'mysql'}
    - {role: 'apache', tags: 'apache'}

ansible-playbook webserver.yml --tags "apache"

62

ansible 2.7を使用すると、次のことができます。

$ cd /path/to/ansible/
$ ansible localhost -m include_role -a name=<role_name>
localhost | SUCCESS => {
    "changed": false,
    "include_variables": {
        "name": "<role_name>"
    }
}
localhost | SUCCESS => {
    "msg": "<role_name>"
}

これにより、/ path / to / ansible / rolesまたは構成済みのロールパスからロールが実行されます。

詳細はこちら:https//github.com/ansible/ansible/pull/43131


1
実装された外部ロールYAMLファイル@kariへの参照がなく、含めたいため、これは実際には質問に答えません。同じ質問があります。しかし、この答えを読んだ後、私はそれが実行可能であることを理解するだけです。方法がわかりません。
コラ

うまくいけば、私は答え@Kola明らかにした
ジュリアスŽaromskis

1
これはAnsible2.8で壊れています。次のような不可解なエラーメッセージをログに記録するだけです'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.
ChristianCiach19年

このソリューションは、ansible2.8.2でうまくいくようです。元のロールに含まれている他のロールに変数を公開することに問題があるようです(これはプレイブックでは問題ではありません)。に変更してみました-a "name=<role_name> public=yes"が、うまくいきませんでした。
user20664 8019

-mと-aの内容を理解するには、docs.ansible.com / ansible / latest / user_guide / modules_intro.htmlを参照してください基本的に、これは-m <module-name>、引数(-a key=value)としてkey = valueペアを使用してコマンドライン()からモジュールを開始する方法です
andymel

22

Ansibleにはそのようなことはありませんが、これが頻繁に使用される場合は、このスクリプトを試してください。
名前の下で検索可能なPATH内のどこかにそれを置きますansible-role

#!/bin/bash

if [[ $# < 2 ]]; then
  cat <<HELP
Wrapper script for ansible-playbook to apply single role.

Usage: $0 <host-pattern> <role-name> [ansible-playbook options]

Examples:
  $0 dest_host my_role
  $0 custom_host my_role -i 'custom_host,' -vv --check
HELP
  exit
fi

HOST_PATTERN=$1
shift
ROLE=$1
shift

echo "Trying to apply role \"$ROLE\" to host/group \"$HOST_PATTERN\"..."

export ANSIBLE_ROLES_PATH="$(pwd)/roles"
export ANSIBLE_RETRY_FILES_ENABLED="False"
ansible-playbook "$@" /dev/stdin <<END
---
- hosts: $HOST_PATTERN
  roles:
    - $ROLE
END

3
「Createansible-role」ツールの提案を作成しました。次のように表示されます:github.com/ansible/proposals/issues/131
jhutar 2018

4
Ansible 2.7で実装されているようです:github.com/ansible/ansible/pull/43131
EM0

はい、試してみてくださいansible localhost -m include_role -a name=myrole-私のために働きます!
jhutar

ansible localhost -m include_role -a name=myroleansible2.8以降は壊れています。次のような不可解なエラーメッセージをログに記録するだけです'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.
ChristianCiach19年


13

auto_tagsプレイブック内の役割ごとに同じ名前のタグを動的に生成する、と呼ばれる小さなAnsibleプラグインを作成しました。あなたはここでそれを見つけることができます。

インストール後(手順は上記の要点にあります)、次の方法で特定の役割を実行できます。

ansible-playbook -i "192.168.0.10" --tags "name_of_role"


4

あなたはそれを試しましたか?とてもかっこいいです。より意味のある例を示すために、「apache」ロールの代わりに「update-os」を使用しています。私にはという役割があります。たとえば./roles/update-os/、次のような./ファイルを追加します./role-update-os.yml

#!/usr/bin/ansible-playbook
---
- hosts: all
  gather_facts: yes
  become: yes
  roles:
  - update-os

このファイルを実行可能にします(chmod +x role-update-os.yml)。これで、実行して、インベントリに./update-os.yml -i inventory-dev --limit 192.168.0.10あるものに制限することができます。制限は、グループ名にも渡すことができます。

  • --limit web,db > web and dbは、インベントリで定義されたグループです
  • --limit 192.168.0.10,192.168.0.201
$ cat inventory-dev
[web]
192.168.0.10

[db]
192.168.0.201

パスワードを入力せずに実行できるようにssh-keysおよびsudoersポリシーを構成できることに注意してください。自動化に理想的であり、これにはセキュリティ上の影響があります。したがって、環境を分析して、それが適切かどうかを確認する必要があります。


2

ansible 2.8では、動作が少し異なります

wohlgemuth@leela:~/workspace/rtmtb-ansible/kvm-cluster$ ansible localhost -m import_role -a name=rtmtb
 [WARNING]: No inventory was parsed, only implicit localhost is available

localhost | CHANGED => {
    "changed": true, 
    "checksum": "d31b41e68997e1c7f182bb56286edf993146dba1", 
    "dest": "/root/.ssh/id_rsa.github", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "b7831c4c72f3f62207b2b96d3d7ed9b3", 
    "mode": "0600", 
    "owner": "root", 
    "size": 3389, 
    "src": "/home/wohlgemuth/.ansible/tmp/ansible-tmp-1561491049.46-139127672211209/source", 
    "state": "file", 
    "uid": 0
}
localhost | CHANGED => {
    "changed": true, 
    "checksum": "1972ebcd25363f8e45adc91d38405dfc0386b5f0", 
    "dest": "/root/.ssh/config", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "f82552a9494e40403da4a80e4c528781", 
    "mode": "0644", 
    "owner": "root", 
    "size": 147, 
    "src": "/home/wohlgemuth/.ansible/tmp/ansible-tmp-1561491049.99-214274671218454/source", 
    "state": "file", 
    "uid": 0
}

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