如何在Ansible中在运行时设置变量?

如何在Ansible中在运行时设置变量?,ansible,Ansible,我尝试做的全部目标是成为root用户并运行一个进程。然而,我创建了一个进程,我调用一个辅助主机并运行一个脚本,该脚本获取我想要的任何Linux主机的根密码。之后,我将密码传递回varansible\u been\u密码:。虽然每次我传递它时,它都会抛出错误“密码未定义” 我查找了变量优先级,但当我尝试另一种方法时,收到了相同的错误 代码: # Root - name: Run as root user. privileged escalation using su hosts: 10.x.x

我尝试做的全部目标是成为root用户并运行一个进程。然而,我创建了一个进程,我调用一个辅助主机并运行一个脚本,该脚本获取我想要的任何Linux主机的根密码。之后,我将密码传递回var
ansible\u been\u密码:
。虽然每次我传递它时,它都会抛出错误“
密码未定义”

我查找了变量优先级,但当我尝试另一种方法时,收到了相同的错误

代码:

# Root
- name: Run as root user. privileged escalation using su
  hosts: 10.x.x.1
  gather_facts: false
  vars:
    root_user: root
    ansible_become_password: "{{ password.stdout }} "

  tasks:   
    - name: Get root password
      shell: /tmp/rootAccess.sh hostname
      register: password

    - debug:
        msg: "{{ password.stdout }}"
        delegate_to: 10.x.x.2


    - name: whoami as root (su)
      command: whoami
      register: output_root_su
      become_user: "{{ root_user }}"
      become_method: su
      become: yes

    - name: output of 'whoami' (su)
      debug:
        msg: "user: {{ output_root_su.stdout }} "
错误:

fatal: [10.x.x.1]: FAILED! => {"msg": "The field 'become_pass' has an invalid value, which includes an undefined variable. The error was: 'password' is undefined"}
输入密码后,可以使用模块set_事实声明ansible_变为_密码

下面的剧本

- hosts: test_01
  gather_facts: no
  become: no
  remote_user: admin
  vars:
    root_user: root
    # ansible_become_password: "{{ password.user_input }}"
  tasks:
    - command: whoami
      register: result
    - debug:
        var: result.stdout
    - pause:
        prompt: "Enter password"
      register: password
    - set_fact:
        ansible_become_password: "{{ password.user_input }}"
    - debug:
        var: ansible_become_password
    - command: whoami
      register: result
      become: yes
      become_method: su
      become_user: "{{ root_user }}"
    - debug:
        var: result.stdout
给予

注释

  • 显然,使用ansible_Been_密码无法正常工作

  • 模块提供了在运行时输入变量的方便方法

  • 在结束引号之前有一个额外的空格。这将导致密码错误

    ansible_become_password: "{{ password.stdout }} "
    
输入密码后,可以使用模块设置事实声明ansible\u变成\u密码

下面的剧本

- hosts: test_01
  gather_facts: no
  become: no
  remote_user: admin
  vars:
    root_user: root
    # ansible_become_password: "{{ password.user_input }}"
  tasks:
    - command: whoami
      register: result
    - debug:
        var: result.stdout
    - pause:
        prompt: "Enter password"
      register: password
    - set_fact:
        ansible_become_password: "{{ password.user_input }}"
    - debug:
        var: ansible_become_password
    - command: whoami
      register: result
      become: yes
      become_method: su
      become_user: "{{ root_user }}"
    - debug:
        var: result.stdout
给予

注释

  • 显然,使用ansible_Been_密码无法正常工作

  • 模块提供了在运行时输入变量的方便方法

  • 在结束引号之前有一个额外的空格。这将导致密码错误

    ansible_become_password: "{{ password.stdout }} "