def get_postgresql_params_by_rds_instance(environment): """ Returns a map from rds_instance identifier to postgresql parameters as accepted by terraform See aws db_parameter_group "parameter" argument. """ postgresql_variables = get_role_defaults('postgresql_base') postgresql_variables.update( environment.postgresql_config.postgres_override) environment_default_params = { 'max_connections': postgresql_variables['postgresql_max_connections'], } rds_instance_to_params = {} for rds_instance in environment.terraform_config.rds_instances: param_names = set(environment_default_params.keys()) | set( rds_instance.params.keys()) combined_params = { param_name: (rds_instance.params[param_name] if param_name in rds_instance.params else environment_default_params[param_name]) for param_name in param_names } rds_instance_to_params[rds_instance.identifier] = [ format_param_for_terraform(param_name, param_value) for param_name, param_value in combined_params.items() ] return rds_instance_to_params
def get_defaults_jsonobject(role, **kwargs): """ Create a JsonObject subclass that has a property for every default variable in :role: additionally, calling to_json() on an instance will exclude any variables that are set to the original default :param role: ansible role to look for defaults/main.yml file of. Must be under ansible/roles/. :param kwargs: extra properties to define explicitly. Useful if autodetection is not enough. :return: The new JsonObject subclass. """ cls = type(jsonobject.JsonObject)( str('{}_Defaults'.format(role)), # bytes in Python 2, text in Python 3 (jsonobject.JsonObject,), dict(get_role_defaults(role), _allow_dynamic_properties=False, **kwargs), ) # exclude from to_json if set to the default value def exclude(self, value): return value == self.default() for property_ in cls._properties_by_key.values(): property_.exclude = exclude.__get__(property_) return cls
def get_defaults_jsonobject(role, **kwargs): """ Create a JsonObject subclass that has a property for every default variable in :role: additionally, calling to_json() on an instance will exclude any variables that are set to the original default :param role: ansible role to look for defaults/main.yml file of. Must be under ansible/roles/. :param kwargs: extra properties to define explicitly. Useful if autodetection is not enough. :return: The new JsonObject subclass. """ cls = type(jsonobject.JsonObject)( '{}_Defaults'.format(role), (jsonobject.JsonObject,), dict(get_role_defaults(role), _allow_dynamic_properties=False, **kwargs)) # exclude from to_json if set to the default value def exclude(self, value): return value == self.default() for property_ in cls._properties_by_key.values(): property_.exclude = exclude.__get__(property_) return cls
def service_process_mapping(self): citus_pg_version = self.environment.public_vars.get( 'citus_postgresql_version') if not citus_pg_version: citus_pg_version = get_role_defaults('citusdb').get( 'citus_postgresql_version') monit_name = "postgresql_{}".format(citus_pg_version) return { 'citusdb': (monit_name, 'citusdb'), 'pgbouncer': ('pgbouncer', 'citusdb') }
def get_postgresql_params(environment): """ Returns postgresql parameters as accepted by terraform See aws db_parameter_group "parameter" argument. """ postgresql_variables = get_role_defaults('postgresql') postgresql_variables.update(environment.postgresql_config.override) param_values = { 'max_connections': postgresql_variables['postgresql_max_connections'], } params_for_terraform = [] for param_name, param_value in param_values.items(): params_for_terraform.append({ 'name': param_name, 'value': param_value, # Anything listed as "dynamic" in # https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html # will be applied *immediately*, ignoring this flag. See: # https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html 'apply_method': 'pending-reboot' }) return params_for_terraform
def get_postgresql_params_by_rds_instance(environment): """ Returns a map from rds_instance identifier to postgresql parameters as accepted by terraform See aws db_parameter_group "parameter" argument. """ postgresql_variables = get_role_defaults('postgresql_base') postgresql_variables.update(environment.postgresql_config.postgres_override) environment_default_params = { 'max_connections': postgresql_variables['postgresql_max_connections'], } rds_instance_to_params = {} for rds_instance in environment.terraform_config.rds_instances: param_names = set(environment_default_params.keys()) | set(rds_instance.params.keys()) combined_params = { param_name: (rds_instance.params[param_name] if param_name in rds_instance.params else environment_default_params[param_name]) for param_name in param_names } rds_instance_to_params[rds_instance.identifier] = [ format_param_for_terraform(param_name, param_value) for param_name, param_value in combined_params.items() ] return rds_instance_to_params
def _disallowed_public_variables(self): return set(get_role_defaults('postgresql_base').keys()) | \ set(get_role_defaults('pgbouncer').keys()) | \ set(ProxyConfig.get_claimed_variables())
def _disallowed_public_variables(self): return set(get_role_defaults('postgresql_base').keys()) | \ set(get_role_defaults('pgbouncer').keys()) | \ set(ProxyConfig.get_claimed_variables())