If statement 检查是否存在Ansible提示变量

If statement 检查是否存在Ansible提示变量,if-statement,ansible,prompt,exists,If Statement,Ansible,Prompt,Exists,在我的site.yml中,我运行一些常见任务,然后包括3个其他剧本。 这3个剧本分别扮演一个角色。 我这样做是为了运行一个完整的site.yml安装,或者运行一个较小的playbook 我想在site.yml中提示输入用户名和密码,我可以这样做。 然后在其他3个剧本/角色中,我想检查用户名和密码是否已经创建,如果没有,则提示输入 我不想多次提示输入凭据 site.yml --- - hosts: all vars_prompt: - name: "username" - p

在我的site.yml中,我运行一些常见任务,然后包括3个其他剧本。 这3个剧本分别扮演一个角色。 我这样做是为了运行一个完整的site.yml安装,或者运行一个较小的playbook

我想在site.yml中提示输入用户名和密码,我可以这样做。 然后在其他3个剧本/角色中,我想检查用户名和密码是否已经创建,如果没有,则提示输入

我不想多次提示输入凭据

site.yml

---
- hosts: all

  vars_prompt:
    - name: "username"
    - prompt" "enter username"

- include: 1.yml
---
- name: install one
  hosts: all

  # If username has not been defined - This is 
  # where I am confused how to check if it was defined in site.yml
  vars_prompt:
    - name: "userame"
      prompt: "enter username"
  roles:
    - 1role
- name: "username"
- prompt" "enter username"  
  register: username_check
- name: "userame"
  prompt: "enter username"  
  when: username_check is not defined  
1.yml

---
- hosts: all

  vars_prompt:
    - name: "username"
    - prompt" "enter username"

- include: 1.yml
---
- name: install one
  hosts: all

  # If username has not been defined - This is 
  # where I am confused how to check if it was defined in site.yml
  vars_prompt:
    - name: "userame"
      prompt: "enter username"
  roles:
    - 1role
- name: "username"
- prompt" "enter username"  
  register: username_check
- name: "userame"
  prompt: "enter username"  
  when: username_check is not defined  
如果我运行site.yml,它将获得用户名,然后运行1.yml,我不希望它提示输入用户名,因为它是在site.yml中提示输入的

如果我只运行1.yml,我希望它提示输入用户名,因为在本例中我没有运行site.yml


有没有一种方法可以提示从剧本中输入凭据,然后在附带的剧本中检查凭据?

您应该创建一个文件,ansible在主机上写入,然后ansible可以检查这些凭据是否已填写,或者您可以使用register(可能是最佳选项)然后使用when to check(何时检查)(when类似于if语句)

例如:

site.yml

---
- hosts: all

  vars_prompt:
    - name: "username"
    - prompt" "enter username"

- include: 1.yml
---
- name: install one
  hosts: all

  # If username has not been defined - This is 
  # where I am confused how to check if it was defined in site.yml
  vars_prompt:
    - name: "userame"
      prompt: "enter username"
  roles:
    - 1role
- name: "username"
- prompt" "enter username"  
  register: username_check
- name: "userame"
  prompt: "enter username"  
  when: username_check is not defined  
1.yml

---
- hosts: all

  vars_prompt:
    - name: "username"
    - prompt" "enter username"

- include: 1.yml
---
- name: install one
  hosts: all

  # If username has not been defined - This is 
  # where I am confused how to check if it was defined in site.yml
  vars_prompt:
    - name: "userame"
      prompt: "enter username"
  roles:
    - 1role
- name: "username"
- prompt" "enter username"  
  register: username_check
- name: "userame"
  prompt: "enter username"  
  when: username_check is not defined  

我希望这在某些方面有所帮助。我试图发表评论,但它不允许我发表评论。

您应该制作一个文件,ansible在主机上写入,然后ansible可以检查这些凭据是否已填写,或者您可以使用register(可能是最好的选项),然后使用when to check(when类似于if语句)

例如:

site.yml

---
- hosts: all

  vars_prompt:
    - name: "username"
    - prompt" "enter username"

- include: 1.yml
---
- name: install one
  hosts: all

  # If username has not been defined - This is 
  # where I am confused how to check if it was defined in site.yml
  vars_prompt:
    - name: "userame"
      prompt: "enter username"
  roles:
    - 1role
- name: "username"
- prompt" "enter username"  
  register: username_check
- name: "userame"
  prompt: "enter username"  
  when: username_check is not defined  
1.yml

---
- hosts: all

  vars_prompt:
    - name: "username"
    - prompt" "enter username"

- include: 1.yml
---
- name: install one
  hosts: all

  # If username has not been defined - This is 
  # where I am confused how to check if it was defined in site.yml
  vars_prompt:
    - name: "userame"
      prompt: "enter username"
  roles:
    - 1role
- name: "username"
- prompt" "enter username"  
  register: username_check
- name: "userame"
  prompt: "enter username"  
  when: username_check is not defined  

我希望这在某些方面有所帮助。我试图发表评论,但不让我发表评论。

使用注册表不起作用。我在site.yml中得到提示,然后在1.yml中再次得到提示。我将尝试先检查,编写一个文件,然后检查文件。我不喜欢这种方法。我想这是有道理的,注册表不起作用,因为它们是不同的剧本。如果e是将变量转换为true或false的一种更简单的方法(这就是我使用file方法时的想法)。使用注册表不起作用。我在site.yml中得到提示,然后在1.yml中再次得到提示。我将尝试先检查,编写一个文件,然后检查文件。我不喜欢那种方法。我想这是有道理的,注册表不起作用,因为它们是不同的剧本。如果有更简单的方法将变量转换为true或false(这就是我对file方法的想法)。