Dependencies 具有用户定义条件的可分解依赖
我想在playbook依赖项中添加一个角色,但这取决于条件Dependencies 具有用户定义条件的可分解依赖,dependencies,ansible,meta,Dependencies,Ansible,Meta,我想在playbook依赖项中添加一个角色,但这取决于条件 - name: Get all install pyenv versions command: '{{ pyenv_root }}bin/pyenv versions' register: available_versions tags: - get_pyenv_versions environment: PYENV_ROOT: "{{ pyenv_root }}" dependencies:
- name: Get all install pyenv versions
command: '{{ pyenv_root }}bin/pyenv versions'
register: available_versions
tags:
- get_pyenv_versions
environment:
PYENV_ROOT: "{{ pyenv_root }}"
dependencies:
- { role: pyenv, python_versions: ["{{ mypython_version }}"], when: "mypython_version not in available_versions.stdout" }
我想做的是,我想检查所有可用的pyenv
版本,如果mypython\u version
不可用,那么我只想调用pyenv
角色,否则我不想调用它
它给了我语法错误
ERROR! Syntax Error while loading YAML.
The error appears to have been in '/root/ansible_playbooks/roles/mydeployment/meta/main.yaml': line 9, column 1, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
dependencies:
^ here
exception type: <class 'yaml.parser.ParserError'>
exception: while parsing a block collection
in "<unicode string>", line 1, column 1
did not find expected '-' indicator
in "<unicode string>", line 9, column 1
错误!加载YAML时出现语法错误。
错误似乎出现在“/root/ansible_playbooks/roles/mydeployment/meta/main.yaml”中:第9行第1列,但可能是
根据确切的语法问题,在文件中的其他位置。
令人不快的一行似乎是:
依赖项:
^这里
异常类型:
异常:在分析块集合时
在“”中,第1行第1列
未找到预期的“-”指示器
在“”中,第9行第1列
如何定义变量
get_pyenv\u versions
并在我的依赖项中使用作为条件?要正确定义角色中的依赖项,您必须:
在您的角色下定义您的/meta/main.yml依赖项:
dependencies:
- role: pyenv
when: mypython_version not in versions
您必须从您的角色中调用您的角色:
---
- name: Role Dependency
hosts: localhost
gather_facts: False
tasks:
- name: Get all install pyenv versions
command: '{{ pyenv_root }}bin/pyenv versions'
register: available_versions
environment:
PYENV_ROOT: "{{ pyenv_root }}"
roles:
- role: mydeployment
pyenv_version : "{{ mypython_version }}"
versions : "{{ available_versions.stdout }}"
我的沙盒中的另一个示例:
---
- name: Role Dependency
hosts: localhost
gather_facts: False
roles:
- role: role2
role1 : "Heyr"
元:
结果:
PLAY [Role Dependency] *******************************************************************************************************
TASK [role1 : Debug] *********************************************************************************************************
skipping: [localhost]
TASK [role2 : Debug] *********************************************************************************************************
ok: [localhost] => {
"msg": "Hello2"
}
但当变量是好的:
---
- name: Role Dependency
hosts: localhost
gather_facts: False
roles:
- role: role2
role1 : "Heyr"
结果:
TASK [role1 : Debug] *********************************************************************************************************
ok: [localhost] => {
"msg": "Hello1"
}
TASK [role2 : Debug] *********************************************************************************************************
ok: [localhost] => {
"msg": "Hello2"
}
希望它有助于正确定义角色中的依赖关系,您必须:
在您的角色下定义您的/meta/main.yml依赖项:
dependencies:
- role: pyenv
when: mypython_version not in versions
您必须从您的角色中调用您的角色:
---
- name: Role Dependency
hosts: localhost
gather_facts: False
tasks:
- name: Get all install pyenv versions
command: '{{ pyenv_root }}bin/pyenv versions'
register: available_versions
environment:
PYENV_ROOT: "{{ pyenv_root }}"
roles:
- role: mydeployment
pyenv_version : "{{ mypython_version }}"
versions : "{{ available_versions.stdout }}"
我的沙盒中的另一个示例:
---
- name: Role Dependency
hosts: localhost
gather_facts: False
roles:
- role: role2
role1 : "Heyr"
元:
结果:
PLAY [Role Dependency] *******************************************************************************************************
TASK [role1 : Debug] *********************************************************************************************************
skipping: [localhost]
TASK [role2 : Debug] *********************************************************************************************************
ok: [localhost] => {
"msg": "Hello2"
}
但当变量是好的:
---
- name: Role Dependency
hosts: localhost
gather_facts: False
roles:
- role: role2
role1 : "Heyr"
结果:
TASK [role1 : Debug] *********************************************************************************************************
ok: [localhost] => {
"msg": "Hello1"
}
TASK [role2 : Debug] *********************************************************************************************************
ok: [localhost] => {
"msg": "Hello2"
}
希望它有助于不熟悉角色依赖关系,但上面说:角色依赖关系允许您在使用角色时自动引入其他角色。如上所述,角色依赖关系存储在角色目录中包含的meta/main.yml文件中。此文件应包含要在指定角色之前插入的角色和参数的列表,例如下面的示例。
您似乎已在任务之后添加了它。同样,不熟悉该功能,希望它能帮助您了解include_role
module?@ilias sp感谢您的评论,但我们可以在dependencies
中提供条件。我只想知道,如何使用用户定义变量实现这一点。我们可以通过预定义的ansible变量来实现这一点。你能分享一下你在哪里添加每一段代码吗?不能将meta
与vars
混合使用。我猜你在meta/main.yml
下有依赖关系,你是在从剧本中调用你与其他VAR的角色,不是吗?我正在构建我的剧本,现在,我只有上面给出的mydeployment/meta/main.yaml
文件。所有其他角色目前都为空。不熟悉角色依赖关系,但说明:角色依赖关系允许您在使用角色时自动拉入其他角色。如上所述,角色依赖关系存储在角色目录中包含的meta/main.yml文件中。此文件应包含要在指定角色之前插入的角色和参数的列表,例如下面的示例。
您似乎已在任务之后添加了它。同样,不熟悉该功能,希望它能帮助您了解include_role
module?@ilias sp感谢您的评论,但我们可以在dependencies
中提供条件。我只想知道,如何使用用户定义变量实现这一点。我们可以通过预定义的ansible变量来实现这一点。你能分享一下你在哪里添加每一段代码吗?不能将meta
与vars
混合使用。我猜你在meta/main.yml
下有依赖关系,你是在从剧本中调用你与其他VAR的角色,不是吗?我正在构建我的剧本,现在,我只有上面给出的mydeployment/meta/main.yaml
文件。现在所有其他任务都是空的。我必须将任务
和角色
放在我的mydeployment/tasks/main.yaml
中。不,使用主剧本来编排角色。IE:有一个剧本目录和角色目录。从剧本中,你将有任何剧本来完成任何任务。该剧本将调用符合soooo标准的角色,您将能够在您编写的每个剧本中使用这些角色。将角色视为标准行动,您将根据特定原因调用该行动。一个角色只不过是一个在目录中拆分的剧本,有一些更强大的功能(比如依赖项),我有mydeployment.yaml
playbook,它有-hosts:myhosts角色:-common-mydeployment
有没有办法在mydeployment/tasks
中添加这个功能?这样我就只有任务了。不,这就是ansible的工作方式。你必须把剧本称为可接受的标准。如果您想直接进入该角色,您可以选择其他“非标准”解决方案,例如:是的,您有pre和post_任务。抱歉耽搁了。我必须将任务
和角色
放入我的mydeployment/tasks/main.yaml
?不,请使用主剧本来编排角色。IE:有一个剧本目录和角色目录。从剧本中,你将有任何剧本来完成任何任务。该剧本将调用符合soooo标准的角色,您将能够在您编写的每个剧本中使用这些角色。将角色视为标准行动,您将根据特定原因调用该行动。一个角色只不过是一个在目录中拆分的剧本,有一些更强大的功能(比如依赖项),我有mydeployment.yaml
playbook,它有-hosts:myhosts角色:-common-mydeployment
有没有办法在mydeployment/tasks
中添加这个功能?这样我就只有任务了。不,这就是ansible的工作方式。你必须把剧本称为可接受的标准。如果你想直接扮演这个角色,你可以选择其他角色