Как переопределить некоторые указанные c значения переменных в Ansible playbook - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть несколько файлов war, которые я загружаю из 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.

Есть ли способ переопределить некоторые переменные во время выполнения playbook, используя какое-либо условие или что-то еще

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Можно переопределить переменные, выполнив что-то вроде этого:

- name: copy war
  copy:
    src: "{{ src_war | default('/path/to/my/war') }}"
    dest: "{{ dest_war | default(src_war) }}"

Затем во время выполнения вы можете установить переменные src_war и dest_war либо с дополнительными переменными, host / group_vars, либо любым другим способом, описанным здесь: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html

В вашем случае было бы полезно установить sr c & dest mapping:

- 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 }}"
0 голосов
/ 15 апреля 2020

Если вы хотите переопределить во время выполнения, используйте дополнительные переменные. Из документов --extra-vars "version = 1.23.45"

Не используйте условия, если вы знаете, что указанный c хост всегда должен быть перезаписан. Я думаю, что лучше разместить его в качестве хоста var.

hosts: myhost: apps: - test1 - trst2

См. https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable -precedence-where-следует-i-put -a-переменная для всех различных мест вы можете поместить переменные и как определить, какие будут использоваться

...