Теги, добавленные в проекты и облачные шаблоны, работают как теги ограничений, если они используются для сопоставления тегов возможностей в ресурсах инфраструктуры, профилях и облачных зонах. В случае облачных шаблонов служба vRealize Automation Cloud Assembly использует функцию сопоставления для выделения ресурсов развертываниям.

vRealize Automation Cloud Assembly позволяет использовать теги ограничений двумя основными способами. Во-первых, при настройке проектов и образов. Теги можно использовать в качестве ограничений, чтобы связать ресурсы с проектом или образом. Во-вторых, при работе с облачными шаблонами, где теги, указанные в качестве ограничений, используются для выбора ресурсов для развертываний. Ограничения, применяемые в обоих случаях, объединяются в облачных шаблонах в набор требований к развертыванию, которые определяют ресурсы, доступные в нем.

Использование тегов ограничений в проектах

При настройке ресурсов vRealize Automation Cloud Assembly администраторы облачных систем могут применять теги ограничений для проектов. Это позволяет им внедрять управляющие ограничения непосредственно на уровне проекта. Все ограничения, добавленные на этом уровне, применяются ко всем облачным шаблонам, запрашиваемым в рамках соответствующего проекта.

Если теги в проекте конфликтуют с тегами в облачном шаблоне, теги проекта получают более высокий приоритет, благодаря чему администратор облачных систем может принудительно внедрять управляющие правила. Например, если администраторы облачных систем создают в проекте тег location:london, а разработчик помещает в облачный шаблон тег location:boston, то первый тег получает более высокий приоритет, и развертывание ресурса выполняется в инфраструктуре, содержащей тег location:london.

К проектам можно применить до трех ограничений. Ограничения проекта могут быть жесткими или мягкими. По умолчанию все ограничения являются жесткими. Жесткие ограничения позволяют внедрять строгие ограничения при развертывании. Если одно или несколько жестких ограничений не выполняются, развертывание завершается ошибкой. Мягкие ограничения позволяют зафиксировать предпочтения, которые будут реализованы при наличии такой возможности, но если такой возможности не будет, это не приведет к неудачному завершению развертывания.

Использование тегов ограничений в облачных шаблонах

В облачных шаблонах теги ограничений, соответствующие тегам возможностей, которые были определены администратором облака в ресурсах, облачных зонах и профилях сетей, добавляются к ресурсам в виде кода YAML. Существуют и другие, более сложные варианты внедрения тегов ограничений. Например, можно использовать переменную для заполнения одного или нескольких тегов по запросу. Таким образом можно задать один или несколько тегов при отправке запроса.

В коде YAML облачных шаблонов теги ограничений создаются с помощью метки tag в заголовке ограничения. К тегам ограничений, созданным в облачных шаблонах, добавляются теги ограничений из проектов.

Служба vRealize Automation Cloud Assembly поддерживает простой строковый формат, что позволяет упростить использование ограничений в файлах YAML:

[!]tag_key[:tag_value][:hard|:soft]

По умолчанию в службе vRealize Automation Cloud Assembly создается положительное ограничение с жестким применением. Хотя значение тега не является обязательным, его рекомендуется указывать, как и в других частях приложения.

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

name: "wordPressWithMySql"
components:
  mysql:
    type: "Compute"
    data:
      name: "mysql"
      # ... skipped lines ...
  wordpress:
    type: "Compute"
    data:
      name: "wordpress"
      instanceType: small
      imageType: "ubuntu-server-1604"
      constraints:
        - tag: "!location:eu:hard"
        - tag: "location:us:soft"
        - tag: "!pci"
      # ... skipped lines ...

Дополнительные сведения о работе с облачными шаблонами см. в разделе Часть 3. Проектирование и развертывание примера шаблона vRealize Automation Cloud Assembly.

Использование жестких и мягких ограничений в проектах и облачных шаблонах

Ограничения, используемые в проектах и облачных шаблонах, могут быть жесткими или мягкими. В приведенном выше фрагменте кода можно увидеть примеры как жестких, так и мягких ограничений. По умолчанию все ограничения являются жесткими. Жесткие ограничения позволяют внедрять строгие ограничения при развертывании. Если одно или несколько жестких ограничений не выполняются, развертывание завершается ошибкой. Мягкие ограничения позволяют зафиксировать предпочтения, которые будут реализованы при наличии такой возможности, но, если такой возможности не будет, это не приведет к сбою развертывания.

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

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

Примечание: Флаг failOnConstraintMergeConflict изменяет особенности ограничений в проектах и облачных шаблонах. Если для этого флага задано значение «истина», то при конфликте между ограничениями проекта и ограничениями облачного шаблона произойдет сбой запроса. Если флаг отсутствует или имеет значение «ложь», ограничения проекта получают более высокий приоритет, чем ограничения облачного шаблона.