如何覆盖Ansible playbook中的某些特定变量值

如何覆盖Ansible playbook中的某些特定变量值,ansible,ansible-inventory,Ansible,Ansible Inventory,我有一些多个war文件,我正在从nexus下载这些文件,并在远程主机上创建相应的应用程序文件夹并复制这些文件。 现在有两个文件的名称与war文件不同,但需要创建具有不同名称的目录。我现在正在做的是- - name: Ensuring the web deployment folder is created on tomcat nodes for each web application file: path: "{{tomcat_server_release_location}}

我有一些多个war文件,我正在从nexus下载这些文件,并在远程主机上创建相应的应用程序文件夹并复制这些文件。 现在有两个文件的名称与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在nexus上有了一个不同的名称,它是test2-web.war,但在远程节点上,我必须创建一个名为test2的文件夹,并将war文件复制到其中


如果您想在运行时使用额外的变量进行重写,是否有一种方法可以在playbook的运行时通过使用某些条件或任何内容来重写某些变量。 来自文档--extra vars“version=1.23.45”

如果知道某个特定主机应始终被覆盖,请不要使用条件。我认为将其作为主机变量是最好的

主持人: 我的主人: 应用程序: -测试1 -trst2


有关可以放置变量的所有不同位置以及如何确定将使用哪个位置的信息,请参见。通过执行以下操作可以覆盖变量:

- name: copy war
  copy:
    src: "{{ src_war | default('/path/to/my/war') }}"
    dest: "{{ dest_war | default(src_war) }}"
然后在运行时,您可以使用额外的变量、主机/组变量或此处记录的任何其他方式设置变量src_war和dest_war:

在您的情况下,我认为设置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 }}"