首页 > 解决方案 > 如何更轻松地将所有任务委派到 Ansible 中的某个角色中?

问题描述

我对 Ansible 还有些陌生,所以我确信这不是正确的做法,但考虑到我的要求,这是我想出的。

我必须在服务器上执行任务,我没有凭据可以访问,因为它们被锁定在保险库中。我解决此问题的方法是从保管库获取凭据,然后将任务委派给该服务器。我已经完成了这一点,但我想知道是否有更清洁或更充分的方式来做到这一点。所以,这是我的设置:

我有一本剧本,里面只有:

---
- hosts: localhost

  roles:
    - role: get_credentials         <-- Not the real role names
    - role: use_credentials

基本上,get_credentials 从保管库中获取一些凭据,然后 use_credentials 执行任务,但每个任务都有

delegate_to: protected_server
  vars:
    ansible_ssh_user: "{{ user }}"
    ansible_ssh_pass: "{{ password }}"

最后

有没有办法可以委派 use_credentials 中的所有任务,而不必单独委派每个任务?

标签: ansible

解决方案


roles:tasks:使用include_role. 像这样的东西:

tasks:
  - name: Get credentials
    include_role:
      name: get_credentials        # I expect this one to set_fact user_from_get_credential and password_from_get_credential
    delegate_to: protected_server

  - name: Use credentials
    include_role:
      name: use_credentials
    vars:
      ansible_ssh_user: "{{ user_from_get_credential }}"
      ansible_ssh_pass: "{{ password_from_get_credential }}"

推荐阅读