请教Ansible Elasticsearch插件安装任务中item.url变量的作用及来源
关于Ansible Elasticsearch插件安装任务中{{item.url}}变量的解释
问题描述
有人能帮我解释一下,为什么在Ansible的Elasticsearch插件安装任务中会出现{{item.url}}变量吗?我在Elasticsearch角色中并未找到该变量的声明。
对应的Ansible任务代码:
- name: Install elasticsearch plugins become: yes command: "{{es_home}}/bin/elasticsearch-plugin install {{ item.url | default(item.plugin) }} --batch --silent" register: plugin_installed changed_when: plugin_installed.rc|default(0) == 0 with_items: "{{ es_plugins }}" when: item.plugin in plugins_to_install notify: restart elasticsearch environment: CONF_DIR: "{{ es_conf_dir }}" ES_PATH_CONF: "{{ es_conf_dir }}" ES_INCLUDE: "{{ default_file }}" until: plugin_installed.rc|default(0) == 0 retries: 5 delay: 5
手动安装Elasticsearch插件的两种常用方式:
/bin/elasticsearch-plugin install "name_of_plugin"
或者
/bin/elasticsearch-plugin install "http://repo.xxxx/name_of_plugin.zip"
解释说明
item.url的来源:这个变量并非在Elasticsearch角色中单独声明,它是循环遍历es_plugins列表时的项字段。任务通过with_items: "{{ es_plugins }}"遍历该列表,列表中的每一项都是一个字典,item.url就是取字典里的url键对应的值。- 变量的实际作用:
- 当需要从自定义URL安装插件时(对应手动安装用URL的场景),你可以在
es_plugins的字典项里定义url字段,任务会优先使用这个URL作为安装源; - 如果字典项里没有
url字段,default(item.plugin)过滤器会自动兜底使用item.plugin字段的值,对应手动安装直接用插件名称的场景。
- 当需要从自定义URL安装插件时(对应手动安装用URL的场景),你可以在
es_plugins的典型结构:
这个列表的结构大概如下(你可以在角色的变量文件里找到它,或者在调用角色时传入自定义值):es_plugins: - plugin: "analysis-icu" # 用官方插件名称安装 - plugin: "my-custom-plugin" url: "http://my-repo.com/my-custom-plugin.zip" # 用自定义URL安装第三方插件
内容的提问来源于stack exchange,提问作者Ciocoiu Petrisor
相关产品推荐
相关产品推荐

