окружающей среды является: анзибль 1.9.2, CentOS 6,5анзибль - with_dict: словарь - Как использовать переменные, определенные в каждом словаре, который зависит от других
Я создал роль для загрузки JAVA (.tar.gz) артефакта файлы для 3 различных версий JAVA от Artifactory. Я пытаюсь использовать функцию Ansible with_dict (вместо использования with_items).
созданы следующие файлы:
$ роли кота/Java/по умолчанию/main.yml
---
java_versions:
java7_60:
version: 1.7.60
group_path: com/oracle/jdk
classifier: linux-x64
ext: tar.gz
dist_file: "jdk-{{ version }}-{{ classifier }}-{{ ext }}"
# dist_file: "jdk-{{item.value.version }}-{{ item.value.classifier }}-{{ item.value.ext }}"
dist_url: "{{ artifactory_url }}/{{ group_path }}/{{ version }}/{{ dist_file }}"
# dist_url: "{{ artifactory_url }}/{{ item.value.group_path }}/{{ item.value.version }}/{{ dist_file }}"
java7_67:
version: 1.7.67
group_path: com/oracle/jdk
classifier: linux-x64
ext: tar.gz
dist_file: "jdk-{{item.value.version }}-{{ item.value.classifier }}-{{ item.value.ext }}"
dist_url: "{{ artifactory_url }}/{{ item.value.group_path }}/{{ item.value.version }}/{{ dist_file }}"
java8_45:
version: 1.8.45
group_path: com/oracle/jdk
classifier: linux-x64
ext: tar.gz
dist_file: "jdk-{{item.value.version }}-{{ item.value.classifier }}-{{ item.value.ext }}"
dist_url: "{{ artifactory_url }}/{{ item.value.group_path }}/{{ item.value.version }}/{{ dist_file }}"
Как я могу установить или использовать dist_file или dist_url переменные, которые зависят от другие переменные, определенные в том же KEY (скажем, в KEY java7_60)?
Прямо сейчас, когда я пытаюсь либо текущий dist_file или dist_url переменных ИЛИ комментируемых из линий способа установки их (т.е. с использованием item.value.), Это не устанавливающее значения этих 2-х переменными по желанию т.е. в зависимости от других переменных версия, group_path, классификатор, ext и artifactory_url (что определено в файле по умолчанию по умолчанию/main.yml другой общей роли).
Я видел, что для использования with_dict: внутри playbook/task я должен использовать {{item.value. variable_name}} но как я могу определить переменную, которая зависит от других в пределах того же раздела KEY словаря.
Сообщение об ошибке я получаю при использовании выше словаря в следующей задаче является:
$ кошачьих роли/Java/Задачи/main.yml: сообщение
- name: Download Java/JDK Versions
command: wget -q "{{ item.value.dist_url }}"
chdir="{{ common_download_dir }}"
creates="{{ common_download_dir }}/{{ item.value.dist_file }}"
with_dict: "{{ java_versions }}"
become_user: "{{ build_user }}"
Ошибки с использованием dist_file/dist_url (с текущей настройкой ролей/Java/дефолты/main.yml):
TASK: [java | Download Java/JDK Versions] *************************************
failed: [server01.poc.jenkins] => (item={'key': 'java7_60', 'value': {'dist_file': u'jdk-{# version #}-{# classifier #}-{# ext #}', 'ext': 'tar.gz', 'version': '1.7.60', 'dist_url': u'{# artifactory_ur #}/{# group_path #}/{# version #}/{# dist_file #}', 'group_path': 'com/oracle/jdk', 'classifier': 'linux-x64'}}) => {"changed": true, "cmd": ["wget", "-q", "{# artifactory_url #}/{# group_path #}/{# version }/{# dist_file #}"], "delta": "0:00:00.006081", "end": "2015-11-23 12:50:18.383728", "item": {"key": "java7_60", "value": {"classifier": "linux-x64", "dist_file": "jdk-{# version #}-{# classifier #}-{# ext #}, "dist_url": "{# artifactory_url #}/{# group_path #}/{# version #}/{# dist_file #}", "ext": "tar.gz", "group_path": "com/oracle/jdk", "version": "1.7.60"}}, "rc": 4, "start": "2015-11-23 12:50:18.377647", "wrnings": ["Consider using get_url module rather than running wget"]}
Сообщения об ошибке с помощью dist_file/dist_url (с линиями которые в настоящее время закомментированные в ролях/Java/дефолты/main.yml):
TASK: [java | Download Java/JDK Versions] *************************************
failed: [server01.poc.jenkins] => (item={'key': 'java7_60', 'value': {'dist_file': u'jdk-{#item.value.version #}-{# item.value.classifier #}-{# item.value.ext #}', 'ext': 'tar.gz', 'version': '1.7.60' , 'dist_url': u'{# artifactory_url #}/{# item.value.group_path #}/{# item.value.version #}/{# dist_file #}', 'group_path': 'com/oracle/jdk', 'classifier': 'linux-x64'}}) => {"changed": true, "cmd": ["wget", "-q", "{# artifactory_url #}/{# item.value.group_path #}/{# item.value.version #}/{# dist_file #}"], "delta": "0:00:00.005900", "end": "2015-11-23 12:36:24.131327", "item": {"key": "java7_60", "value": {"cla ssifier": "linux-x64", "dist_file": "jdk-{#item.value.version #}-{# item.value.classifier #}-{# item.value.ext #}", "dist_url": "{# artifactory_url #}/{# item.value.group_path #}/{# item.value.version #}/{# dist_file #}", "ext": "tar.gz", "group_path": "com/oracle/jdk", "version": "1.7.60"}}, "rc": 4, "start": "2015-11-23 12:36:24.125427", "warnings": ["Consider using get_url module rather than running wget"]}
Вместо того, чтобы объединить все ваши переменные вместе в переменной 'dict_url' и ссылаться на нее в вашей задаче, было бы проще просто выполнить задачу« wget -q »{{artifactory_url}}/{{item. value.group_path}}/{{item.value.version}}/{{dist_file}} "' сам? –
Спасибо за комментарий. Я пробовал это, но это заставляет задачу выглядеть немного уродливо. Даже если я это сделаю, я думаю, что проблема заключается в том, можно ли задать переменную словаря, используя другую переменную словаря в одном и том же ключе. В любом случае, похоже, проблема заключается в том, что переменные в словарной переменной не заменяются. Я пытаюсь, что ты сказал, и посмотри, работает ли это! Удивление - это способ объединить/повторно использовать переменные в разделе KEY словаря. –
Я считаю, что самым простым (и, возможно, лучшим) способом было бы создание строк dist_file и dist_url в роли, а не определение его в словаре. –