最初に新しいユーザー名を作成するプレイブックを作成しています。次に、作成したばかりの新しいユーザーとして「moretasks.yml」を実行します。現在、すべてのタスクにremote_userを設定しています。タスクセット全体に対して一度に設定できる方法はありますか?私はこれの例を見つけることができなかったようでしたし、remote_userをヘルプ内で移動させようとする私の試みも何もしませんでした。
以下はmain.ymlです:
---
- name: Configure Instance(s)
hosts: all
remote_user: root
gather_facts: true
tags:
- config
- configure
tasks:
- include: createuser.yml new_user=username
- include: moretasks.yml new_user=username
- include: roottasks.yml #some tasks unrelated to username.
moretasks.yml:
---
- name: Task1
copy:
src: /vagrant/FILE
dest: ~/FILE
remote_user: "{{newuser}}"
- name: Task2
copy:
src: /vagrant/FILE
dest: ~/FILE
remote_user: "{{newuser}}"
まず最初に、確かにSudo_user
を使用します(リモートユーザーはログインするユーザー、Sudo_user
はタスクを実行するユーザーです)。
あなたの場合、別のユーザー(以前に作成したユーザー)としてタスクを実行したいだけです:
- include: moretasks.yml
Sudo: yes
Sudo_user: "{{ newuser }}"
これらのタスクは{{newuser}}として実行されます(引用符を忘れないでください)
備考:ほとんどの場合、remote_user
をホストパラメータとして検討する必要があります。マシンへのログインが許可され、操作を実行するための十分な権限を持つユーザーです。運用上、Sudo
/Sudo_user
を使用する必要があります
これを分割して別の演劇にできますか? (プレイブックには複数のプレイを含めることができます)
---
- name: PLAY 1
hosts: all
remote_user: root
gather_facts: true
tasks:
- include: createuser.yml new_user=username
- include: roottasks.yml #some tasks unrelated to username.
- name: PLAY 2
hosts: all
remote_user: username
gather_facts: false
tasks:
- include: moretasks.yml new_user=username
最初のプレイでregister:
またはset_fact:
で設定された変数を使用して、2番目のプレイで物事を行うことはできません(このステートメントは完全に真実ではありません。変数はhostvars
で使用できますが、ロール間で変数を使用しないことをお勧めします)。 group_varsやHost_varsのように定義された変数は問題なく機能します。
私が伝えたいもう1つのヒントは、roles
http://docs.ansible.com/playbooks_roles.html の使用を調べることです。最初はもっと複雑に見えるかもしれませんが、それらを再利用する方がはるかに簡単です( "createuser.yml"で行っているようです)。達成しようとしていることの種類を見ると、「すべてのものを含める」パスはそれほど長くは続きません。
問題と一致するようなものです。それが役に立てば幸い。 CiscoのAnsible 2.5サポートのプレイブックを更新している間IOS network_cli接続
Ansible-vaultで作成された認証情報ファイル:auth/secrets.yml
---
creds:
username: 'ansible'
password: 'user_password'
ハンドブック:
---
- hosts: ios
gather_facts: yes
connection: network_cli
become: yes
become_method: enable
ignore_errors: yes
tasks:
- name: obtain login credentials
include_vars: auth/secrets.yml
- name: Set Username/ Password
set_fact:
remote_user: "{{ creds['username'] }}"
ansible_ssh_pass: "{{ creds['password'] }}"
- name: Find info for "{{ inventory_hostname }}" via ios_facts
ios_facts:
gather_subset: all
register: hardware_fact
Auth/secrets.yml credsなしでPlaybookを実行する:
ansible-playbook -u ansible -k playbook.yml -l inventory_hostname