- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
环境为:Ansible 1.9.2、CentOS 6.5
我创建了一个角色来从 Artifactory 下载 3 个不同 JAVA 版本的 JAVA (.tar.gz) 工件文件。我正在尝试使用 Ansible 的 with_dict 功能(而不是使用 with_items)。
创建了以下文件:
$ cat 角色/java/defaults/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 }}"
- 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 }}"
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"]}
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"]}
最佳答案
我对这个很好奇所以我做了一些挖掘,在这样做的过程中我遇到了 this similar answer .不过,这只是您的解决方案的一部分。
Ansible 似乎不允许你从它自己的定义中引用一个变量,我想这是有道理的,因为它没有完全定义。所以这样的事情是行不通的,实际上在引用变量时会抛出一个有点令人困惑的错误:
---
myvar:
param1: foo
param2: "{{ myvar['foo'] }} bar"
item
在变量中构造以引用其他复杂变量。这种对我来说很有意义,因为 Ansible 似乎在定义变量时解析变量中的 jinja2 构造,而不是在引用变量时在运行时解析。
---
artifactory_url: "http://path.to.jarfile"
java_versions:
java7_60:
version: 1.7.60
group_path: com/oracle/jdk
classifier: linux-x64
ext: tar.gz
java_downloads:
java7_60:
dist_url: "{{ artifactory_url }}/{{ java_versions['java7_60']['group_path'] }}/{{ java_versions['java7_60']['version'] }}/jdk-{{ java_versions['java7_60']['version'] }}-{{ java_versions['java7_60']['classifier'] }}.{{ java_versions['java7_60']['ext'] }}"
java_downloads
这样你就可以得到你正在寻找的完整 URL:
TASK: [debug var=item] ********************************************************
ok: [localhost] => (item={'key': 'java7_60', 'value': {'dist_url': u'http://path.to.jarfile/com/oracle/jdk/1.7.60/jdk-1.7.60-linux-x64.tar.gz'}}) => {
"item": {
"key": "java7_60",
"value": {
"dist_url": "http://path.to.jarfile/com/oracle/jdk/1.7.60/jdk-1.7.60-linux-x64.tar.gz"
}
},
"var": {
"item": {
"key": "java7_60",
"value": {
"dist_url": "http://path.to.jarfile/com/oracle/jdk/1.7.60/jdk-1.7.60-linux-x64.tar.gz"
}
}
}
}
关于Ansible - with_dict : dictionary - How to use variables defined in each dictionary which depends upon others,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33877730/
我有以下任务: - name: copy server.xml template: src=server.xml dest=/var/containers/{{ item.key }}/conf
我知道这个问题之前已经被问过很多次了,但我一定在这里遗漏了一些东西! 这是重现问题的最小剧本。 这是剧本: --- - hosts: - localhost gather_facts: f
我正在尝试为接口(interface)变量动态提供字典名称。 我的 ansible 任务看起来像这样。 - name: Setting interface list set_fact: o
我有我想要迭代的字典类型的数据,保持顺序很重要: with_dict_test: one: 1 two: 2 three: 3 four: 4 five: 5 si
如何引用一个注册值的字典元素。 我的 Ansible 剧本如下所示: - command: echo {{ item }} with_dict: - foo - bar -
我正在尝试在任务循环中将多个词典输入 with_dict。 vars/users.yml 文件 --- server_admins: admin1: comment="Dark Helmet" u
我想更新 INI 配置文件。 今天,我以这种方式将我的信息存储在一个 var 文件中(在 group_vars 中): # Identity configuration information ide
我正在尝试像这样循环哈希和与其关联的数组: 变量: dictionary: aword: [ ant, den ] bword: [ fat, slim ] 任务: name: C
环境为:Ansible 1.9.2、CentOS 6.5 我创建了一个角色来从 Artifactory 下载 3 个不同 JAVA 版本的 JAVA (.tar.gz) 工件文件。我正在尝试使用 An
我是一名优秀的程序员,十分优秀!