web-dev-qa-db-ja.com

タスクごとに繰り返すことなく、Ansibleプレイブックのタスクのセットにremote_userを設定します

最初に新しいユーザー名を作成するプレイブックを作成しています。次に、作成したばかりの新しいユーザーとして「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}}"
12
Shark

まず最初に、確かにSudo_userを使用します(リモートユーザーはログインするユーザー、Sudo_userはタスクを実行するユーザーです)。

あなたの場合、別のユーザー(以前に作成したユーザー)としてタスクを実行したいだけです:

- include: moretasks.yml
  Sudo: yes
  Sudo_user: "{{ newuser }}"

これらのタスクは{{newuser}}として実行されます(引用符を忘れないでください)

備考:ほとんどの場合、remote_userをホストパラメータとして検討する必要があります。マシンへのログインが許可され、操作を実行するための十分な権限を持つユーザーです。運用上、Sudo/Sudo_userを使用する必要があります

8
ProfHase85

これを分割して別の演劇にできますか? (プレイブックには複数のプレイを含めることができます)

---
- 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つのヒントは、roleshttp://docs.ansible.com/playbooks_roles.html の使用を調べることです。最初はもっと複雑に見えるかもしれませんが、それらを再利用する方がはるかに簡単です( "createuser.yml"で行っているようです)。達成しようとしていることの種類を見ると、「すべてのものを含める」パスはそれほど長くは続きません。

7

問題と一致するようなものです。それが役に立てば幸い。 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
0
Jose H. Rosa