web-dev-qa-db-ja.com

Ansible Galaxyロールは特定のディレクトリにインストールされますか?

だから、自分の役割を書く代わりに、可能であればAnsible Galaxyを使い始めるべきだと考えました。最初の役割をインストールしたばかりで、/etc/local/ansible/roles(私はOSXを使用しています)。今、私は実際に必要な場所にこの役割をどのようにインストールするのだろうか?ロールを必要な場所にコピーするだけですか、それともAnsibleの方法がありますか?

47
StenW

はい、サンプルプロジェクト構造に従ってそれらをコピーします。

site.yml
webservers.yml
fooservers.yml
roles/
   common/
     files/
     templates/
     tasks/
     handlers/
     vars/
     meta/
   webservers/
     files/
     templates/
     tasks/
     handlers/
     vars/
     meta/

または、ansible-galaxyまたは-p ROLES_PATHオプションを指定して--roles-path=ROLES_PATHを実行し、/your/project/rootの下にインストールすることができます。

/etc/local/ansibleディレクトリをプロジェクトルートとして使用することもできます。

それが役に立てば幸い。

56
Rico

一般に、すべての共有ロールは、すべてのプロジェクトで共有される単一のマスターフォルダーに固定します。これにより、同じ役割の複数のコピーを手動でコピー/貼り付けおよび更新する面倒さが回避されます。

各プロジェクトのansible.cfgを変更して、ansibleにローカルプロジェクトフォルダーに加えてそのマスターフォルダー内のロールも検索するように指示するよりも。

サンプルansible.cfg

[defaults]
roles_path = ~/Code/ansible_roles 

Ansibleは最初にローカルプロジェクトでロールを検索し、次にroles_pathを検索します。コロンで区切ることにより、複数のパスを指定できます。

デフォルトでは、ansible-galaxy install username.rolenameroles_pathで設定されたansible.cfgにロールをインストールするため、これでほとんどすべての作業が必要になります。

時々、マスターフォルダーではなく、特定のプロジェクトに役割をインストールしたいことがあります。たとえば、2つのロールに同じロールの異なるバージョンを必要とするロールの依存関係がある場合にバージョンの競合を回避するため。その場合、-p ROLES_PATHまたは--roles-path=ROLES_PATHオプションを使用できます。

ansible-galaxy install username.rolename -p ~/Code/project_deploy/ansible/roles/

Ansible 1.9では、プロジェクトのrequirements.ymlでロールをインストールする場所を手動で指定できます。残念ながら、 このpath paramはAnsible 2で削除されました

# from galaxy
- src: jeffwidman.elasticsearch

# from private github repo, installing to a relative path
- src: https://github.com/jeffwidman/private_ansible_role
  path: vagrant/roles/

さらにカスタマイズしたい場合は、 複数のansible.cfgファイルのサポートを追加 に未解決の問題があります。これにより、さまざまなレベルの特異性でroles_pathを簡単に設定できます。 Ansibleは、現在の作業ディレクトリにあるANSIBLE_CONFIGansible.cfg、ホームディレクトリにある.ansible.cfg、または/etc/ansible/ansible.cfgのうち、最初に見つかったものを読み取ります。

37
Jeff Widman

銀河の役割を扱う問題をどのように解決し、どのプラットフォームでも動作する方法を以下に示します。

ソース管理の一部であるansible.cfgファイルを編集して、これを追加します。

roles_path = roles.galaxy:roles

roles.galaxyという名前のディレクトリを作成し、これからansible-galaxy install xxx.yyyを実行すると、roles.galaxyにインストールされます。

引き続きローカルロールをrolesディレクトリ内に、コミュニティロールをroles.galaxy内に保持します。両方ともgitリポジトリに保持されることになっています。

これらをgalaxyからインストールすることを考えないでください。これは、いくつかの障害点を追加することに加えて、大きなセキュリティリスクになります。

22
sorin

私はおそらくこの質問に答えるのが遅すぎます。ただし、必要なことは1つのコマンドで実行できます。

ansible-galaxy install -p ./roles thefinn93.letsencrypt

letsencryptロールをrolesディレクトリにインストールします。コピーする必要はありません。

9
Yiman

私は自分の役割にグローバルな道を望んでいました。 〜/ .ansible.cfgにansible.cfgを置くことでこれを行うことができます。プロジェクトベースのプロジェクトが常に優先されます。

cat ~/.ansible.cfg
[defaults]
roles_path = ~/.ansible/roles
1
Aimon Bustardo

リポジトリフォルダー内にロールを保存するには(おそらく、必要なものはすべて、バージョン管理されているすべてのものをコードとしてのインフラストラクチャの1つです)、これがディレクトリレイアウトであると仮定します。

repo-folder
    inventory     << likely you have this already
    roles         << this, too
    roles.galaxy  << create if you dont have it
    site.yml      << or whatever your playbook is called
    ansible.cfg   << repo-local config overriding gloabal ~/.ansible.cfg

上記のansible.cfgを開き(まだ作成していない場合は新たに作成し)、このコンテンツを追加します。

[defaults]
roles_path = roles.galaxy:roles

ansible-galaxy install SOMETHINGを実行すると、その内容がroles.galaxyフォルダー内に保存されます。

0
sjas