为Ansible playbook中的一组任务设置远程用户,而不重复每个任务
我正在创建一个剧本,首先创建一个新用户名。然后我想以我刚刚创建的新用户的身份运行“moretasks.yml”。目前,我正在为每个任务设置远程用户。有没有一种方法可以为整个任务集设置一次?我似乎找不到这方面的例子,也没有任何尝试移动远程用户的帮助 以下是main.yml:为Ansible playbook中的一组任务设置远程用户,而不重复每个任务,ansible,ansible-playbook,Ansible,Ansible Playbook,我正在创建一个剧本,首先创建一个新用户名。然后我想以我刚刚创建的新用户的身份运行“moretasks.yml”。目前,我正在为每个任务设置远程用户。有没有一种方法可以为整个任务集设置一次?我似乎找不到这方面的例子,也没有任何尝试移动远程用户的帮助 以下是main.yml: --- - name: Configure Instance(s) hosts: all remote_user: root gather_facts: true tags: - config
---
- 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}}"
你可以把它分成几个不同的剧本吗?(剧本可以包含多个剧本) 使用单独的剧本有一个问题:您不能在第一个剧本中使用带有
寄存器的变量集:
或set\u事实:
在第二个剧本中做事情(这句话不完全正确,变量在hostvars
中可用,但我建议不要在角色之间使用变量)。定义的变量(如组变量和主机变量)工作正常
我想给出的另一个技巧是研究如何使用
角色
。虽然一开始看起来可能更复杂,但重用它们要容易得多(就像您使用“createuser.yml”时所做的那样)。查看您试图实现的目标类型,“包含所有目标”的路径不会持续太久。首先,您肯定希望使用sudo\u用户
(远程用户是登录的用户,sudo\u用户
是执行任务的用户)
在您的情况下,您希望以另一个用户(先前创建的用户)的身份执行任务,该用户只需设置:
- include: moretasks.yml
sudo: yes
sudo_user: "{{ newuser }}"
这些任务将作为{{newuser}}执行(不要忘记引号)
在大多数情况下,你应该考虑<代码> ReleTyAuthor <代码>作为主机参数。是用户被允许登录到机器上,并且有足够的权限进行操作。对于操作性的东西,你应该使用
sudo
/sudo\u用户
某种程度上与你的问题相关。希望能有帮助。在更新我的剧本以获得对Cisco IOS network_cli连接的Ansible 2.5支持时
使用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凭据的情况下运行playbook:
ansible-playbook -u ansible -k playbook.yml -l inventory_hostname
@ProfHase85的回答是正确的,我不太明白在您的情况下,您不需要以“新用户”身份登录。答案仍然未定,拆分剧本和使用角色是有效的技巧。是的,只是开始这个代码库的结构。随着它变得更加详细,我可能会研究角色的有效性。在我看来,它只是一种引用不同yml文件的方法,而不实际“包含”它们。它似乎没有添加任何其他功能无法完成的功能。我认为sudo_用户是仅在需要执行某些sudo操作时才执行的用户?我想指出,我创建的用户没有sudo权限。“moretasks”中的所有操作都是他们家的本地操作。使用sudo_用户方法是否仍然合适(误导?)?(这种方法确实奏效)你是对的,沙克。从文档中,sudo_user:如果Ansible playbook中未指定sudo user或“sudo_user”,则这是sudo to的默认用户。默认值是最符合逻辑的“root”。请注意,
sudo
和sudo\u user
已被弃用,取而代之的是been
和been\u user
。
ansible-playbook -u ansible -k playbook.yml -l inventory_hostname