Измените строку и добавьте при необходимости - PullRequest
0 голосов
/ 19 июня 2019

Используя Ansible, я хочу изменить существующий файл конфигурации и изменить конкретную настройку (переменную) в зависимости от одного или нескольких переменных, которые я указываю в специфической для пользователя пьесе.

Файл конфигурации содержит:

JVM_SUPPORT_RECOMMENDED_ARGS=""

Всегда следует добавлять следующую опцию:

-Datlassian.plugins.enable.wait=300

Таким образом, в результате:

JVM_SUPPORT_RECOMMENDED_ARGS="-Datlassian.plugins.enable.wait=300"

Тем не менее, я также могу установить некоторые дополнительные опции, например, когда прокситребуются настройки;

-Datlassian.plugins.enable.wait=300 -Dhttp.proxyHost=proxy.xxx.com -Dhttp.proxyPort=3128 -Dhttps.proxyHost=proxy.xxx.com -Dhttps.proxyPort=3128 -Dhttp.nonProxyHosts='localhost'"

Или когда нам нужно отключить какую-либо идентификацию конечной точки SSL:

JVM_SUPPORT_RECOMMENDED_ARGS="-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true"

Некоторые клиенты не требуют настройки прокси-сервера или конечной точки, некоторые требуют какнекоторые только один из них.

Я попытался предоставить строки «как есть», чтобы они просто заменили все, но это не аккуратно и нежелательно, так как может быть несколько комбинаций, и я нене хочу программировать их все заранее.Я предпочитаю переменную сборку, добавляя нужные опции.

  lineinfile:
    name: "{{ file.stat.path }}"
    regexp: '^JVM_SUPPORT_RECOMMENDED_ARGS="'
    line: "JVM_SUPPORT_RECOMMENDED_ARGS=\"-Datlassian.plugins.enable.wait=300\""
  when: file.stat.exists

- name: Ensure JVM_SUPPORT_RECOMMENDED_ARGS proxy settings are present
  lineinfile:
    name: "{{ file.stat.path }}"
    regexp: '^JVM_SUPPORT_RECOMMENDED_ARGS="'
    line: "JVM_SUPPORT_RECOMMENDED_ARGS=\"-Datlassian.plugins.enable.wait=300
           -Dhttp.proxyHost={{ jira_http_proxy }} -Dhttp.proxyPort={{ jira_http_proxyport }} -Dhttps.proxyHost={{ jira_https_proxy }}
           -Dhttps.proxyPort={{ jira_https_proxyport }} -Dhttp.nonProxyHosts='{{ jira_non_proxy_hosts|default([])|join('|') }}'\""
  when: file.stat.exists and (jira_http_proxy|default(false) or jira_https_proxy|default(false))

edit

Я могу сделать это так;

jira_base_args: "-Datlassian.plugins.enable.wait=300"
jira_proxy_args: "-Dhttp.proxyHost={{ jira_http_proxy }} -Dhttp.proxyPort={{ jira_http_proxyport }}
                  -Dhttps.proxyHost={{ jira_https_proxy }} -Dhttps.proxyPort={{ jira_https_proxyport }}
                  -Dhttp.nonProxyHosts='{{ jira_non_proxy_hosts|default([])|join('|') }}'"
jira_ldap_args: "-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true"

И в роли Playbook;

  replace:
    name: "{{ file.stat.path }}"
    regexp: '^JVM_SUPPORT_RECOMMENDED_ARGS=(.*)'
    replace: "JVM_SUPPORT_RECOMMENDED_ARGS=\"{{ jira_base_args }}\""
  when: file.stat.exists

- name: Ensure JVM_SUPPORT_RECOMMENDED_ARGS proxy settings are present
  replace:
    name: "{{ file.stat.path }}"
    regexp: '^JVM_SUPPORT_RECOMMENDED_ARGS=(.*)'
    replace: "JVM_SUPPORT_RECOMMENDED_ARGS=\"{{ jira_base_args }} {{ jira_proxy_args }}\""
  when: file.stat.exists and (jira_http_proxy|default(false) or jira_https_proxy|default(false))

- name: Ensure JVM_SUPPORT_RECOMMENDED_ARGS ldap settings are present
  replace:
    name: "{{ file.stat.path }}"
    regexp: '^JVM_SUPPORT_RECOMMENDED_ARGS=(.*)'
    replace: "JVM_SUPPORT_RECOMMENDED_ARGS=\"{{ jira_base_args }} {{ jira_ldap_args }}\""
  when: file.stat.exists and (jira_disable_endpoint_ident|default(false))

Но как справиться с ситуациями, когда необходимы настройки как прокси, так и ldap?Потому что последний теперь перезаписывает прокси.

edit

Исправлено так, не очень приятно, но у кого что-то лучше?

# We know that the default plugin timeout for JIRA is too low in most cases.
- name: Set plugin timeout to 300s
  replace:
    name: "{{ file.stat.path }}"
    regexp: '^JVM_SUPPORT_RECOMMENDED_ARGS=(.*)'
    replace: "JVM_SUPPORT_RECOMMENDED_ARGS=\"{{ jira_base_args }}\""
  when:
    - file.stat.exists
    - not jira_http_proxy|default(false)
    - not jira_https_proxy|default(false)
    - not jira_disable_endpoint_ident|default(false)

- name: Ensure JVM_SUPPORT_RECOMMENDED_ARGS proxy settings are present
  replace:
    name: "{{ file.stat.path }}"
    regexp: '^JVM_SUPPORT_RECOMMENDED_ARGS=(.*)'
    replace: "JVM_SUPPORT_RECOMMENDED_ARGS=\"{{ jira_base_args }} {{ jira_proxy_args }}\""
  when:
    - file.stat.exists
    - jira_http_proxy|default(false)
    - jira_https_proxy|default(false)
    - not jira_disable_endpoint_ident|default(false)

- name: Ensure JVM_SUPPORT_RECOMMENDED_ARGS ldap settings are present
  replace:
    name: "{{ file.stat.path }}"
    regexp: '^JVM_SUPPORT_RECOMMENDED_ARGS=(.*)'
    replace: "JVM_SUPPORT_RECOMMENDED_ARGS=\"{{ jira_base_args }} {{ jira_ldap_args }}\""
  when:
    - file.stat.exists
    - not jira_http_proxy|default(false)
    - not jira_https_proxy|default(false)
    - jira_disable_endpoint_ident|default(false)

- name: Ensure JVM_SUPPORT_RECOMMENDED_ARGS proxy + ldap settings are present
  replace:
    name: "{{ file.stat.path }}"
    regexp: '^JVM_SUPPORT_RECOMMENDED_ARGS=(.*)'
    replace: "JVM_SUPPORT_RECOMMENDED_ARGS=\"{{ jira_base_args }} {{ jira_proxy_args }} {{ jira_ldap_args }}\""
  when:
    - file.stat.exists
    - jira_http_proxy|default(false)
    - jira_https_proxy|default(false)
    - jira_disable_endpoint_ident|default(false)

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете использовать insertbefore и backrefs:yes в lineinfile модуле.

Пример:

    - name: Set Atlassian enable.wait to 300s
      lineinfile:
        path: file.txt
        regexp: '^(JVM_SUPPORT_RECOMMENDED_ARGS=".*)"$'
        insertbefore: '"$'
        line: '\1 -Datlassian.plugins.enable.wait=300"'
        state: present
        backrefs: yes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...