В файле шаблона Jinja, как загрузить сценарий bash для сценария запуска экземпляра - PullRequest
0 голосов
/ 21 апреля 2019

У нас есть шаблон container_instance_template.jinja, который определяет свойства нашего экземпляра для нашего диспетчера развертывания GCP.

Для метатега startup-script у нас есть _startup-script.sh файл, который мы хотим загрузить.Но мы продолжаем получать ошибку загрузки шаблона.

Наш шаблон:

resources:
- name: {{ IT_NAME }}
  type: compute.v1.instanceTemplate
  properties:
    properties:
      metadata:
        items:
        - key: gce-container-declaration
          value: |
            {{ GenerateManifest(env['name'], properties['port'],properties['dockerImage'], properties['dockerEnv'])|indent(12) }}
        - key: startup-script
          value: ????????????

Мы перепробовали все:

 key: startup-script
 value: |
  {{ properties['startupScript'] }}

# This one does not work, because as it's just the reference to the file, GCP doesn't pick up the contents and doesn't execute the script. As far as we understood, it should though, anyways.
key: startup-script
 value: |
  {% include properties['startupScript'] %}

# This one does not work, because we get the error TemplateNotFound: ./_startup-script.sh

Это ошибка, которую мы получаем:

- code: MANIFEST_EXPANSION_USER_ERROR
  location: /deployments/app/manifests/manifest-14723924
  message: |-
    Manifest expansion encountered the following errors: Exception in container_instance_template.jinja
    Traceback (most recent call last):
        return template.render(resource)
        return self.environment.handle_exception(exc_info, True)
        reraise(exc_type, exc_value, tb)
      File "<template>", line 22, in top-level template code
        raise TemplateNotFound(template)
    TemplateNotFound: ./_startup-script.sh
     Resource: container_instance_template.jinja Resource: config

В нашей последней попытке мы пытались создать функцию Python и импортировать ее в шаблон, но безуспешно:

# container_instance_template.jinja
imports:
- path: helpers.py 
- path: properties['startupScript']

# And then using:

{{ include_file(properties['startupScript']) }}


# helpers.py

import jinja2

def include_file(name):
    return jinja2.Markup(loader.get_source(env, name)[0])

loader = jinja2.PackageLoader(__name__, 'templates')
env = jinja2.Environment(loader=loader)
env.globals['include_file'] = include_file

Мы не можем найти примеры GCP, руководство, документация или что-нибудь еще.Если мы встраиваем скрипт bash, он работает, но тогда это хакерское решение.

Мы попробовали все типы ссылок на файл.Это там, другие файлы работают нормально.

1 Ответ

0 голосов
/ 22 апреля 2019

Вы пытались изменить тег метаданных "startup-script" на "startup-script-url" и связать его с облачным хранилищем Google?Что-то вроде:

resources:
- name: {{ IT_NAME }}
  type: compute.v1.instanceTemplate
  properties:
    properties:
      metadata:
        items:
        - key: gce-container-declaration
          value: |
            {{ GenerateManifest(env['name'], properties['port'],properties['dockerImage'], properties['dockerEnv'])|indent(12) }}
        - key: startup-script-url
          value: gs:project/bucket/yourscript.sh

Убедитесь, что вы даете ВМ соответствующее разрешение на доступ к хранилищу облачного хранилища Google.

Ознакомьтесь с этой статьей Google для получения более подробной информации.о других способах реализации этого.

...