Невозможно установить переменную окружения с помощью предварительных хуков Scepter - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь установить переменную окружения, используя скипетры ! Cmd (до создания / обновления), которые затем могут быть разрешены с помощью sceptre_user_data с ! Environment_variable распознаватель в том же файле конфигурации.

Команда работает хорошо, когда выполняется из оболочки, но по какой-то причине ловушка! Cmd не выполняет присваивание во время выполнения

Не знаю, если я что-то упустил здесь

hooks:
  before_create:
    - !cmd "export OBJECT_VERSION=$(aws s3api put-object --body file --bucket bucket-name --key path --query 'VersionId')"

sceptre_user_data:
  ObjectVersion: !environment_variable OBJECT_VERSION

1 Ответ

0 голосов
/ 03 июня 2019

К сожалению, для этого на данный момент вам нужен собственный распознаватель

sceptre_plugins_cmd_extras.py

import os
import subprocess
from sceptre.resolvers import Resolver


class CmdResolver(Resolver):
    """
    Resolver for running shell commands and returning the value
    :param argument: Name of the environment variable to return.
    :type argument: str
    """

    def resolve(self):
        """
        Runs a command and returns the output as a string
        :returns: Value of the environment variable.
        :rtype: str
        """
        return subprocess.check_output(self.argument, shell=True)

setup.py

from setuptools import setup

setup(
    name='sceptre-plugins-cmd-extras',
    description="Extra Sceptre Plguins (Hook & Resolver) for subprocess",
    keywords="sceptre,cloudformation",
    version='0.0.1',
    author="Cloudreach",
    author_email="juan.canham@cloudreach.com",
    license='Apache2',
    url="https://github.com/cloudreach/sceptre",
    entry_points={
        'sceptre.resolvers': [
            'cmd = sceptre_plugins_cmd_extras:CmdResolver',
        ],
    },
    py_modules=['sceptre_plugins_cmd_extras'],
    install_requires=["sceptre"],
    classifiers=[
        "Development Status :: 3 - Alpha",
        "Intended Audience :: Developers",
        "Intended Audience :: System Administrators"
        "Natural Language :: English",
        "Environment :: Plugins",
        "Programming Language :: Python :: 2.6",
        "Programming Language :: Python :: 2.7",
        "Programming Language :: Python :: 3.5",
        "Programming Language :: Python :: 3.6",
        "Programming Language :: Python :: 3.7"
    ]
)

Но тогда вам нужно сделать свою команду идемпотентной (что-то вроде)

sceptre_user_data:
  ObjectVersion: !cmd aws s3api get-object --bucket bucket-name --key path --query 'VersionId' || aws s3api put-object --body file --bucket bucket-name --key path --query 'VersionId'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...