удалить 1 строку перед X до Y с помощью регулярного выражения

Проблема, с которой вы сталкиваетесь, заключается в том, что вы пытаетесь ссылаться на факты / переменные одного хоста на другие хосты. Вы должны иметь в виду, что в Ansible переменная app_git_sha1, назначенная хосту localhost, отличается от переменной app_git_sha1, назначенной хосту main или любому другому хосту. Если вы хотите получить доступ к фактам / переменным хостов с другого хоста, вам необходимо явно ссылаться на него с помощью переменной hostvars. .

Предположим, что у вас есть подобная пьеса:

- hosts: localhost
  tasks:   
    - command: /bin/echo "this is a test"
      register: foo


- hosts: localhost
  tasks:
    - debug: var=foo

Это будет работать, потому что вы 'ссылается на экземпляр хоста localhost и localhosts переменной foo в обеих играх. Вывод этой пьесы выглядит примерно так:

PLAY [localhost] **************************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [command /bin/echo "this is a test"] ************************************
changed: [localhost]

PLAY [localhost] **************************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [debug var=foo] *********************************************************
ok: [localhost] => {
    "var": {
        "foo": {
            "changed": true,
            "cmd": [
                "/bin/echo",
                "this is a test"
            ],
            "delta": "0:00:00.004585",
            "end": "2015-11-24 20:49:27.462609",
            "invocation": {
                "module_args": "/bin/echo \"this is a test\"",
                "module_complex_args": {},
                "module_name": "command"
            },
            "rc": 0,
            "start": "2015-11-24 20:49:27.458024",
            "stderr": "",
            "stdout": "this is a test",
            "stdout_lines": [
                "this is a test"
            ],
            "warnings": []
        }
    }
}

Если вы немного измените эту игру, чтобы запустить первое воспроизведение на одном хосте, а второе воспроизведение на другом хосте, вы получите сообщение об ошибке вы столкнулись. Решение состоит в том, чтобы использовать встроенную переменную hostvars Ansible, чтобы второй узел явно ссылался на первую переменную хоста. Поэтому измените первый пример следующим образом:

- hosts: localhost
  tasks:

    - command: /bin/echo "this is a test"
      register: foo


- hosts: anotherhost
  tasks:
    - debug: var=foo
      when: foo is defined

    - debug: var=hostvars['localhost']['foo']
      when: hostvars['localhost']['foo'] is defined

. Вывод этой пьесы показывает, что первая задача пропущена, потому что foo не определяется хостом anotherhost. Но вторая задача выполняется успешно, потому что она явно ссылается на экземпляр localhosts переменной foo:

TASK: [debug var=foo] *********************************************************
skipping: [anotherhost]

TASK: [debug var=hostvars['localhost']['foo']] **************************
ok: ['anotherhost'] => {
    "var": {
        "hostvars['localhost']['foo']": {
            "changed": true,
            "cmd": [
                "/bin/echo",
                "this is a test"
            ],
            "delta": "0:00:00.005950",
            "end": "2015-11-24 20:54:04.319147",
            "invocation": {
                "module_args": "/bin/echo \"this is a test\"",
                "module_complex_args": {},
                "module_name": "command"
            },
            "rc": 0,
            "start": "2015-11-24 20:54:04.313197",
            "stderr": "",
            "stdout": "this is a test",
            "stdout_lines": [
                "this is a test"
            ],
            "warnings": []
        }
    }
}

Итак, в двух словах вы хотите изменить ссылки на переменные в main playbook для ссылки на переменные localhost следующим образом:

{{ hostvars['localhost']['app_git_sha1'] }}

0
задан Jerad Berry 15 January 2019 в 21:03
поделиться

1 ответ

Я сделал это с помощью этого регулярного выражения:

<imgdir.*\s+<string name="type" value="n"\/>\s+(.+\s+)+?<\/imgdir>

Вы можете просто заменить эту находку пустой строкой.

Попробуйте regex101

0
ответ дан Addison 15 January 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: