
This commit removes legacy load and upgrade functionality that's being replaced by USM. It also modifies the prestage systemcontroller upgrade check to block prestage if there's a software deployment in-progress. This commit also removes the check that prevents prestaging if any uploaded release is not 'deployed'. The prestaging playbook is already responsible for this logic. Test Plan: 1. PASS - Run subcloud prestaging and verify that it completes successfully; 2. PASS - Start the deployment of a software release and attempt to prestage a subcloud, verify that it fails due to the ongoing deployment; 3. PASS - On a 24.09 system controller, upload a 24.09.01 patch and attempt to prestage a subcloud for software deploy using the parameter --release 24.09 and verify that the prestage operation is allowed even if the 24.09.01 release is in the 'available' state; 4. PASS - Upload a device image using the "system --os-region-name SystemController device-image-upload" command and verify that the image is uploaded to the "/opt/dc-vault/device_images" directory. 5. PASS - Remove the device image and verify that it gets removed from the "/opt/dc-vault/device_images" directory. Story: 2010676 Task: 50921 Change-Id: I5155b12995d60969cfa2b8d4624c4d8a82b7dfd2 Signed-off-by: Gustavo Herzmann <gustavo.herzmann@windriver.com>
369 lines
11 KiB
Python
369 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}"]
|
|
|
|
RELEASE_PATHS = ["//v1/release", "//v1/release/{rel_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_DEVICE_IMAGE: DEVICE_IMAGE_PATHS,
|
|
}
|
|
|
|
USM_PATH_MAP = {
|
|
consts.RESOURCE_TYPE_USM_RELEASE: RELEASE_PATHS,
|
|
}
|
|
|
|
LOAD_FILES_STAGING_DIR = "/scratch/tmp_load"
|
|
|
|
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_SEC_GROUPS_PATHS = [
|
|
"/v2.0/security-groups",
|
|
"/v2.0/security-groups/{security_group_id}",
|
|
]
|
|
|
|
NEUTRON_SEC_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_SEC_GROUPS_PATHS,
|
|
consts.RESOURCE_TYPE_NETWORK_SECURITY_GROUP_RULE: NEUTRON_SEC_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_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_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_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"],
|
|
},
|
|
dccommon_consts.ENDPOINT_TYPE_SOFTWARE: {
|
|
consts.RESOURCE_TYPE_USM_RELEASE: ["PUT", "POST", "DELETE"],
|
|
},
|
|
}
|
|
|
|
ENDPOINT_TYPE_PLATFORM_TMPDIR = "/scratch/platform-api-proxy-tmpdir"
|
|
ENDPOINT_TYPE_USM_TMPDIR = "/scratch/software-upload-tmpdir"
|