Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
 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')
     }
Пример #5
0
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
Пример #6
0
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
Пример #7
0
 def _disallowed_public_variables(self):
     return set(get_role_defaults('postgresql_base').keys()) | \
            set(get_role_defaults('pgbouncer').keys()) | \
            set(ProxyConfig.get_claimed_variables())
Пример #8
0
 def _disallowed_public_variables(self):
     return set(get_role_defaults('postgresql_base').keys()) | \
            set(get_role_defaults('pgbouncer').keys()) | \
            set(ProxyConfig.get_claimed_variables())