def test_pre_process_resolve(self, yaml_fixtures): """Test that pre-process resolution only resolves specific vars.""" raw_config = deepcopy( yaml_fixtures["config.runway.yml"]["deployments"]) raw_vars = deepcopy(yaml_fixtures["config.runway.variables.yml"]) deployment = DeploymentDefinition.from_list(raw_config)[0] raw_context = {"env_vars": os.environ.copy()} raw_context["env_vars"].update(ENV_VARS) deployment.resolve( MutableMap(**raw_context), variables=MutableMap(**raw_vars), pre_process=True, ) # check resolved variables for pre_process assert deployment.account_id != 123456789101 assert deployment.assume_role["arn"] == "arn:aws:iam::role/some-role" assert deployment.env_vars == {"MY_USERNAME": "******"} assert deployment.regions == ["us-east-1"] assert not deployment.parallel_regions, "not set in test config, should be None" # these should be unresolved at this point for attr in ["environments", "module_options"]: with pytest.raises(UnresolvedVariable): getattr(deployment, attr)
def test_env_vars_config_unresolved( self, fx_deployments, monkeypatch, runway_context ): """Test env_vars_config unresolved.""" expected = {"key": "val"} monkeypatch.setattr( MODULE + ".merge_nested_environment_dicts", MagicMock(return_value=expected) ) monkeypatch.setattr( Deployment, "_Deployment__merge_env_vars", MagicMock(return_value=None) ) monkeypatch.setattr( DeploymentDefinition, "env_vars", PropertyMock( side_effect=[UnresolvedVariable("test", MagicMock()), expected] ), ) monkeypatch.setattr( DeploymentDefinition, "_env_vars", PropertyMock(), raising=False ) raw_deployment = fx_deployments.get("min_required") deployment = DeploymentDefinition.from_list([raw_deployment])[0] obj = Deployment(context=runway_context, definition=deployment) assert obj.env_vars_config == expected obj.definition._env_vars.resolve.assert_called_once()
def test_from_list(self, yaml_fixtures): """Test init of a deployment from a list.""" raw_config = deepcopy(yaml_fixtures['config.runway.yml']['deployments']) deployment = DeploymentDefinition.from_list(raw_config)[0] deployment_attrs = deployment.__dict__.keys() assert deployment.name == 'deployment_1' for attr in self.ATTRS: # provides a better error than using all() assert attr in deployment_attrs
def test_resolve(self, yaml_fixtures): """Test full resolution of variable attributes.""" raw_config = deepcopy(yaml_fixtures['config.runway.yml']['deployments']) raw_vars = deepcopy(yaml_fixtures['config.runway.variables.yml']) deployment = DeploymentDefinition.from_list(raw_config)[0] raw_context = {'env_vars': os.environ.copy()} raw_context['env_vars'].update(ENV_VARS) deployment.resolve(MutableMap(**raw_context), variables=MutableMap(**raw_vars)) assert deployment.regions == ['us-east-1'] assert not deployment.account_id == 123456789101 assert deployment.assume_role['arn'] == 'arn:aws:iam::role/some-role' assert deployment.env_vars == {'MY_USERNAME': '******'} assert deployment.environments == { 'test_param': 'lab value for ${envvar AWS_REGION}' } assert deployment.module_options == { 'deployment_option': 'test.deployment.module_options' } assert deployment.regions == ['us-east-1'] assert not deployment.parallel_regions, 'not set in test config, should be None'
def test_pre_process_resolve(self, yaml_fixtures): """Test that pre-process resolution only resolves specific vars.""" raw_config = deepcopy(yaml_fixtures['config.runway.yml']['deployments']) raw_vars = deepcopy(yaml_fixtures['config.runway.variables.yml']) deployment = DeploymentDefinition.from_list(raw_config)[0] raw_context = {'env_vars': os.environ.copy()} raw_context['env_vars'].update(ENV_VARS) deployment.resolve(MutableMap(**raw_context), variables=MutableMap(**raw_vars), pre_process=True) # check resolved variables for pre_process assert not deployment.account_id == 123456789101 assert deployment.assume_role['arn'] == 'arn:aws:iam::role/some-role' assert deployment.env_vars == {'MY_USERNAME': '******'} assert deployment.regions == ['us-east-1'] assert not deployment.parallel_regions, 'not set in test config, should be None' # these should be unresolved at this point for attr in ['environments', 'module_options']: with pytest.raises(UnresolvedVariable): getattr(deployment, attr)
def test_resolve(self, yaml_fixtures): """Test full resolution of variable attributes.""" raw_config = deepcopy( yaml_fixtures["config.runway.yml"]["deployments"]) raw_vars = deepcopy(yaml_fixtures["config.runway.variables.yml"]) deployment = DeploymentDefinition.from_list(raw_config)[0] raw_context = {"env_vars": os.environ.copy()} raw_context["env_vars"].update(ENV_VARS) deployment.resolve(MutableMap(**raw_context), variables=MutableMap(**raw_vars)) assert deployment.regions == ["us-east-1"] assert deployment.account_id != 123456789101 assert deployment.assume_role["arn"] == "arn:aws:iam::role/some-role" assert deployment.env_vars == {"MY_USERNAME": "******"} assert deployment.environments == { "test_param": "lab value for ${envvar AWS_REGION}" } assert deployment.module_options == { "deployment_option": "test.deployment.module_options" } assert deployment.regions == ["us-east-1"] assert not deployment.parallel_regions, "not set in test config, should be None"