Разработчики облачных шаблонов с доступом к настроенной интеграции SaltStack Config в vRealize Automation могут устанавливать и развертывать служебные серверы Salt на целевом главном сервере Salt из облачного шаблона.

Служебные серверы — это узлы, на которых выполняется служба salt-minion. Данная служба прослушивает команды с главного сервера Salt и выполняет запрашиваемые задачи. Служебные серверы можно добавлять в облачные шаблоны vRealize Automation.

Необходимые условия

  • Установите и настройте службу SaltStack Config с помощью vRealize Suite Lifecycle Manager.

    См. сведения в Настройка интеграции SaltStack Config в службе vRealize Automation.

  • Создайте интеграцию SaltStack Config в vRealize Automation.

    См. сведения в Настройка интеграции SaltStack Config в службе vRealize Automation.

  • Установите службу Salt Minion.

    Процесс установки службы Salt Minion является достаточно сложным. Сведения об установке службы Salt Minion в среде RedHat Linux и CentOS см. в разделе Установка или обновление Salt в руководстве по установке SaltStack Config в документации по продукту SaltStack Config. Сведения для других операционных систем см. на сайте http://repo.saltstack.com/.

  • Необходимо иметь доступ к cloud-init (Linux) или Cloudbase-init (Windows), а также хорошо знать их особенности. Для добавления служебных серверов Salt к главному серверу Salt, настроенному для интеграции SaltStack Config в vRealize Automation, виртуальная машина в облачном шаблоне должна поддерживать cloud-init (Linux) или Cloudbase-init (Windows).

Группа свойств SaltStackConfiguration

Процесс установки и настройки службы SaltStack Config в vRealize Suite Lifecycle Manager создает группу свойств vRealize Automation с именем SaltStackConfiguration. Значения группы свойств SaltStackConfiguration используются при настройке интеграции SaltStack Config в облачном шаблоне или развертывании vRealize Automation. Их также можно использовать в конфигурации на основе cloud-init или Cloudbase-init в шаблоне vRealize Automation (предыдущее имя — схемы элементов) для установки служебных серверов. В SaltStackConfiguration используются два свойства: masterAddress (совпадает с параметром hostname в точке интеграции SaltStack Config) и masterFingerprint. Ниже приведен пример группы свойств SaltStackConfiguration.

На экране отображаются страница «Группы свойств vRealize Automation» и группа свойств «SaltStackConfiguration», созданная при установке SaltStack Config

Добавление служебных серверов к главному серверу Salt, настроенному для vRealize Automation

При установке службы SaltStack Config задается IP-адрес главного сервера Salt. Этот IP-адрес используется в качестве свойства masterAddress при развертывании служебных серверов из облачного шаблона vRealize Automation.

Установка и развертывание служебных серверов выполняются с помощью сценариев cloud-init или Cloudbase-init в облачном шаблоне или развертывании vRealize Automation. Чтобы было можно добавлять служебные серверы Salt для главного сервера Salt,связанного с интеграцией SaltStack Config в vRealize Automation, целевой компьютер должен поддерживать cloud-init (Linux) или Cloudbase-init (Windows). Сценарий настройки облачной среды vRealize Automation поддерживает оба формата.

Настройка ресурса компьютера выполняется в облачном шаблоне со значениями minionId и cloudConfig. Затем работа продолжается с группой свойств SaltStackConfiguration. Группа свойств SaltStackConfiguration создается во время установки и настройки службы SaltStack Config в vRealize Suite Lifecycle Manager. Она содержит свойства masterAddress и masterFingerprint.

Значение minionId должно совпадать со значением, указанным для параметра /salt/minion_id компьютера в разделе cloudConfig кода облачного шаблона.

Ниже приведены примеры кода облачного шаблона vRealize Automation для ОС Windows и Linux. Следует отметить, что для создания сценария настройки облачной среды можно использовать один из следующих методов.
  • Образ vRealize Automation, вызываемый из кода облачного шаблона
  • Сценарий настройки облачной среды, вызываемый из кода облачного шаблона
  • Содержимое сценария настройки облачной среды, которое добавляется непосредственно в код облачного шаблона
Ниже приведен пример конфигурации облачного шаблона для развертывания служебных серверов для компьютера под управлением Linux, который поддерживает cloud-init.
inputs: {}
resources:
  LinuxVM-Minion:
    type: Cloud.vSphere.Machine
    properties:
      name: salt-minion-vra
      cpuCount: 1
      totalMemoryMB: 2048
      imageRef: 'https://build-artifactory.eng.vmware.com/symphony-infra-local/ubuntu/releases/xenial/release-20190605/ubuntu-16.04-server-cloudimg-amd64.ova'
      minionId: '${resource.LinuxVM-Minion.resourceName}'
      cloudConfig: |
        #cloud-config
        runcmd:
          - sudo echo '${resource.LinuxVM-Minion.resourceName}' > /etc/salt/minion_id
        salt_minion:
          pkg_name: 'salt-minion'
          service_name: 'salt-minion'
          config_dir: '/etc/salt'
          conf:
            master: ${propgroup.SaltStackConfiguration.masterAddress}
            master_finger: ${propgroup.SaltStackConfiguration.masterFingerPrint}
      remoteAccess:
        authentication: publicPrivateKey
        sshKey: ssh-rsa your-public-key
      networks:
        - network: '${resource.vSphere_Network.id}'
  vSphere_Network:
    type: Cloud.Network
    properties:
      networkType: existing
Ниже приведен пример конфигурации облачного шаблона для развертывания служебных серверов для компьютера под управлением Windows, который поддерживает Cloudbase-init.
formatVersion: 1
inputs: {}
resources:
  WindowsVM-Minion:
    type: Cloud.vSphere.Machine
    properties:
      image: win2016
      flavor: medium
      customizationSpec: Windows
      minionId: '${resource.WindowsVM-Minion.resourceName}'
      networks:
        - network: '${resource.wpnet.id}'
          name: '${wpnet.name}'
          assignPublicIpAddress: true
      cloudConfig: |
        #ps1_sysnative
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -OutFile C:\Salt-Minion-3002.2-Py3-AMD64-Setup.exe -Uri https://repo.saltstack.com/windows/Salt-Minion-3002.2-Py3-AMD64-Setup.exe
        Start-Process -Wait -FilePath "C:\Salt-Minion-3002.2-Py3-AMD64-Setup.exe" -ArgumentList "/S" -PassThru
        ((Get-Content -path C:\salt\conf\minion -Raw) -replace "#master: salt", "master: ${propgroup.SaltStackConfiguration.masterAddress}") | Set-Content -Path C:\salt\conf\minion
        ((Get-Content -path C:\salt\conf\minion -Raw) -replace "#master_finger: ''", "master_finger: '${propgroup.SaltStackConfiguration.masterFingerPrint}'") | Set-Content -Path C:\salt\conf\minion
        Set-Content -Path C:\salt\conf\minion_id -Value '${resource.WindowsVM-Minion.resourceName}'
        C:\salt\salt-call.bat service.restart salt-minion
  wpnet:
    type: Cloud.Network
    properties:
      name: wpnet
      networkType: existing
Команды PowerShell можно настроить в разделе cloudConfig с помощью следующей процедуры. Подробные сведения см. в документации по продукту SaltStack Config.
  1. Загрузите установщик службы Salt Minion с веб-сайта SaltStack.
  2. Установите службу Salt Minion на ВМ Windows.
  3. Обновите значение имени узла главного сервера Salt в конфигурации служебного сервера.
  4. Обновите значение отпечатка пальца главного сервера Salt в конфигурации служебного сервера.
  5. Установите значение minion_id для имени ресурса ВМ, которое будет использоваться для принятия служебного сервера главным сервером Salt.
  6. Перезапустите служебный сервер.

Примечание. При развертывании облачного шаблона, который содержит служебные серверы Salt, развертывание не отображается в vRealize Automation Cloud Assembly. Развертывание можно отобразить с помощью службы vRealize Automation Service Broker.

Дополнительные сведения о развертывании служебных серверов Salt

Описание дополнительных методов использования интегрированного продукта SaltStack Config для развертывания служебных серверов Salt из облачного шаблона vRealize Automation см. в разделе Развертывание служебных серверов в Cloud Assembly в статье блога VMware vRealize Automation 8.3 and SaltStack Config – Technical Overview (Технический обзор vRealize Automation 8.3 и SaltStack Config).

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

Примеры использования SaltStack Config для планирования

  • Пример: настройка планировщика путем вызова API-интерфейса SaltStack Config.

    Используйте этот способ при настройке vRealize Automation и SaltStack Config. Подключитесь к SaltStack Config с помощью клиента Python или моста HTTP-RPC и запустите следующий сценарий:

    schedule.save(name="name_of_schedule_entry",
                  schedule=<schedule description>,
                  masters=<list of targeted masters or `*` for all of them>,
                  tgt=<master+minion target description>,
                  cmd=<one of "local", "runner", or "wheel">,
                  fun="<name to schedule>",
                  arg=<arguments to function>,
                  tgt_uuid=<uuid of existing target, use this or tgt, not both>,
                  job_uuid=<uuid of existing job, use this or fun/arg, not both>,
                  enabled=<True or False to enable the schedule after saving>)

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

  • Пример: настройка планировщика путем настройки служебных серверов.

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

    Чтобы указать служебный сервер, используйте функцию schedule.add или установите для него состояние schedule.present. Например:

    salt <minion_to_schedule> <name_of_job> function='cmd.run' job_args="[some command]" seconds=3600

    Планировщик можно настроить без главного сервера, если вызов Salt запускается непосредственно на служебном сервере. Чтобы указать служебный сервер, используйте параметр salt <minion_to_schedule> state.apply schedulestate и файл schedulestate.sls, как показано в следующем примере.

    job1:
      schedule.present:
        - function: state.sls
        - job_args:
          - httpd
        - job_kwargs:
            test: True
        - when:
            - Monday 5:00pm
            - Tuesday 3:00pm
            - Wednesday 5:00pm
            - Thursday 3:00pm
            - Friday 5:00pm