Lucas Ratusznei Fonseca 4c6d7dd46e Remove DC’s DNS synchronization between system-controller and subcloud
The new dual stack feature brought the possibility for subclouds to
use both IPv4 and IPv6 DNS servers at the same time. Since
distributed cloud communication uses single stack only, it's expected
that subclouds' nameserver lists diverge from system controller's.
The DNS synchronization feature overwrites the subclouds' lists to make
them identical to what is configured in the system controller, if
any difference is detected. This change disables this feature to allow
the subclouds to have their own independent DNS configuration.

Test plan
=========

System: AIO-DX System Controller, AIO-SX Subcloud

[PASS] TC1 - Change system controller's nameserver list, wait for
             synchronization, check that subcloud's list is unaffected.
[PASS] TC2 - Change subcloud's nameserver list, wait for
             synchronization, check that subcloud's list is unaffected.
[PASS] TC3 - Unmanage subcloud, change subcloud's nameserver list,
             manage subcloud, check that subcloud's list is unaffected.

Story: 2011027
Task: 50293
Change-Id: I5c8bf427a19c34634c652a25fb0e17cffd9e3464
Signed-off-by: Lucas Ratusznei Fonseca <lucas.ratuszneifonseca@windriver.com>
2024-06-10 12:36:04 -03:00

403 lines
11 KiB
Python

# Copyright 2017-2024 Wind River
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from dccommon import consts as dccommon_consts
from dcorch.common import consts
# Version could be any of the following: /, /v1, /v1/
# but must deny regular paths such as /v1/isystems
VERSION_ROOT = '/{version:[^/]*?(\/$)?}'
# Compute
FLAVOR_RESOURCE_TAG = 'flavors'
FLAVOR_ACCESS_RESOURCE_TAG = 'action'
FLAVOR_EXTRA_SPECS_RESOURCE_TAG = 'os-extra_specs'
KEYPAIRS_RESOURCE_TAG = 'os-keypairs'
QUOTA_RESOURCE_TAG = 'os-quota-sets'
QUOTA_CLASS_RESOURCE_TAG = 'os-quota-class-sets'
FLAVOR_PATHS = [
'/v2.1/{project_id:.*?}/flavors',
'/v2.1/{project_id:.*?}/flavors/{flavor_id}'
]
FLAVOR_ACCESS_PATHS = [
'/v2.1/{project_id:.*?}/flavors/{flavor_id}/action'
]
EXTRA_SPECS_PATHS = [
'/v2.1/{project_id:.*?}/flavors/{flavor_id}/os-extra_specs',
'/v2.1/{project_id:.*?}/flavors/{flavor_id}/os-extra_specs/{extra_spec}'
]
KEYPAIRS_PATHS = [
'/v2.1/{project_id:.*?}/os-keypairs',
'/v2.1/{project_id:.*?}/os-keypairs/{keypair}'
]
QUOTA_PATHS = [
'/v2.1/{project_id:.*?}/os-quota-sets/{tenant_id}',
]
QUOTA_DETAIL_PATHS = [
'/v2.1/{project_id:.*?}/os-quota-sets/{tenant_id}/detail',
]
QUOTA_CLASS_PATHS = [
'/v2.1/{project_id:.*?}/os-quota-class-sets/{id}',
]
COMPUTE_PATH_MAP = {
consts.RESOURCE_TYPE_COMPUTE_FLAVOR: {
FLAVOR_RESOURCE_TAG: FLAVOR_PATHS,
FLAVOR_ACCESS_RESOURCE_TAG: FLAVOR_ACCESS_PATHS,
FLAVOR_EXTRA_SPECS_RESOURCE_TAG: EXTRA_SPECS_PATHS
},
consts.RESOURCE_TYPE_COMPUTE_KEYPAIR: {
KEYPAIRS_RESOURCE_TAG: KEYPAIRS_PATHS
},
consts.RESOURCE_TYPE_COMPUTE_QUOTA_SET: {
QUOTA_RESOURCE_TAG: QUOTA_PATHS,
},
consts.RESOURCE_TYPE_COMPUTE_QUOTA_CLASS_SET: {
QUOTA_CLASS_RESOURCE_TAG: QUOTA_CLASS_PATHS
},
}
# Sysinv
CERTIFICATE_PATHS = [
'/v1/certificate/certificate_install',
'/v1/certificate/{uuid}'
]
USER_PATHS = [
'/v1/iuser/{uuid}'
]
LOAD_PATHS = [
'/v1/loads/import_load',
'/v1/loads/{id}'
]
DEVICE_IMAGE_PATHS = [
'/v1/device_images',
'/v1/device_images/{uuid}'
]
SYSINV_PATH_MAP = {
consts.RESOURCE_TYPE_SYSINV_CERTIFICATE: CERTIFICATE_PATHS,
consts.RESOURCE_TYPE_SYSINV_USER: USER_PATHS,
consts.RESOURCE_TYPE_SYSINV_LOAD: LOAD_PATHS,
consts.RESOURCE_TYPE_SYSINV_DEVICE_IMAGE: DEVICE_IMAGE_PATHS,
}
LOAD_FILES_STAGING_DIR = '/scratch/tmp_load'
IMPORT_LOAD_FILES = ['path_to_iso', 'path_to_sig']
IMPORTED_LOAD_MAX_COUNT = 1
DEVICE_IMAGE_VAULT_DIR = '/opt/dc-vault/device_images'
# Cinder
CINDER_QUOTA_PATHS = [
'/{version}/{admin_project_id}/os-quota-sets/{project_id}',
]
CINDER_QUOTA_CLASS_PATHS = [
'/{version}/{admin_project_id}/os-quota-class-sets/{quota_class_name}',
]
CINDER_PATH_MAP = {
consts.RESOURCE_TYPE_VOLUME_QUOTA_SET: {
QUOTA_RESOURCE_TAG: CINDER_QUOTA_PATHS,
},
consts.RESOURCE_TYPE_VOLUME_QUOTA_CLASS_SET: {
QUOTA_CLASS_RESOURCE_TAG: CINDER_QUOTA_CLASS_PATHS
},
}
# Neutron
NEUTRON_SECURITY_GROUPS_PATHS = [
'/v2.0/security-groups',
'/v2.0/security-groups/{security_group_id}',
]
NEUTRON_SECURITY_GROUP_RULES_PATHS = [
'/v2.0/security-group-rules',
'/v2.0/security-group-rules/{security_group_rule_id}',
]
NEUTRON_QOS_PATHS = [
'/v2.0/qos/policies',
'/v2.0/wrs-tm/qoses',
'/v2.0/qos/policies/{policy_id}',
'/v2.0/wrs-tm/qoses/{policy_id}',
]
NEUTRON_BANDWIDTH_LIMIT_RULES_PATHS = [
'/v2.0/qos/policies/{policy_id}/bandwidth_limit_rules',
]
NEUTRON_DSCP_MARKING_RULES_PATHS = [
'/v2.0/qos/policies/{policy_id}/dscp_marking_rules',
]
NEUTRON_MINIMUM_BANDWIDTH_RULES_PATHS = [
'/v2.0/qos/policies/{policy_id}/minimum_bandwidth_rules',
'/v2.0/qos/policies/{policy_id}/minimum_bandwidth_rules/{rule_id}',
]
NEUTRON_QUOTA_PATHS = [
'/v2.0/quotas/{project_id}',
]
NEUTRON_QUOTA_DETAIL_PATHS = [
'/v2.0/quotas/{project_id}/details.json',
]
NEUTRON_PATH_MAP = {
consts.RESOURCE_TYPE_NETWORK_SECURITY_GROUP:
NEUTRON_SECURITY_GROUPS_PATHS,
consts.RESOURCE_TYPE_NETWORK_SECURITY_GROUP_RULE:
NEUTRON_SECURITY_GROUP_RULES_PATHS,
consts.RESOURCE_TYPE_NETWORK_QUOTA_SET:
NEUTRON_QUOTA_PATHS,
consts.RESOURCE_TYPE_QOS_POLICY:
NEUTRON_QOS_PATHS,
}
# Software
SOFTWARE_ACTION_QUERY = 'query'
SOFTWARE_ACTION_QUERY_DEPENDENCIES = 'query_dependencies'
SOFTWARE_ACTION_COMMIT_PATCH = 'commit-patch'
SOFTWARE_ACTION_SHOW = 'show'
SOFTWARE_QUERY_PATHS = [
'/v1/query',
'/v1/software/query',
]
SOFTWARE_SHOW_PATHS = [
'/v1/show/{release_id}',
'/v1/software/show/{release_id:.*?}',
]
SOFTWARE_COMMIT_PATCH_PATHS = [
'/v1/software/commit_dry_run/{release_id:.*?}',
'/v1/software/commit_patch/{release_id:.*?}',
]
SOFTWARE_QUERY_DEPENDENCIES_PATHS = [
'/v1/software/query_dependencies/{release_id:.*?}',
]
SOFTWARE_PATH_MAP = {
SOFTWARE_ACTION_QUERY: SOFTWARE_QUERY_PATHS,
SOFTWARE_ACTION_SHOW: SOFTWARE_SHOW_PATHS,
SOFTWARE_ACTION_COMMIT_PATCH: SOFTWARE_COMMIT_PATCH_PATHS,
SOFTWARE_ACTION_QUERY_DEPENDENCIES: SOFTWARE_QUERY_DEPENDENCIES_PATHS
}
# Patching
# allow version request
PATCH_ACTION_GET_VERSION = 'version'
PATCH_ACTION_UPLOAD = 'upload'
PATCH_ACTION_UPLOAD_DIR = 'upload_dir'
PATCH_ACTION_APPLY = 'apply'
PATCH_ACTION_REMOVE = 'remove'
PATCH_ACTION_DELETE = 'delete'
PATCH_ACTION_QUERY = 'query'
PATCH_ACTION_SHOW = 'show'
PATCH_ACTION_COMMIT = 'commit'
PATCH_ACTION_WHAT_REQS = 'what_requires'
PATCH_ACTION_QUERY_DEPS = 'query_dependencies'
PATCH_API_VERSION = ['/']
PATCH_UPLOAD_PATHS = [
'/v1/upload',
'/patch/upload',
]
# upload_dir is not supported for REST API access
PATCH_UPLOAD_DIR_PATHS = [
'/patch/upload_dir'
]
PATCH_APPLY_PATHS = [
'/v1/apply/{patch_id}',
'/patch/apply/{patch_id:.*?}',
]
PATCH_REMOVE_PATHS = [
'/v1/remove/{patch_id}',
'/patch/remove/{patch_id:.*?}',
]
PATCH_DELETE_PATHS = [
'/v1/delete/{patch_id}',
'/patch/delete/{patch_id:.*?}',
]
PATCH_QUERY_PATHS = [
'/v1/query',
'/patch/query',
]
PATCH_SHOW_PATHS = [
'/v1/show/{patch_id}',
'/patch/show/{patch_id:.*?}',
]
PATCH_COMMIT_PATHS = [
'/patch/commit_dry_run/{patch_id:.*?}',
'/patch/commit/{patch_id:.*?}',
]
PATCH_WHAT_REQS_PATHS = [
'/patch/what_requires/{patch_id:.*?}'
]
PATCH_QUERY_DEPS_PATHS = [
'/patch/query_dependencies/{patch_id:.*?}'
]
PATCH_PATH_MAP = {
PATCH_ACTION_GET_VERSION: PATCH_API_VERSION,
PATCH_ACTION_UPLOAD: PATCH_UPLOAD_PATHS,
PATCH_ACTION_UPLOAD_DIR: PATCH_UPLOAD_DIR_PATHS,
PATCH_ACTION_APPLY: PATCH_APPLY_PATHS,
PATCH_ACTION_REMOVE: PATCH_REMOVE_PATHS,
PATCH_ACTION_DELETE: PATCH_DELETE_PATHS,
PATCH_ACTION_QUERY: PATCH_QUERY_PATHS,
PATCH_ACTION_SHOW: PATCH_SHOW_PATHS,
PATCH_ACTION_COMMIT: PATCH_COMMIT_PATHS,
PATCH_ACTION_WHAT_REQS: PATCH_WHAT_REQS_PATHS,
PATCH_ACTION_QUERY_DEPS: PATCH_QUERY_DEPS_PATHS,
}
# Identity
IDENTITY_USERS_PATH = [
'/v3/users',
'/v3/users/{user_id}',
]
IDENTITY_USERS_PW_PATH = [
'/v3/users/{user_id}/password',
]
IDENTITY_USER_GROUPS_PATH = [
'/v3/groups',
'/v3/groups/{group_id}',
'/v3/groups/{group_id}/users/{user_id}',
]
IDENTITY_ROLES_PATH = [
'/v3/roles',
'/v3/roles/{role_id}',
]
IDENTITY_PROJECTS_PATH = [
'/v3/projects',
'/v3/projects/{project_id}',
]
IDENTITY_PROJECTS_ROLE_PATH = [
'/v3/projects/{project_id}/users/{user_id}/roles/{role_id}',
'/v3/projects/{project_id}/groups/{group_id}/roles/{role_id}',
]
IDENTITY_TOKEN_REVOKE_EVENTS_PATH = [
'/v3/auth/tokens',
]
IDENTITY_PATH_MAP = {
consts.RESOURCE_TYPE_IDENTITY_USERS: IDENTITY_USERS_PATH,
consts.RESOURCE_TYPE_IDENTITY_USERS_PASSWORD: IDENTITY_USERS_PW_PATH,
consts.RESOURCE_TYPE_IDENTITY_GROUPS: IDENTITY_USER_GROUPS_PATH,
consts.RESOURCE_TYPE_IDENTITY_ROLES: IDENTITY_ROLES_PATH,
consts.RESOURCE_TYPE_IDENTITY_PROJECTS: IDENTITY_PROJECTS_PATH,
consts.RESOURCE_TYPE_IDENTITY_PROJECT_ROLE_ASSIGNMENTS:
IDENTITY_PROJECTS_ROLE_PATH,
consts.RESOURCE_TYPE_IDENTITY_TOKEN_REVOKE_EVENTS:
IDENTITY_TOKEN_REVOKE_EVENTS_PATH,
}
ROUTE_METHOD_MAP = {
consts.ENDPOINT_TYPE_COMPUTE: {
FLAVOR_RESOURCE_TAG: ['POST', 'DELETE'],
FLAVOR_ACCESS_RESOURCE_TAG: ['POST'],
FLAVOR_EXTRA_SPECS_RESOURCE_TAG: ['POST', 'PUT', 'DELETE'],
KEYPAIRS_RESOURCE_TAG: ['POST', 'DELETE'],
QUOTA_RESOURCE_TAG: ['PUT', 'DELETE', 'GET'],
QUOTA_CLASS_RESOURCE_TAG: ['PUT'],
},
consts.ENDPOINT_TYPE_VOLUME: {
QUOTA_RESOURCE_TAG: ['PUT', 'DELETE', 'GET'],
QUOTA_CLASS_RESOURCE_TAG: ['PUT'],
},
dccommon_consts.ENDPOINT_TYPE_PLATFORM: {
consts.RESOURCE_TYPE_SYSINV_CERTIFICATE: ['POST', 'DELETE'],
consts.RESOURCE_TYPE_SYSINV_USER: ['PATCH', 'PUT'],
consts.RESOURCE_TYPE_SYSINV_LOAD: ['POST', 'DELETE'],
consts.RESOURCE_TYPE_SYSINV_DEVICE_IMAGE: ['POST', 'PATCH', 'DELETE'],
},
consts.ENDPOINT_TYPE_NETWORK: {
consts.RESOURCE_TYPE_NETWORK_SECURITY_GROUP: ['POST', 'PUT', 'DELETE'],
consts.RESOURCE_TYPE_NETWORK_SECURITY_GROUP_RULE: ['POST', 'DELETE'],
consts.RESOURCE_TYPE_NETWORK_QUOTA_SET: ['PUT', 'DELETE'],
consts.RESOURCE_TYPE_QOS_POLICY: ['POST', 'PUT', 'DELETE'],
},
dccommon_consts.ENDPOINT_TYPE_PATCHING: {
PATCH_ACTION_GET_VERSION: ['GET'],
PATCH_ACTION_UPLOAD: ['POST'],
PATCH_ACTION_UPLOAD_DIR: ['POST'],
PATCH_ACTION_APPLY: ['POST'],
PATCH_ACTION_REMOVE: ['POST'],
PATCH_ACTION_DELETE: ['POST'],
PATCH_ACTION_QUERY: ['GET'],
PATCH_ACTION_SHOW: ['POST', 'GET'],
PATCH_ACTION_COMMIT: ['POST'],
PATCH_ACTION_WHAT_REQS: ['GET'],
PATCH_ACTION_QUERY_DEPS: ['GET'],
SOFTWARE_ACTION_QUERY: ['GET'],
SOFTWARE_ACTION_SHOW: ['GET'],
SOFTWARE_ACTION_QUERY_DEPENDENCIES: ['GET'],
SOFTWARE_ACTION_COMMIT_PATCH: ['POST'],
},
dccommon_consts.ENDPOINT_TYPE_IDENTITY: {
consts.RESOURCE_TYPE_IDENTITY_USERS:
['POST', 'PATCH', 'DELETE'],
consts.RESOURCE_TYPE_IDENTITY_GROUPS:
['POST', 'PUT', 'PATCH', 'DELETE'],
consts.RESOURCE_TYPE_IDENTITY_USERS_PASSWORD:
['POST'],
consts.RESOURCE_TYPE_IDENTITY_ROLES:
['POST', 'PATCH', 'DELETE'],
consts.RESOURCE_TYPE_IDENTITY_PROJECTS:
['POST', 'PATCH', 'DELETE'],
consts.RESOURCE_TYPE_IDENTITY_PROJECT_ROLE_ASSIGNMENTS:
['PUT', 'DELETE'],
consts.RESOURCE_TYPE_IDENTITY_TOKEN_REVOKE_EVENTS:
['DELETE']
}
}
LOAD_VAULT_DIR = '/opt/dc-vault/loads'
LOAD_VAULT_TMP_DIR = '/opt/dc-vault/loads/load_tmpdir'
ENDPOINT_TYPE_PATCHING_TMPDIR = "/scratch/patch-api-proxy-tmpdir"
ENDPOINT_TYPE_PLATFORM_TMPDIR = "/scratch/platform-api-proxy-tmpdir"