Add api to convert os metadata to ui os metadata
Change-Id: Iad5938a5e34a44506c82afb6cf5f8bea0610105e
This commit is contained in:
parent
7fa34625ed
commit
8c68fb6f4c
@ -1334,6 +1334,26 @@ def show_os_metadata(os_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/oses/<int:os_id>/ui_metadata", methods=['GET'])
|
||||||
|
@log_user_action
|
||||||
|
@login_required
|
||||||
|
@update_user_token
|
||||||
|
def convert_os_metadata(os_id):
|
||||||
|
"""Convert os metadata to ui os metadata."""
|
||||||
|
metadatas = metadata_api.get_os_metadata(
|
||||||
|
os_id, user=current_user
|
||||||
|
)
|
||||||
|
configs = util.load_configs(setting.OS_MAPPING_DIR)
|
||||||
|
metadata = metadatas['os_config']
|
||||||
|
config = configs[0]['OS_CONFIG_MAPPING']
|
||||||
|
return utils.make_json_response(
|
||||||
|
200,
|
||||||
|
metadata_api.get_ui_metadata(
|
||||||
|
metadata, config
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.route(
|
@app.route(
|
||||||
"/adapters/<int:adapter_id>/oses/<int:os_id>/metadata",
|
"/adapters/<int:adapter_id>/oses/<int:os_id>/metadata",
|
||||||
methods=['GET']
|
methods=['GET']
|
||||||
|
@ -21,6 +21,8 @@ from compass.db.api import permission
|
|||||||
from compass.db.api import user as user_api
|
from compass.db.api import user as user_api
|
||||||
from compass.db.api import utils
|
from compass.db.api import utils
|
||||||
from compass.db import exception
|
from compass.db import exception
|
||||||
|
from compass.utils import setting_wrapper as setting
|
||||||
|
from compass.utils import util
|
||||||
|
|
||||||
|
|
||||||
RESP_METADATA_FIELDS = [
|
RESP_METADATA_FIELDS = [
|
||||||
@ -133,7 +135,7 @@ def get_package_metadata_internal(session, adapter_id):
|
|||||||
permission.PERMISSION_LIST_METADATAS
|
permission.PERMISSION_LIST_METADATAS
|
||||||
)
|
)
|
||||||
@utils.wrap_to_dict(RESP_METADATA_FIELDS)
|
@utils.wrap_to_dict(RESP_METADATA_FIELDS)
|
||||||
def get_package_metadata(getter, adapter_id, session=None, **kwargs):
|
def get_package_metadata(adapter_id, user=None, session=None, **kwargs):
|
||||||
return {
|
return {
|
||||||
'package_config': get_package_metadata_internal(session, adapter_id)
|
'package_config': get_package_metadata_internal(session, adapter_id)
|
||||||
}
|
}
|
||||||
@ -158,18 +160,65 @@ def get_os_metadata_internal(session, os_id):
|
|||||||
permission.PERMISSION_LIST_METADATAS
|
permission.PERMISSION_LIST_METADATAS
|
||||||
)
|
)
|
||||||
@utils.wrap_to_dict(RESP_METADATA_FIELDS)
|
@utils.wrap_to_dict(RESP_METADATA_FIELDS)
|
||||||
def get_os_metadata(getter, os_id, session=None, **kwargs):
|
def get_os_metadata(os_id, user=None, session=None, **kwargs):
|
||||||
"""get os metadatas."""
|
"""get os metadatas."""
|
||||||
return {'os_config': get_os_metadata_internal(session, os_id)}
|
return {'os_config': get_os_metadata_internal(session, os_id)}
|
||||||
|
|
||||||
|
|
||||||
|
def get_ui_metadata(metadata, config):
|
||||||
|
"""convert os_metadata to ui os_metadata."""
|
||||||
|
result_config = {}
|
||||||
|
result_config[config['mapped_name']] = []
|
||||||
|
for mapped_child in config['mapped_children']:
|
||||||
|
data_dict = {}
|
||||||
|
for config_key, config_value in mapped_child.items():
|
||||||
|
for key, value in config_value.items():
|
||||||
|
if 'data' == key:
|
||||||
|
result_data = []
|
||||||
|
_get_data(metadata[config_key], value, result_data)
|
||||||
|
data_dict['data'] = result_data
|
||||||
|
else:
|
||||||
|
data_dict[key] = value
|
||||||
|
result_config[config['mapped_name']].append(data_dict)
|
||||||
|
return result_config
|
||||||
|
|
||||||
|
|
||||||
|
def _get_data(metadata, config, result_data):
|
||||||
|
data_dict = {}
|
||||||
|
for key, config_value in config.items():
|
||||||
|
if isinstance(config_value, dict):
|
||||||
|
if key in metadata.keys():
|
||||||
|
_get_data(metadata[key], config_value, result_data)
|
||||||
|
else:
|
||||||
|
_get_data(metadata, config_value, result_data)
|
||||||
|
elif isinstance(config_value, list):
|
||||||
|
option_list = []
|
||||||
|
for item in config_value:
|
||||||
|
if isinstance(item, dict):
|
||||||
|
option_list.append(item)
|
||||||
|
data_dict[key] = option_list
|
||||||
|
else:
|
||||||
|
if isinstance(metadata['_self'][item], bool):
|
||||||
|
data_dict[item] = str(metadata['_self'][item])
|
||||||
|
else:
|
||||||
|
data_dict[item] = metadata['_self'][item]
|
||||||
|
else:
|
||||||
|
data_dict[key] = config_value
|
||||||
|
if data_dict:
|
||||||
|
result_data.append(data_dict)
|
||||||
|
return result_data
|
||||||
|
|
||||||
|
|
||||||
@utils.supported_filters([])
|
@utils.supported_filters([])
|
||||||
@database.run_in_session()
|
@database.run_in_session()
|
||||||
@user_api.check_user_permission_in_session(
|
@user_api.check_user_permission_in_session(
|
||||||
permission.PERMISSION_LIST_METADATAS
|
permission.PERMISSION_LIST_METADATAS
|
||||||
)
|
)
|
||||||
@utils.wrap_to_dict(RESP_METADATA_FIELDS)
|
@utils.wrap_to_dict(RESP_METADATA_FIELDS)
|
||||||
def get_package_os_metadata(getter, adapter_id, os_id, session=None, **kwargs):
|
def get_package_os_metadata(
|
||||||
|
adapter_id, os_id,
|
||||||
|
user=None, session=None, **kwargs
|
||||||
|
):
|
||||||
from compass.db.api import adapter_holder as adapter_api
|
from compass.db.api import adapter_holder as adapter_api
|
||||||
adapter = adapter_api.get_adapter_internal(session, adapter_id)
|
adapter = adapter_api.get_adapter_internal(session, adapter_id)
|
||||||
os_ids = [os['os_id'] for os in adapter['supported_oses']]
|
os_ids = [os['os_id'] for os in adapter['supported_oses']]
|
||||||
|
@ -322,7 +322,7 @@ class FieldMixin(HelperMixin):
|
|||||||
Enum(
|
Enum(
|
||||||
'checkbox', 'radio', 'select',
|
'checkbox', 'radio', 'select',
|
||||||
'multiselect', 'combobox', 'text',
|
'multiselect', 'combobox', 'text',
|
||||||
'multitext', 'password'
|
'multitext', 'password', 'dropdown'
|
||||||
),
|
),
|
||||||
ColumnDefault('text')
|
ColumnDefault('text')
|
||||||
)
|
)
|
||||||
|
2
compass/tests/api/data/os_field/domain.conf
Normal file
2
compass/tests/api/data/os_field/domain.conf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
NAME = 'domain'
|
||||||
|
VALIDATOR = is_valid_domain
|
@ -1 +1,2 @@
|
|||||||
NAME = 'general'
|
NAME = 'general'
|
||||||
|
DISPLAY_TYPE = 'dropdown'
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
NAME = 'general_list'
|
NAME = 'general_list'
|
||||||
FIELD_TYPE = list
|
FIELD_TYPE = list
|
||||||
|
DISPLAY_TYPE = 'multitext'
|
||||||
|
4
compass/tests/api/data/os_field/ip_list.conf
Normal file
4
compass/tests/api/data/os_field/ip_list.conf
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
NAME = 'ip_list'
|
||||||
|
FIELD_TYPE = list
|
||||||
|
VALIDATOR = is_valid_ip
|
||||||
|
DISPLAY_TYPE = 'multitext'
|
@ -1,3 +1,4 @@
|
|||||||
NAME = 'password'
|
NAME = 'password'
|
||||||
VALIDATOR = is_valid_password
|
VALIDATOR = is_valid_password
|
||||||
DESCRIPTION = 'password'
|
DESCRIPTION = 'password'
|
||||||
|
DISPLAY_TYPE = 'password'
|
||||||
|
2
compass/tests/api/data/os_field/url.conf
Normal file
2
compass/tests/api/data/os_field/url.conf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
NAME = 'url'
|
||||||
|
VALIDATOR = is_valid_url
|
129
compass/tests/api/data/os_mapping/os_mapping.conf
Normal file
129
compass/tests/api/data/os_mapping/os_mapping.conf
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
OS_CONFIG_MAPPING = {
|
||||||
|
"mapped_name": "os_global_config",
|
||||||
|
"mapped_children": [{
|
||||||
|
"server_credentials":{
|
||||||
|
"name": "sever_credentials",
|
||||||
|
"title": "Server Credentials",
|
||||||
|
"data": {
|
||||||
|
"username": {
|
||||||
|
"placeholder": "Username",
|
||||||
|
"display_name": "User name",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"placeholder": "Password",
|
||||||
|
"display_name": "Password",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"confirm_password": {
|
||||||
|
"placeholder": "Confirm Password",
|
||||||
|
"name": "confirmPassword",
|
||||||
|
"placeholder": "Confirm Password",
|
||||||
|
"display_type": "password",
|
||||||
|
"required": "true",
|
||||||
|
"default_value": "huawei"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"general": {
|
||||||
|
"name": "general",
|
||||||
|
"title": "",
|
||||||
|
"data": {
|
||||||
|
"language": {
|
||||||
|
"display_name": "Language",
|
||||||
|
"option": [{
|
||||||
|
"name": "English",
|
||||||
|
"value": "en"
|
||||||
|
},{
|
||||||
|
"name": "Chinese",
|
||||||
|
"value": "cn"
|
||||||
|
}],
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"timezone": {
|
||||||
|
"display_name": "Timezone",
|
||||||
|
"option": [{
|
||||||
|
"name": "Los Angeles",
|
||||||
|
"value": "Los Angeles"
|
||||||
|
},{
|
||||||
|
"name": "Chicago",
|
||||||
|
"value": "Chicago"
|
||||||
|
}],
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"http_proxy": {
|
||||||
|
"placeholder": "HTTP Proxy",
|
||||||
|
"display_name": "HTTP Proxy",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"https_proxy": {
|
||||||
|
"placeholder": "HTTPS Proxy",
|
||||||
|
"display_name": "HTTPS Proxy",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"no_proxy": {
|
||||||
|
"placeholder": "No Proxy",
|
||||||
|
"display_name": "No Proxy",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ntp_server": {
|
||||||
|
"placeholder": "NTP Server",
|
||||||
|
"display_name": "NTP Server",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dns_server": {
|
||||||
|
"placeholder": "DNS Server",
|
||||||
|
"display_name": "DNS Server",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"search_path": {
|
||||||
|
"placeholder": "Search Path",
|
||||||
|
"display_name": "DNS Servers",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"domain": {
|
||||||
|
"placeholder": "Domain",
|
||||||
|
"display_name": "Domain",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_gateway": {
|
||||||
|
"placeholder": "Gateway",
|
||||||
|
"display_name": "Default Gateway",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"local_repo": {
|
||||||
|
"placeholder": "Local Repo",
|
||||||
|
"display_name": "Local Repository",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
@ -1004,6 +1004,22 @@ class TestSwitchMachines(ApiTestCase):
|
|||||||
self.assertEqual(return_value.status_code, 200)
|
self.assertEqual(return_value.status_code, 200)
|
||||||
|
|
||||||
|
|
||||||
|
class TestMetadataAPI(ApiTestCase):
|
||||||
|
"""Test metadata api."""
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestMetadataAPI, self).setUp()
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
super(TestMetadataAPI, self).tearDown()
|
||||||
|
|
||||||
|
def test_get_os_ui_metadata(self):
|
||||||
|
url = '/oses/1/ui_metadata'
|
||||||
|
return_value = self.get(url)
|
||||||
|
self.assertEqual(return_value.status_code, 200)
|
||||||
|
self.assertIn('os_global_config', return_value.get_data())
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
flags.init()
|
flags.init()
|
||||||
logsetting.init()
|
logsetting.init()
|
||||||
|
2
compass/tests/db/api/data/os_field/domain.conf
Normal file
2
compass/tests/db/api/data/os_field/domain.conf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
NAME = 'domain'
|
||||||
|
VALIDATOR = is_valid_domain
|
@ -1 +1,2 @@
|
|||||||
NAME = 'general'
|
NAME = 'general'
|
||||||
|
DISPLAY_TYPE = 'dropdown'
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
NAME = 'general_list'
|
NAME = 'general_list'
|
||||||
FIELD_TYPE = list
|
FIELD_TYPE = list
|
||||||
|
DISPLAY_TYPE = 'multitext'
|
||||||
|
4
compass/tests/db/api/data/os_field/ip_list.conf
Normal file
4
compass/tests/db/api/data/os_field/ip_list.conf
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
NAME = 'ip_list'
|
||||||
|
FIELD_TYPE = list
|
||||||
|
VALIDATOR = is_valid_ip
|
||||||
|
DISPLAY_TYPE = 'multitext'
|
@ -1,3 +1,4 @@
|
|||||||
NAME = 'password'
|
NAME = 'password'
|
||||||
VALIDATOR = is_valid_password
|
VALIDATOR = is_valid_password
|
||||||
DESCRIPTION = 'password'
|
DESCRIPTION = 'password'
|
||||||
|
DISPLAY_TYPE = 'password'
|
||||||
|
2
compass/tests/db/api/data/os_field/url.conf
Normal file
2
compass/tests/db/api/data/os_field/url.conf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
NAME = 'url'
|
||||||
|
VALIDATOR = is_valid_url
|
119
compass/tests/db/api/data/os_mapping/os_mapping.conf
Normal file
119
compass/tests/db/api/data/os_mapping/os_mapping.conf
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
OS_CONFIG_MAPPING = {
|
||||||
|
"mapped_name": "os_global_config",
|
||||||
|
"mapped_children": [{
|
||||||
|
"server_credentials":{
|
||||||
|
"name": "sever_credentials",
|
||||||
|
"title": "Server Credentials",
|
||||||
|
"data": {
|
||||||
|
"username": {
|
||||||
|
"placeholder": "Username",
|
||||||
|
"display_name": "User name",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"placeholder": "Password",
|
||||||
|
"display_name": "Password",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"confirm_password": {
|
||||||
|
"placeholder": "Confirm Password",
|
||||||
|
"name": "confirmPassword",
|
||||||
|
"placeholder": "Confirm Password",
|
||||||
|
"display_type": "password",
|
||||||
|
"required": "true",
|
||||||
|
"default_value": "huawei"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"general": {
|
||||||
|
"name": "general",
|
||||||
|
"title": "",
|
||||||
|
"data": {
|
||||||
|
"language": {
|
||||||
|
"display_name": "Language",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value", "options"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"timezone": {
|
||||||
|
"display_name": "Timezone",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value", "options"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"http_proxy": {
|
||||||
|
"placeholder": "HTTP Proxy",
|
||||||
|
"display_name": "HTTP Proxy",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"https_proxy": {
|
||||||
|
"placeholder": "HTTPS Proxy",
|
||||||
|
"display_name": "HTTPS Proxy",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"no_proxy": {
|
||||||
|
"placeholder": "No Proxy",
|
||||||
|
"display_name": "No Proxy",
|
||||||
|
"validation": "maxLength",
|
||||||
|
"validationResponse":[],
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ntp_server": {
|
||||||
|
"placeholder": "NTP Server",
|
||||||
|
"display_name": "NTP Server",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dns_server": {
|
||||||
|
"placeholder": "DNS Server",
|
||||||
|
"display_name": "DNS Server",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"search_path": {
|
||||||
|
"placeholder": "Search Path",
|
||||||
|
"display_name": "DNS Servers",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"domain": {
|
||||||
|
"placeholder": "Domain",
|
||||||
|
"display_name": "Domain",
|
||||||
|
"validation":"isNumber",
|
||||||
|
"validationResponse":{},
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_gateway": {
|
||||||
|
"placeholder": "Gateway",
|
||||||
|
"display_name": "Default Gateway",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"local_repo": {
|
||||||
|
"placeholder": "Local Repo",
|
||||||
|
"display_name": "Local Repository",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
@ -29,77 +29,60 @@ METADATA = {
|
|||||||
},
|
},
|
||||||
'http_proxy': {
|
'http_proxy': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general',
|
'field': 'url',
|
||||||
'default_value': 'http://127.0.0.1:3128',
|
'default_callback': default_proxy,
|
||||||
'options': [
|
'options_callback': proxy_options,
|
||||||
'http://127.0.0.1:3128'
|
|
||||||
],
|
|
||||||
'mapping_to': 'http_proxy'
|
'mapping_to': 'http_proxy'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'https_proxy': {
|
'https_proxy': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general',
|
'field': 'url',
|
||||||
'default_value': 'http://127.0.0.1:3128',
|
'default_callback': default_proxy,
|
||||||
'options': [
|
'options_callback': proxy_options,
|
||||||
'http://127.0.0.1:3128'
|
|
||||||
],
|
|
||||||
'mapping_to': 'https_proxy'
|
'mapping_to': 'https_proxy'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'no_proxy': {
|
'no_proxy': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general_list',
|
'field': 'general_list',
|
||||||
'default_value': [
|
'default_callback': default_noproxy,
|
||||||
'127.0.0.1',
|
'options_callback': noproxy_options,
|
||||||
'compass'
|
'autofill_callback': autofill_no_proxy,
|
||||||
],
|
|
||||||
'options': [
|
|
||||||
'127.0.0.1',
|
|
||||||
'compass'
|
|
||||||
],
|
|
||||||
'mapping_to': 'no_proxy'
|
'mapping_to': 'no_proxy'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'ntp_server': {
|
'ntp_server': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'is_required': True,
|
'is_required': True,
|
||||||
'field': 'general',
|
'field': 'ip',
|
||||||
'default_value': '127.0.0.1',
|
'default_callback': default_ntp_server,
|
||||||
'options': [
|
'options_callback': ntp_server_options,
|
||||||
'127.0.0.1'
|
|
||||||
],
|
|
||||||
'mapping_to': 'ntp_server'
|
'mapping_to': 'ntp_server'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'dns_servers': {
|
'dns_servers': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'is_required': True,
|
'is_required': True,
|
||||||
'field': 'general_list',
|
'field': 'ip_list',
|
||||||
'default_value': [
|
'default_callback': default_dns_servers,
|
||||||
'127.0.0.1',
|
'options_callback': dns_servers_options,
|
||||||
],
|
|
||||||
'options': [
|
|
||||||
'127.0.0.1'
|
|
||||||
],
|
|
||||||
'mapping_to': 'nameservers'
|
'mapping_to': 'nameservers'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'domain': {
|
'domain': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general',
|
'field': 'domain',
|
||||||
'is_required' : True,
|
'is_required' : True,
|
||||||
'default_value': 'ods.com',
|
'default_callback': default_domain,
|
||||||
'options': ['ods.com'],
|
'options_callback': domain_options,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'search_path': {
|
'search_path': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'field': 'general_list',
|
'field': 'general_list',
|
||||||
'default_value': [
|
'default_callback': default_search_path,
|
||||||
'ods.com'
|
'options_callback': search_path_options,
|
||||||
],
|
|
||||||
'options': ['ods.com'],
|
|
||||||
'mapping_to': 'search_path'
|
'mapping_to': 'search_path'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -107,9 +90,16 @@ METADATA = {
|
|||||||
'_self': {
|
'_self': {
|
||||||
'is_required': True,
|
'is_required': True,
|
||||||
'field': 'ip',
|
'field': 'ip',
|
||||||
'default_value': '127.0.0.1',
|
'default_callback': default_gateway,
|
||||||
'mapping_to': 'gateway'
|
'mapping_to': 'gateway'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
'local_repo': {
|
||||||
|
'_self': {
|
||||||
|
'field': 'url',
|
||||||
|
'default_callback': default_localrepo,
|
||||||
|
'mapping_to': 'local_repo'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'server_credentials': {
|
'server_credentials': {
|
||||||
@ -142,7 +132,8 @@ METADATA = {
|
|||||||
},
|
},
|
||||||
'$partition': {
|
'$partition': {
|
||||||
'_self': {
|
'_self': {
|
||||||
'validator': is_valid_partition
|
'validator': is_valid_partition,
|
||||||
|
'mapping_to': '$partition'
|
||||||
},
|
},
|
||||||
'max_size': {
|
'max_size': {
|
||||||
'_self': {
|
'_self': {
|
||||||
|
@ -138,8 +138,8 @@ class TestGetPackageMetadata(MetadataTestCase):
|
|||||||
def test_get_package_metadata(self):
|
def test_get_package_metadata(self):
|
||||||
"""Test get package metadata."""
|
"""Test get package metadata."""
|
||||||
package_metadata = metadata.get_package_metadata(
|
package_metadata = metadata.get_package_metadata(
|
||||||
self.user_object,
|
self.adapter_id,
|
||||||
self.adapter_id
|
user=self.user_object
|
||||||
)
|
)
|
||||||
expected = []
|
expected = []
|
||||||
for k, v in package_metadata['package_config'].iteritems():
|
for k, v in package_metadata['package_config'].iteritems():
|
||||||
@ -152,8 +152,8 @@ class TestGetPackageMetadata(MetadataTestCase):
|
|||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.RecordNotExists,
|
exception.RecordNotExists,
|
||||||
metadata.get_package_metadata,
|
metadata.get_package_metadata,
|
||||||
self.user_object,
|
99,
|
||||||
99
|
user=self.user_object
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -216,8 +216,8 @@ class TestGetOsMetadata(MetadataTestCase):
|
|||||||
def test_get_os_metadata(self):
|
def test_get_os_metadata(self):
|
||||||
"""Test get os metadata."""
|
"""Test get os metadata."""
|
||||||
os_metadata = metadata.get_os_metadata(
|
os_metadata = metadata.get_os_metadata(
|
||||||
self.user_object,
|
self.os_id,
|
||||||
self.os_id
|
user=self.user_object
|
||||||
)
|
)
|
||||||
expected = []
|
expected = []
|
||||||
for k, v in os_metadata['os_config'].iteritems():
|
for k, v in os_metadata['os_config'].iteritems():
|
||||||
@ -230,8 +230,8 @@ class TestGetOsMetadata(MetadataTestCase):
|
|||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.RecordNotExists,
|
exception.RecordNotExists,
|
||||||
metadata.get_os_metadata,
|
metadata.get_os_metadata,
|
||||||
self.user_object,
|
99,
|
||||||
99
|
user=self.user_object
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -245,9 +245,9 @@ class TestGetPackageOsMetadata(MetadataTestCase):
|
|||||||
def test_get_package_os_metadata(self):
|
def test_get_package_os_metadata(self):
|
||||||
"""Test get package and os metadata."""
|
"""Test get package and os metadata."""
|
||||||
package_os_metadata = metadata.get_package_os_metadata(
|
package_os_metadata = metadata.get_package_os_metadata(
|
||||||
self.user_object,
|
|
||||||
self.adapter_id,
|
self.adapter_id,
|
||||||
self.os_id
|
self.os_id,
|
||||||
|
user=self.user_object
|
||||||
)
|
)
|
||||||
self.assertIsNotNone(package_os_metadata)
|
self.assertIsNotNone(package_os_metadata)
|
||||||
|
|
||||||
@ -256,9 +256,9 @@ class TestGetPackageOsMetadata(MetadataTestCase):
|
|||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.InvalidParameter,
|
exception.InvalidParameter,
|
||||||
metadata.get_package_os_metadata,
|
metadata.get_package_os_metadata,
|
||||||
self.user_object,
|
|
||||||
self.adapter_id,
|
self.adapter_id,
|
||||||
99
|
99,
|
||||||
|
user=self.user_object
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -124,6 +124,9 @@ MACHINE_LIST_DIR = lazypy.delay(
|
|||||||
PROGRESS_CALCULATOR_DIR = lazypy.delay(
|
PROGRESS_CALCULATOR_DIR = lazypy.delay(
|
||||||
lambda: os.path.join(CONFIG_DIR, 'progress_calculator')
|
lambda: os.path.join(CONFIG_DIR, 'progress_calculator')
|
||||||
)
|
)
|
||||||
|
OS_MAPPING_DIR = lazypy.delay(
|
||||||
|
lambda: os.path.join(CONFIG_DIR, 'os_mapping')
|
||||||
|
)
|
||||||
PROXY_URL_PREFIX = 'http://10.145.81.205:5000'
|
PROXY_URL_PREFIX = 'http://10.145.81.205:5000'
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
@ -1 +1,2 @@
|
|||||||
NAME = 'general'
|
NAME = 'general'
|
||||||
|
DISPLAY_TYPE = 'dropdown'
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
NAME = 'general_list'
|
NAME = 'general_list'
|
||||||
FIELD_TYPE = list
|
FIELD_TYPE = list
|
||||||
|
DISPLAY_TYPE = 'multitext'
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
NAME = 'ip_list'
|
NAME = 'ip_list'
|
||||||
FIELD_TYPE = list
|
FIELD_TYPE = list
|
||||||
VALIDATOR = is_valid_ip
|
VALIDATOR = is_valid_ip
|
||||||
|
DISPLAY_TYPE = 'multitext'
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
NAME = 'password'
|
NAME = 'password'
|
||||||
VALIDATOR = is_valid_password
|
VALIDATOR = is_valid_password
|
||||||
DESCRIPTION = 'password'
|
DESCRIPTION = 'password'
|
||||||
|
DISPLAY_TYPE = 'password'
|
||||||
|
147
conf/os_mapping/os_mapping.conf
Normal file
147
conf/os_mapping/os_mapping.conf
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
OS_CONFIG_MAPPING = {
|
||||||
|
"mapped_name": "os_global_config",
|
||||||
|
"mapped_children": [{
|
||||||
|
"server_credentials":{
|
||||||
|
"name": "sever_credentials",
|
||||||
|
"title": "Server Credentials",
|
||||||
|
"order": 1,
|
||||||
|
"data": {
|
||||||
|
"username": {
|
||||||
|
"placeholder": "Username",
|
||||||
|
"display_name": "User name",
|
||||||
|
"order": 1,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"placeholder": "Password",
|
||||||
|
"display_name": "Password",
|
||||||
|
"order": 2,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"confirm_password": {
|
||||||
|
"placeholder": "Confirm Password",
|
||||||
|
"name": "confirmPassword",
|
||||||
|
"placeholder": "Confirm Password",
|
||||||
|
"display_type": "password",
|
||||||
|
"is_required": "True",
|
||||||
|
"default_value": "huawei",
|
||||||
|
"order": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
"general": {
|
||||||
|
"name": "general",
|
||||||
|
"title": "",
|
||||||
|
"order": 2,
|
||||||
|
"data": {
|
||||||
|
"language": {
|
||||||
|
"display_name": "Language",
|
||||||
|
"order": 1,
|
||||||
|
"default_value": "en",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
],
|
||||||
|
"options": [{
|
||||||
|
"name": "English",
|
||||||
|
"value": "en"
|
||||||
|
},{
|
||||||
|
"name": "Chinese",
|
||||||
|
"value": "cn"
|
||||||
|
}],
|
||||||
|
},
|
||||||
|
"timezone": {
|
||||||
|
"display_name": "Timezone",
|
||||||
|
"order": 2,
|
||||||
|
"default_value": "Los Angeles",
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
],
|
||||||
|
"options": [{
|
||||||
|
"name": "Los Angeles",
|
||||||
|
"value": "Los Angeles"
|
||||||
|
},{
|
||||||
|
"name": "Chicago",
|
||||||
|
"value": "Chicago"
|
||||||
|
}],
|
||||||
|
},
|
||||||
|
"http_proxy": {
|
||||||
|
"placeholder": "HTTP Proxy",
|
||||||
|
"display_name": "HTTP Proxy",
|
||||||
|
"order": 3,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"https_proxy": {
|
||||||
|
"placeholder": "HTTPS Proxy",
|
||||||
|
"display_name": "HTTPS Proxy",
|
||||||
|
"order": 4,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"no_proxy": {
|
||||||
|
"placeholder": "No Proxy",
|
||||||
|
"display_name": "No Proxy",
|
||||||
|
"order": 5,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ntp_server": {
|
||||||
|
"placeholder": "NTP Server",
|
||||||
|
"display_name": "NTP Server",
|
||||||
|
"order": 6,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dns_servers": {
|
||||||
|
"placeholder": "DNS Server",
|
||||||
|
"display_name": "DNS Server",
|
||||||
|
"order": 7,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"search_path": {
|
||||||
|
"placeholder": "Search Path",
|
||||||
|
"display_name": "Search Path",
|
||||||
|
"order": 8,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"domain": {
|
||||||
|
"placeholder": "Domain",
|
||||||
|
"display_name": "Domain",
|
||||||
|
"order": 9,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default_gateway": {
|
||||||
|
"placeholder": "Gateway",
|
||||||
|
"display_name": "Default Gateway",
|
||||||
|
"order": 10,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type", "default_value"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"local_repo": {
|
||||||
|
"placeholder": "Local Repo",
|
||||||
|
"display_name": "Local Repository",
|
||||||
|
"order": 11,
|
||||||
|
"mapped_key": [
|
||||||
|
"name", "is_required", "display_type"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
amqplib
|
amqplib
|
||||||
argparse
|
argparse
|
||||||
celery
|
celery
|
||||||
Markdown==2.6.1
|
Markdown<2.5
|
||||||
Cheetah<=2.4.1
|
Cheetah<=2.4.1
|
||||||
daemon
|
daemon
|
||||||
Flask
|
Flask
|
||||||
|
Loading…
x
Reference in New Issue
Block a user