だから、自分の役割を書く代わりに、可能であればAnsible Galaxyを使い始めるべきだと考えました。最初の役割をインストールしたばかりで、/etc/local/ansible/roles
(私はOSXを使用しています)。今、私は実際に必要な場所にこの役割をどのようにインストールするのだろうか?ロールを必要な場所にコピーするだけですか、それともAnsibleの方法がありますか?
はい、サンプルプロジェクト構造に従ってそれらをコピーします。
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
ディレクトリをプロジェクトルートとして使用することもできます。
それが役に立てば幸い。
一般に、すべての共有ロールは、すべてのプロジェクトで共有される単一のマスターフォルダーに固定します。これにより、同じ役割の複数のコピーを手動でコピー/貼り付けおよび更新する面倒さが回避されます。
各プロジェクトのansible.cfg
を変更して、ansible
にローカルプロジェクトフォルダーに加えてそのマスターフォルダー内のロールも検索するように指示するよりも。
サンプルansible.cfg
:
[defaults]
roles_path = ~/Code/ansible_roles
Ansibleは最初にローカルプロジェクトでロールを検索し、次にroles_path
を検索します。コロンで区切ることにより、複数のパスを指定できます。
デフォルトでは、ansible-galaxy install username.rolename
はroles_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_CONFIG
、ansible.cfg
、ホームディレクトリにある.ansible.cfg
、または/etc/ansible/ansible.cfg
のうち、最初に見つかったものを読み取ります。
銀河の役割を扱う問題をどのように解決し、どのプラットフォームでも動作する方法を以下に示します。
ソース管理の一部であるansible.cfg
ファイルを編集して、これを追加します。
roles_path = roles.galaxy:roles
roles.galaxy
という名前のディレクトリを作成し、これからansible-galaxy install xxx.yyy
を実行すると、roles.galaxy
にインストールされます。
引き続きローカルロールをroles
ディレクトリ内に、コミュニティロールをroles.galaxy
内に保持します。両方ともgitリポジトリに保持されることになっています。
これらをgalaxyからインストールすることを考えないでください。これは、いくつかの障害点を追加することに加えて、大きなセキュリティリスクになります。
私はおそらくこの質問に答えるのが遅すぎます。ただし、必要なことは1つのコマンドで実行できます。
ansible-galaxy install -p ./roles thefinn93.letsencrypt
letsencryptロールをrolesディレクトリにインストールします。コピーする必要はありません。
私は自分の役割にグローバルな道を望んでいました。 〜/ .ansible.cfgにansible.cfgを置くことでこれを行うことができます。プロジェクトベースのプロジェクトが常に優先されます。
cat ~/.ansible.cfg
[defaults]
roles_path = ~/.ansible/roles
リポジトリフォルダー内にロールを保存するには(おそらく、必要なものはすべて、バージョン管理されているすべてのものをコードとしてのインフラストラクチャの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
フォルダー内に保存されます。