私はこれとして私のディレクトリ構造を持っています
└── digitalocean
├── README.md
├── play.yml
└── roles
├── bootstrap_server
│ └── tasks
│ └── main.yml
├── create_new_user
│ └── tasks
│ └── main.yml
├── update
│ └── tasks
│ └── main.yml
└── vimserver
├── files
│ └── vimrc_server
└── tasks
└── main.yml
ロールcreate_new_user
の下にユーザーを作成するとき、ユーザー名を次のようにハードコーディングしました。
---
- name: Creating a user named username on the specified web server.
user:
name: username
state: present
Shell: /bin/bash
groups: admin
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: .ssh/id_rsa
- name: Copy .ssh/id_rsa from Host box to the remote box for user username
become: true
copy:
src: ~/.ssh/id_rsa.pub
dest: /home/usernmame/.ssh/authorized_keys
mode: 0600
owner: username
group: username
これを解決する1つの方法は、var/main.yml
を作成し、そこにユーザー名を配置することです。しかし、play.yml
レベルでユーザー名を指定できるものが必要でした。ロールvimrcserver
のユーザー名も使用しているため。
play.yml
を使用してロールを呼び出しています
---
- hosts: testdroplets
roles:
- update
- bootstrap_server
- create_new_user
- vimserver
私はそれをやって
---
- hosts: testdroplets
roles:
- update
- bootstrap_server
- role: create_new_user
username: username
- role: vimserver
username: username
play.yml
別のアプローチを見てみたいと思いますが、
ドキュメント: http://docs.ansible.com/ansible/playbooks_roles.html#roles
編集
私は最終的に次のようなディレクトリ構造に落ち着きました
$ tree
.
├── README.md
├── ansible.cfg
├── play.yml
└── roles
├── bootstrap_server
│ └── tasks
│ └── main.yml
├── create_new_user
│ ├── defaults
│ │ └── main.yml
│ └── tasks
│ └── main.yml
├── update
│ └── tasks
│ └── main.yml
└── vimserver
├── defaults
│ └── main.yml
├── files
│ └── vimrc_server
└── tasks
└── main.yml
defaults/main.yml
の使用が必要なロール内に{{username}}
ファイルを作成する場所
誰かがコードに興味があるなら、
Play.ymlのusername
エントリにvars
を入れることができるはずです。
変数を個別のファイルに分割することもできます。
以下に両方のオプションを示す例を示します。
- hosts: all
vars:
favcolor: blue
vars_files:
- /vars/external_vars.yml
tasks:
- name: this is just a placeholder
command: /bin/echo foo
https://docs.ansible.com/ansible/playbooks_variables.html#variable-file-separation
Ansibleは、ニースの包括的なリファレンスや、それぞれの異なるアプローチの完全な意味を議論する理論的根拠を持たずに、同じことを行うための異なる方法を持つことを喜ぶようです。上記のことを覚えていなかった場合(vars_files
を完全に忘れていました)、ドキュメントから見つける最も簡単なオプションは、最も洗練された3番目の方法であったかもしれません。
Ansible-examplesには目立った推奨事項があります。 group_vars
ディレクトリを見ることができます。ファイルには、マジックall
グループなど、グループに応じてホストに値を自動的に提供します。 group_varsディレクトリは、プレイブックと同じディレクトリに配置できます。
https://github.com/ansible/ansible-examples/tree/master/lamp_simple
コマンドラインから-eパラメーターを指定して変数を渡すことはできませんか?そのため、実行前であっても変数を指定できます。また、これにより、常に優先順位が最も強い変数宣言が生成されます( Variable precendence を参照)。
プレイブック内に配置する場合は、プレイブックのset_fact
ディレクティブでユーザー名を定義することをお勧めします。この変数は、すべてのロールで使用でき、プレイブックにも含まれています。何かのようなもの:
---
- hosts: testdroplets
pre_tasks:
- set_fact:
username: my_username
roles:
- update
- bootstrap_server
- create_new_user
- vimserver
たぶんこれはあなたが望むものですか?
---
- hosts: testdroplets
roles:
- update
- bootstrap_server
- { role: create_new_user, username: 'foobar' }
- vimserver
https://docs.ansible.com/ansible/2.5/user_guide/playbooks_reuse_roles.html#using-roles
すべてここにあります: http://docs.ansible.com/ansible/playbooks_variables.html
すでにいくつかの良い答えがありますが、私はこの正確なことをしたので、私は私のものを追加したかったです。
ここに私が書いた役割があります: https://github.com/jmalacho/ansible-examples/tree/master/roles/users
そして、hash_merge = trueとansibleのgroup_varsを使用してユーザーの辞書を作成します:キー、グループ。ホストまたは環境ごとに新しいユーザーを追加し、再実行が簡単です。
また、次のように、チームが環境でグループ変数をどのように使用するかについても書きました: " https://www.coveros.com/ansible-environment-design/ "