Пример #1
0
    def test_render_parameter_store(self, *args):
        sys.stdout = StringIO()
        with open(TEST_CONFIG, 'wt') as f:
            f.write(test_config_file)

        fake_aws = self.FakeAws()

        with fake_aws.patch():
            with mock.patch.object(config.AWSCredentialCache, 'get_awscreds',
                                   self.fake_awscreds):
                config.main([
                    '-c', TEST_CONFIG, 'render', 'prod', '--parameter-store',
                    '/super-service/blah'
                ])

        sys.stdout.seek(0)
        data = sys.stdout.read()

        actual_lines = [line for line in data.split('\n') if line]

        self.assertEqual(
            'Writing config with parameter store prefix '
            '/super-service/blah to AWS account 12345', actual_lines[0])
        for index, actual_line in enumerate(actual_lines[1:]):
            self.assertTrue(
                actual_line.startswith('Writing /super-service/blah/'),
                msg='Line {} was {}'.format(index + 1, actual_line))

        self.assertEqual(
            {
                '/super-service/blah/foo': 'bar',
                '/super-service/blah/password': '******',
                '/super-service/blah/nest/bird': 'pigeon',
                '/super-service/blah/nest/tree': 'birch',
            }, fake_aws.fake_parameter_store)
Пример #2
0
    def test_import_json_config(self, *args):
        stdin = sys.stdin
        sys.stdin = StringIO(test_json_config)
        config.main(['-c', TEST_CONFIG, 'import'])
        sys.stdin = stdin

        with open(TEST_CONFIG, 'rt') as f:
            data = yaml.load(f.read())
        self.assertEqual(
            data, {
                'stages': {
                    '/.*/': {
                        'environment': 'dev',
                        'key': 'dev-key'
                    },
                    'prod': {
                        'environment': 'prod',
                        'key': 'prod-key'
                    }
                },
                'config': {
                    'foo': 'bar',
                    'password': {
                        '+dev': ':decrypt:ZGV2OmRldi1wYXNzd29yZA==',
                        '+prod': ':decrypt:cHJvZDpwcm9kLXBhc3N3b3Jk'
                    },
                    'nest': {
                        'bird': 'pigeon',
                        'tree': 'birch',
                    }
                }
            })
Пример #3
0
 def test_export_json_config(self, *args):
     stdout = sys.stdout
     sys.stdout = StringIO()
     with open(TEST_CONFIG, 'wt') as f:
         f.write(test_config_file)
     config.main(['-c', TEST_CONFIG, 'export', '--json'])
     sys.stdout.seek(0)
     data = sys.stdout.read()
     sys.stdout = stdout
     self.assertEqual(
         json.loads(data), {
             'stages': {
                 '/.*/': {
                     'environment': 'dev',
                     'key': 'dev-key'
                 },
                 'prod': {
                     'environment': 'prod',
                     'key': 'prod-key'
                 }
             },
             'config': {
                 'foo': 'bar',
                 'password': {
                     '+dev': ':encrypt:dev-password',
                     '+prod': ':encrypt:prod-password',
                     '+foo': ':encrypt:foo-password',
                     '+/ba.*/': ':encrypt:bar-password'
                 },
                 'nest': {
                     'bird': 'pigeon',
                     'tree': 'birch',
                 }
             }
         })
Пример #4
0
    def test_import_json_config(self, *args):
        stdin = sys.stdin
        sys.stdin = StringIO(test_json_config)
        config.main(["-c", TEST_CONFIG, "import"])
        sys.stdin = stdin

        with open(TEST_CONFIG, "rt") as f:
            data = yaml.safe_load(f.read())
        self.assertEqual(
            data,
            {
                "stages": {
                    "/.*/": {
                        "environment": "dev",
                        "key": "dev-key"
                    },
                    "prod": {
                        "environment": "prod",
                        "key": "prod-key"
                    },
                },
                "config": {
                    "foo": "bar",
                    "password": {
                        "+dev": ":decrypt:ZGV2OmRldi1wYXNzd29yZA==",
                        "+prod": ":decrypt:cHJvZDpwcm9kLXBhc3N3b3Jk",
                    },
                    "nest": {
                        "bird": "pigeon",
                        "tree": "birch"
                    },
                },
            },
        )
Пример #5
0
 def test_render_json_config(self, *args):
     stdout = sys.stdout
     sys.stdout = StringIO()
     with open(TEST_CONFIG, 'wt') as f:
         f.write(test_config_file)
     config.main(['-c', TEST_CONFIG, 'render', 'prod', '--json'])
     sys.stdout.seek(0)
     data = sys.stdout.read()
     sys.stdout = stdout
     self.assertEqual(json.loads(data), {
         'foo': 'bar',
         'password': '******'
     })
Пример #6
0
 def test_render_yaml_config_custom_regex(self, *args):
     stdout = sys.stdout
     sys.stdout = StringIO()
     with open(TEST_CONFIG, 'wt') as f:
         f.write(test_config_file)
     config.main(['-c', TEST_CONFIG, 'render', 'baz'])
     sys.stdout.seek(0)
     data = sys.stdout.read()
     sys.stdout = stdout
     self.assertEqual(yaml.load(data), {
         'foo': 'bar',
         'password': '******'
     })
Пример #7
0
 def test_render_python_config(self, *args):
     stdout = sys.stdout
     sys.stdout = StringIO()
     with open(TEST_CONFIG, 'wt') as f:
         f.write(test_config_file)
     config.main(['-c', TEST_CONFIG, 'render', 'prod', '--python'])
     sys.stdout.seek(0)
     data = sys.stdout.read()
     sys.stdout = stdout
     g = {'ENCRYPTED_CONFIG': None}
     exec(data.split('\n')[0], g)
     data = mock_decrypt(g['ENCRYPTED_CONFIG'][0], 'prod')
     self.assertEqual(json.loads(data), {
         'foo': 'bar',
         'password': '******'
     })
Пример #8
0
 def test_render_encrypted_config(self, *args):
     stdout = sys.stdout
     sys.stdout = StringIO()
     with open(TEST_CONFIG, 'wt') as f:
         f.write(test_config_file)
     config.main(['-c', TEST_CONFIG, 'render', 'prod', '--encrypt'])
     sys.stdout.seek(0)
     data = sys.stdout.read()
     sys.stdout = stdout
     self.assertEqual(
         json.loads(mock_decrypt(json.loads(data)[0], 'prod')), {
             'foo': 'bar',
             'password': '******',
             'nest': {
                 'bird': 'pigeon',
                 'tree': 'birch',
             }
         })
Пример #9
0
 def test_render_yaml_config_custom(self, *args):
     stdout = sys.stdout
     sys.stdout = StringIO()
     with open(TEST_CONFIG, 'wt') as f:
         f.write(test_config_file)
     config.main(['-c', TEST_CONFIG, 'render', 'foo'])
     sys.stdout.seek(0)
     data = sys.stdout.read()
     sys.stdout = stdout
     self.assertEqual(
         yaml.load(data), {
             'foo': 'bar',
             'password': '******',
             'nest': {
                 'bird': 'pigeon',
                 'tree': 'birch',
             }
         })
Пример #10
0
    def test_render_parameter_store(self, *args):
        sys.stdout = StringIO()
        with open(TEST_CONFIG, "wt") as f:
            f.write(test_config_file)

        fake_aws = self.FakeAws()

        with fake_aws.patch():
            with mock.patch.object(config.AWSCredentialCache, "get_awscreds",
                                   self.fake_awscreds):
                config.main([
                    "-c",
                    TEST_CONFIG,
                    "render",
                    "prod",
                    "--parameter-store",
                    "/super-service/blah",
                ])

        sys.stdout.seek(0)
        data = sys.stdout.read()

        actual_lines = [line for line in data.split("\n") if line]

        self.assertEqual(
            "Writing config with parameter store prefix "
            "/super-service/blah to AWS account 12345",
            actual_lines[0],
        )
        for index, actual_line in enumerate(actual_lines[1:]):
            self.assertTrue(
                actual_line.startswith("Writing /super-service/blah/"),
                msg="Line {} was {}".format(index + 1, actual_line),
            )

        self.assertEqual(
            {
                "/super-service/blah/foo": "bar",
                "/super-service/blah/password": "******",
                "/super-service/blah/nest/bird": "pigeon",
                "/super-service/blah/nest/tree": "birch",
            },
            fake_aws.fake_parameter_store,
        )
Пример #11
0
 def test_render_encrypted_config(self, *args):
     stdout = sys.stdout
     sys.stdout = StringIO()
     with open(TEST_CONFIG, "wt") as f:
         f.write(test_config_file)
     config.main(["-c", TEST_CONFIG, "render", "prod", "--encrypt"])
     sys.stdout.seek(0)
     data = sys.stdout.read()
     sys.stdout = stdout
     self.assertEqual(
         json.loads(mock_decrypt(json.loads(data)[0], "prod")),
         {
             "foo": "bar",
             "password": "******",
             "nest": {
                 "bird": "pigeon",
                 "tree": "birch"
             },
         },
     )
Пример #12
0
 def test_render_yaml_config_custom_regex(self, *args):
     stdout = sys.stdout
     sys.stdout = StringIO()
     with open(TEST_CONFIG, "wt") as f:
         f.write(test_config_file)
     config.main(["-c", TEST_CONFIG, "render", "baz"])
     sys.stdout.seek(0)
     data = sys.stdout.read()
     sys.stdout = stdout
     self.assertEqual(
         yaml.safe_load(data),
         {
             "foo": "bar",
             "password": "******",
             "nest": {
                 "bird": "pigeon",
                 "tree": "birch"
             },
         },
     )
Пример #13
0
 def test_render_python_config(self, *args):
     stdout = sys.stdout
     sys.stdout = StringIO()
     with open(TEST_CONFIG, "wt") as f:
         f.write(test_config_file)
     config.main(["-c", TEST_CONFIG, "render", "prod", "--python"])
     sys.stdout.seek(0)
     data = sys.stdout.read()
     sys.stdout = stdout
     g = {"ENCRYPTED_CONFIG": None}
     exec(data.split("\n")[0], g)
     data = mock_decrypt(g["ENCRYPTED_CONFIG"][0], "prod")
     self.assertEqual(
         json.loads(data),
         {
             "foo": "bar",
             "password": "******",
             "nest": {
                 "bird": "pigeon",
                 "tree": "birch"
             },
         },
     )
Пример #14
0
 def test_export_json_config(self, *args):
     stdout = sys.stdout
     sys.stdout = StringIO()
     with open(TEST_CONFIG, "wt") as f:
         f.write(test_config_file)
     config.main(["-c", TEST_CONFIG, "export", "--json"])
     sys.stdout.seek(0)
     data = sys.stdout.read()
     sys.stdout = stdout
     self.assertEqual(
         json.loads(data),
         {
             "stages": {
                 "/.*/": {
                     "environment": "dev",
                     "key": "dev-key"
                 },
                 "prod": {
                     "environment": "prod",
                     "key": "prod-key"
                 },
             },
             "config": {
                 "foo": "bar",
                 "password": {
                     "+dev": ":encrypt:dev-password",
                     "+prod": ":encrypt:prod-password",
                     "+foo": ":encrypt:foo-password",
                     "+/ba.*/": ":encrypt:bar-password",
                 },
                 "nest": {
                     "bird": "pigeon",
                     "tree": "birch"
                 },
             },
         },
     )