ansible - 如何覆盖 Ansible playbook 中的某些特定变量值
问题描述
我有一些从 nexus 下载的多个战争文件,并在我的远程主机上创建相应的应用程序文件夹并复制文件。现在有 2 个文件的名称与 war 文件不同,但需要创建一个不同名称的目录。我现在正在做的是这个——
- name: Ensuring the web deployment folder is created on tomcat nodes for each web application
file:
path: "{{tomcat_server_release_location}}/Release{{my_release_version}}/{{item}}"
state: directory
mode: 0777
with_items:
- "{{ apps }}"
- name: Copying the release from Admin server to tomcat nodes
copy: src={{admin_server_release_location}}/{{my_release_version}}/{{item}}-{{my_release_version}}.war dest={{tomcat_server_release_location}}/Release{{my_release_version}}/{{item}}
with_items:
- "{{ apps }}"
apps 变量是这样定义的 -
webapps: ['test1','test2','test3','test4']
。现在 test2 在它说 test2-web.war 的关系上有一个不同的名称,但在远程节点上,我必须创建一个名为 test2 的文件夹并将war文件复制到那里。
有没有办法通过使用某些条件或任何东西在剧本的运行时覆盖一些变量
解决方案
可以通过执行以下操作来覆盖变量:
- name: copy war
copy:
src: "{{ src_war | default('/path/to/my/war') }}"
dest: "{{ dest_war | default(src_war) }}"
然后在运行时,您可以使用额外的变量、host/group_vars 或此处记录的任何其他方式设置变量 src_war 和 dest_war:https ://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html
在您的情况下,我认为设置 src & dest 映射会有所帮助:
- set_fact:
apps:
- {src: "test1"}
- {src: "test2", dest: "test2-web"}
- {src: "test3"}
- {src: "test4"}
然后您可以使用此映射来实现您的目标:
- name: Ensuring the web deployment...
file:
path: {{ tomcat_server_release_location }}/Release{{ my_release_version }}/{{ item.src }}
state: directory
mode: 0777
with_items: "{{ apps }}"
- name: Copying the release...
copy:
src: "{{ admin_server_release_location }}/{{ my_release_version }}/{{ item.src }}-{{ my_release_version }}.war"
dest: "{{ tomcat_server_release_location }}/Release{{ my_release_version }}/{{ item.dest | default(item.src) }}"
with_items: "{{ apps }}"
推荐阅读
- sql - 添加除一列外具有相同值的新行
- javascript - 基本 JS 文件加载但不渲染或执行 Laravel 8 Bootstrap 5
- react-native - 如何从选项卡导航器打开抽屉导航器
- javascript - 通过 DOM 操作更改 SVG 笔触颜色
- python - 单击单选按钮 Selenium/Python
- java - Java 8+ 流、泛型和 lambda 表达式
- android - 改造:如何从 okhttp 拦截器再次重试请求?
- java - 如何编写反转二维数组的方法
- javascript - 有人可以帮我解决这个 React 教程语法错误吗?
- sql - SQL INSERT 查询无法执行