Рейтинг:0

Как настроить выполнение задачи для определенной группы инвентаризации?

флаг uz

Следующая задача:

- название: Скачать Jfrog Artifcats
  ansible.windows.win_shell: |
    $ENV:JFROG_CLI_OFFER_CONFIG="ложь"
    jfrog rt скачать ...
  когда: ???

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

---
все:
  дети:
    корень:
      дети:
        центр:
          дети:
            серверы приложений:
              хосты:
                vm1.домен.com:
            qсерверы:
              хосты:
                vm2.домен.com:
            серверы баз данных:
              хосты:
                vm3.домен.com:
        мобильные фермы:
          хосты:
          дети:
            шлюзы:
              хосты:
        юг:
          дети:
            Бруклин:
              хосты:
                vm4.домен.com:
              дети:
                клиенты:
                  хосты:
                    vm5.домен.com:
                    vm6.домен.com:
        к северу:
          дети:
            Нью-Йорк:
              хосты:
                vm8.домен.com:
              дети:
                клиенты:
                  хосты:
                    vm9.домен.com:

Что я должен ввести в качестве условия под когда чтобы это осуществить? Кроме того, каков принцип этого параметра конфигурации?

Semicolon avatar
флаг jo
когда: inventory_hostname в серверах приложений Не уверен, что вы имеете в виду под "каким принципом за этим стоит"
флаг uz
@ Точка с запятой, я хочу знать, как мне добраться до разыскиваемой группы. Например: «серверы приложений» в разделе «центр», или «шлюзы» в разделе «мобильные фермы», или все машины в разделе «север» и т. д. ...
Рейтинг:2
флаг jo

Чтобы использовать членство в группе в условном выражении для задачи, воспроизведения или блокировки, вы должны использовать формат:

когда: inventory_hostname в группах["<имя группы>"]

Конкретно на ваш первоначальный вопрос:

когда: inventory_hostname в группах["серверы приложений"]

Чтобы добраться до всех машин под к северу, вы просто измените его на: когда: inventory_hostname в группах["север"]

Что касается вашего последующего уточнения (указание группы в определенном «местоположении»), поскольку имена групп должны быть уникальными в ansible, нет необходимости различать который серверы приложений группа, которую вы имеете в виду, как серверы приложений может быть только в одном месте.

Если вы попытаетесь создать два серверы приложений групп, только первая будет фактически проанализирована движком ansible; любая последующая группа с тем же именем будет игнорироваться. Итак, если вы планируете (в будущем) иметь серверы приложений группа под к северу и серверы приложений группа под юг, вы обнаружите, что будут включены только участники из первой группы.

В ansible, как мы этого достигаем (мое предположение о том, что вы май хотите в будущем), доступный способ продолжить — добавить хосты в несколько групп, например так, и соответствующим образом настроить свой лимит или условие:

все:
  дети:
    к северу:
      хосты:
        а.домен.com:
        b.домен.com:
    юг:
      хосты:
        y.domain.com:
        z.домен.com:
    серверы приложений:
      хосты:
        а.домен.com:
        y.domain.com:
    серверы баз данных:
      хосты:
        b.домен.com:
        z.домен.com:

В этом примере, если вы хотите все серверы приложений, вы просто нацеливаетесь серверы приложений. Если бы ты хотел только серверы приложений в к северу региона, то вы бы установили ограничение на игру до север:&серверы приложений, или, альтернативно, используйте условное

когда:
  - inventory_hostname в группах["серверы приложений"]
  - inventory_hostname в группах["север"]

В любом случае, я думаю, вам может понадобиться освежить в памяти структуру инвентаря в ansible, для этого я бы порекомендовал гид пользователя; на различных обучающих сайтах также есть несколько отличных ресурсов, в которых можно найти гораздо более подробные сведения.

Для получения дополнительной информации о более сложном таргетинге с использованием нескольких групп (комбинаций, объединений, исключений и т. д.) я предлагаю вам ознакомиться с этим другим гид пользователя.


Лично я сначала подумал, что настройка утомительна и ограничена, но по мере того, как я лучше знакомился с ее использованием, я на самом деле нахожу ее более динамичной, чем альтернатива.

флаг uz
Благодарить. ```when: "'appservers' in group_names'`` - это единственный формат, с которым мне удается работать.Но по-прежнему не удается сфокусировать условие только на «серверах приложений» внутри основной группы «центр». Мне нужен этот фокус, потому что некоторые лаборатории включают серверы приложений в основную группу мобильных ферм, и эти машины не должны включать артефакт...
Zeitounator avatar
флаг fr
@Hiddai Группа «Sub1», где бы вы ее ни определили, является ** одной ** группой. Если вы дадите несколько определений `Sub1` как дочерних элементов нескольких родительских групп. результатом будет конкатенация всех хостов/дочерних элементов, определенных в любом месте. В результате группа «Sub1» как дочерняя группа «A» будет содержать точно такие же хосты, как если бы она была дочерней группой «B». См. [этот вопрос/ответы] (https://stackoverflow.com/questions/68746910/).
Zeitounator avatar
флаг fr
@Точка с запятой: вы имели в виду `когда: inventory_hostname в группах[]`, что переводится как «когда: inventory_hostname в группах ['серверы приложений']` в случае OP? В любом случае ваше решение не может работать как есть, если пользователь сам не определил переменную `appservers` (иначе вы получите ошибку `appservers` is undefined). ✓
флаг uz
@Semicolon, @Zeitounator - теперь мне это удалось. Внимательно прочитав ответ @Semicolon: «имена групп должны быть уникальными в недоступном». когда я меняю группу ```appservers``` определенного центра на что-то вроде имени ```center_appservers``` - это начинает работать как по волшебству. Благодарю.
Semicolon avatar
флаг jo
@Zeitounator, действительно, ты прав. Я только что закончил писать серию задач по поиску строки в имени хоста и просто продолжал печатать. Я обновил с правильным синтаксисом - используя вашу заметку, но, по сути, просто скопировав с открытого экрана, который у меня был.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.