如何在ansible中使用include_vars

时间:2016-10-01 11:18:17

标签: include ansible ansible-playbook ansible-vault

我创建了自己的自定义库,我将自定义库添加到我的存储库的common文件夹中。我需要动态传递变量。这是一个保密密码,所以我在ansible中使用“vault”。

我的要求是如何在主持人之前include_vars传递tasks\main.yml

例如:mytasks.yml

- include_vars: sample_vault.yml
- include: sample_tasks.yml
- hosts: localhost
  tasks:
    name: "free task"
    command: ls -a

我的目录结构如下:

myfolder
  - common 
      -library   
         -my file.py
      - sample_tasks.yml

  - mytasks
      -mytasks.yml(my main master playbook file)
      -sample_vault.yml  (note:i create this using vault for confidential purpose)
      - roles
        -myrole

在使用ansible执行hosts任务之前,我需要使用sample_vault.yml文件中传递的变量运行sample_tasks文件。如果我使用额外的变量意味着密码可见,所以我不需要。

当我在include_vars文件中使用tasks/main.yml时,会显示以下错误:

  

ERROR! 'include_vars'不是Play

的有效属性

1 个答案:

答案 0 :(得分:20)

您不能以这种方式使用include_vars,它只能在tasks下使用。
如果sample_tasks.yml是任务列表,您也无法在Playbook级别使用它。有关说明,请参阅我的other answer

您可以像这样使用vars_files

- hosts: localhost
  vars_files:
    - sample_vault.yml
  tasks:
    name: "free task"
    command: ls -a

或者将文件作为额外变量传递:

ansible-playbook --ask-vault-pass -e @sample_vault.yml myplaybook.yml