class DomainsSettings(ConfigOpts): allow_domain_registration = options.BoolOpt(default=True) allow_domain_transfer = options.BoolOpt(default=True) enable_default_tld = options.BoolOpt(default=False) default_tld = options.StringOpt(allow_null=True) enable_default_nameservers = options.BoolOpt(default=False) default_nameserver1 = options.StringOpt(allow_null=True) default_nameserver2 = options.StringOpt(allow_null=True) default_nameserver3 = options.StringOpt(allow_null=True) default_nameserver4 = options.StringOpt(allow_null=True) class Meta: section = 'DOMAINS' @staticmethod def for_client(client: Client) -> 'DomainsSettings': if not client: return DomainsSettings() if client.configuration: return DomainsSettings(configuration_id=client.configuration.id) else: try: default_config = Configuration.objects.default( reseller_resources=client.reseller_resources) except Configuration.DoesNotExist: return DomainsSettings() else: return DomainsSettings(configuration_id=default_config.id)
class SignUpSettingsConfig(ConfigOpts): require_confirmation = options.BoolOpt(default=False) email_confirmation_template = options.StringOpt( max_length=64, default='account.signup.confirm') allow_free_email_addresses = options.BoolOpt(default=True) forbidden_domains_for_email_signup = options.StringOpt(default=None, allow_null=True) domains_for_email_signup_whitelist = options.StringOpt(default=None, allow_null=True) class Meta: section = 'SIGNUP_SETTINGS'
class TermsOfServiceSettingsConfig(ConfigOpts): require_end_users_to_agree_with_latest_tos = options.BoolOpt(default=False) ask_again_after = options.IntegerOpt(min=0, default=43800) forbid_access_after = options.StringOpt(default='', allow_null=True) class Meta: section = 'TOS_SETTINGS'
class OpenstackSettings(ConfigOpts): auto_cleanup_images = options.BoolOpt(default=False) auto_cleanup_number_of_days = options.IntegerOpt(default=14) auto_cleanup_image_types = options.ListOpt( default=['ami', 'ari', 'aki', 'vhd', 'vmdk', 'raw', 'qcow2', 'vdi', 'iso'], item_type=options.StringOpt(), ) class Meta: section = 'OPENSTACK' @staticmethod def for_client(client: Client) -> 'OpenstackSettings': if not client: return OpenstackSettings() if client.configuration: return OpenstackSettings(configuration_id=client.configuration.id) else: try: default_config = Configuration.objects.default(reseller_resources=client.reseller_resources) except Configuration.DoesNotExist: return OpenstackSettings() else: return OpenstackSettings(configuration_id=default_config.id)
class BillingSettings(ConfigOpts): credit_limit = options.DecimalOpt(max_digits=14, decimal_places=2, default=0) credit_required = options.DecimalOpt(max_digits=14, decimal_places=2, default=0) auto_resume_client_on_credit_update = options.BoolOpt(default=False) # For Clients with billing agreements credit_limit_with_agreement = options.DecimalOpt(max_digits=14, decimal_places=2, default=0) credit_required_with_agreement = options.DecimalOpt(max_digits=14, decimal_places=2, default=0) # Suspend auto_suspend = options.BoolOpt(default=False) auto_suspend_delay_hours_enabled = options.BoolOpt(default=False) auto_suspend_delay_hours = options.IntegerOpt(default=0, min=0) auto_suspend_delay_credit_enabled = options.BoolOpt(default=False) auto_suspend_delay_credit = options.DecimalOpt(max_digits=14, decimal_places=2, default=0, min=0) auto_suspend_notification_template = options.StringOpt(allow_null=True) # Terminate auto_terminate = options.BoolOpt(default=False) auto_terminate_delay_hours = options.IntegerOpt(default=24) suspend_instead_of_terminate = options.BoolOpt(default=True) auto_terminate_notification_template = options.StringOpt(allow_null=True) # Low credit_notifications_enabled = options.BoolOpt(default=False) credit_notifications_when_agreement_enabled = options.BoolOpt( default=False) first_credit_remaining_hours = options.IntegerOpt(default=72) first_credit_notification_template = options.StringOpt(allow_null=True) second_credit_remaining_hours = options.IntegerOpt(default=24) second_credit_notification_template = options.StringOpt(allow_null=True) third_credit_remaining_hours = options.IntegerOpt(default=1) third_credit_notification_template = options.StringOpt(allow_null=True) # Notification sender_email = options.StringOpt(allow_null=True) sender_name = options.StringOpt(allow_null=True) # Invoicing company_info = options.StringOpt(default="My Company") # Taxing auto_eu_tax_exemption = options.BoolOpt(default=False) add_tax_for_credit_invoices = options.BoolOpt(default=True) # Billing generate_invoices = options.BoolOpt(default=False) create_todo_on_invoice_payment = options.BoolOpt(default=False) send_notifications_for_unpaid_invoices = options.BoolOpt(default=False) auto_settle_usage = options.BoolOpt(default=False) auto_pay_invoice_only_when_enough_credit = options.BoolOpt(default=False) next_paid_invoice_number = options.IntegerOpt(default=1) next_paid_invoice_number_format = options.DjangoStringTemplateOpt( default='INV {{ number }}', allow_null=True) minim_uptodate_credit_for_invoice_payment = options.IntegerOpt(default=0, min=0) invoicing_option = options.StringOpt(default='fiscal_on_paid', choices=('only_proforma', 'always_fiscal', 'fiscal_on_paid')) limit_billable_seconds_per_month = options.BoolOpt(default=True) billable_seconds_per_month = options.IntegerOpt(default=2400000, min=1, max=3000000) issue_invoice_before_next_due_date = options.BoolOpt(default=False) next_invoice_date_offset = options.IntegerOpt(default=0, min=0, max=30) billing_cycle_as_calendar_month = options.BoolOpt(default=False) # Signup fraud_check = options.BoolOpt(default=False) maxmind_manual_review_score = options.IntegerOpt(min=1, max=99, default=30) maxmind_fraud_score = options.IntegerOpt(min=1, max=99, default=60) enable_maxmind_insights = options.BoolOpt(default=True) auto_create_order = options.BoolOpt(default=False) auto_order_service = options.IntegerOpt(allow_null=True) auto_order_service_cycle = options.IntegerOpt(allow_null=True) auto_order_service_params = options.JsonOpt(allow_null=True) client_initial_credit = options.IntegerOpt(min=0, default=0) class Meta: section = 'BILLING'
class OSConfig(ConfigOpts): auth_url = options.URIOpt(label='Keystone auth URL', required=True) username = options.StringOpt(default='admin', required=True) password = options.StringOpt(encrypted=True, required=True) user_domain_id = options.StringOpt(default='default') insecure = options.BoolOpt(default=False) identity_type = options.StringOpt(default='identity') default_role = options.StringOpt(default='', allow_null=True) default_interface = options.StringOpt(choices=('admin', 'public', 'private'), default='public') user_project_id = options.StringOpt(required=True) default_region = options.StringOpt(default='', allow_null=True) default_project_name = options.DjangoStringTemplateOpt( default='{{ client.name }} - {{ client.id }}', allow_null=False, required=True) default_project_description = options.DjangoStringTemplateOpt( default='Fleio created for {{ client.name }}', allow_null=False, required=True) project_domain_id = options.StringOpt(default='default') identity_api_version = options.StringOpt( max_length=6, default=get_default_api_value('identity')) compute_api_version = options.StringOpt( default=get_default_api_value('compute')) dns_api_version = options.StringOpt(default=get_default_api_value('dns')) volume_api_version = options.StringOpt( default=get_default_api_value('volume')) volumev2_api_version = options.StringOpt( default=get_default_api_value('volumev2')) volumev3_api_version = options.StringOpt( default=get_default_api_value('volumev3')) volume_service_type = options.StringOpt( default=settings.OPENSTACK_DEFAULT_VOLUME_SERVICE_TYPE) network_api_version = options.StringOpt( default=get_default_api_value('network')) image_api_version = options.StringOpt( default=get_default_api_value('image')) metric_api_version = options.StringOpt( default=get_default_api_value('metric')) container_infra_api_version = options.StringOpt( default=get_default_api_value('container-infra')) notifications_url = options.ListOpt( encrypted=True, item_type=options.URIOpt(schemes=('rabbit', 'amqp', 'kombu', 'pika', 'zmq', 'kafka'), default='rabbit:///', require_authority=False)) notifications_topic = options.ListOpt(default=['notifications']) notifications_exchange = options.ListOpt(default=[ 'cinder', 'glance', 'keystone', 'neutron', 'nova', 'openstack' ]) notifications_pool = options.StringOpt(default=None, allow_null=True) timeout = options.IntegerOpt(min=1, default=60) require_valid_ssl = options.BoolOpt(default=False) volume_size_increments = options.JsonOpt(allow_null=True) notifications_settings_version = options.StringOpt(default='0') hide_projects_and_api_users = options.BoolOpt(default=False) hide_project_ids = options.StringOpt(default=None, allow_null=True) prefix_api_users_with_username = options.BoolOpt(default=False) auto_allocated_topology = options.BoolOpt(default=True) force_config_drive_for_instance_creation = options.BoolOpt(default=False) class Meta: section = 'OPENSTACK_PLUGIN'
class SFASettingsConfig(ConfigOpts): require_end_users_to_use_sfa = options.BoolOpt(default=False) require_staff_users_to_use_sfa = options.BoolOpt(default=False) class Meta: section = 'SFA_SETTINGS'