У нас есть шаблон 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, он работает, но тогда это хакерское решение.
Мы попробовали все типы ссылок на файл.Это там, другие файлы работают нормально.