diff options
Diffstat (limited to 'compass-tasks/apiclient/example.py')
-rwxr-xr-x | compass-tasks/apiclient/example.py | 463 |
1 files changed, 0 insertions, 463 deletions
diff --git a/compass-tasks/apiclient/example.py b/compass-tasks/apiclient/example.py deleted file mode 100755 index 4c01b98..0000000 --- a/compass-tasks/apiclient/example.py +++ /dev/null @@ -1,463 +0,0 @@ -#!/usr/bin/python -# copyright 2014 Huawei Technologies Co. Ltd -# -# 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. - -"""Example code to deploy a cluster by compass client api.""" -import os -import re -import sys -import time - -# from compass.apiclient.restful import Client -from restful import Client - -COMPASS_SERVER_URL = 'http://localhost/api' -COMPASS_LOGIN_EMAIL = 'admin@huawei.com' -COMPASS_LOGIN_PASSWORD = 'admin' -SWITCH_IP = '172.29.8.40' -SWITCH_SNMP_VERSION = '2c' -SWITCH_SNMP_COMMUNITY = 'public' -CLUSTER_NAME = 'test_cluster' -HOST_NAME_PREFIX = 'host' -SERVICE_USERNAME = 'service' -SERVICE_PASSWORD = 'service' -CONSOLE_USERNAME = 'console' -CONSOLE_PASSWORD = 'console' -HA_VIP = '' - -MANAGEMENT_IP_START = '10.145.88.130' -MANAGEMENT_IP_END = '10.145.88.254' -MANAGEMENT_IP_GATEWAY = '10.145.88.1' -MANAGEMENT_NETMASK = '255.255.255.0' -MANAGEMENT_NIC = 'eth0' -MANAGEMENT_PROMISC = 0 -TENANT_IP_START = '192.168.10.130' -TENANT_IP_END = '192.168.10.255' -TENANT_IP_GATEWAY = '192.168.10.1' -TENANT_NETMASK = '255.255.255.0' -TENANT_NIC = 'eth0' -TENANT_PROMISC = 0 -PUBLIC_IP_START = '12.234.32.130' -PUBLIC_IP_END = '12.234.32.255' -PUBLIC_IP_GATEWAY = '12.234.32.1' -PUBLIC_NETMASK = '255.255.255.0' -PUBLIC_NIC = 'eth1' -PUBLIC_PROMISC = 1 -STORAGE_IP_START = '172.16.100.130' -STORAGE_IP_END = '172.16.100.255' -STORAGE_NETMASK = '255.255.255.0' -STORAGE_IP_GATEWAY = '172.16.100.1' -STORAGE_NIC = 'eth0' -STORAGE_PROMISC = 0 -HOME_PERCENTAGE = 5 -TMP_PERCENTAGE = 5 -VAR_PERCENTAGE = 10 -HOST_OS = 'CentOS-6.5-x86_64' - - -PRESET_VALUES = { - 'LANGUAGE': 'EN', - 'TIMEZONE': 'GMT', - 'HTTPS_PROXY': 'http://10.145.89.100:3128', - 'NO_PROXY': ['127.0.0.1'], - 'DOMAIN': 'ods.com', - 'NAMESERVERS': ['10.145.89.100'], - 'NTP_SERVER': '10.145.89.100', - 'GATEWAY': '10.145.88.1', - 'PROXY': 'http://10.145.89.100:3128', - 'OS_NAME_PATTERN': 'CentOS.*', - 'ADAPTER_NAME': 'openstack_icehouse', - 'FLAVOR_PATTERN': 'allinone.*', - 'ROLES_LIST': ['allinone-compute'], - 'MACHINES_TO_ADD': ['00:0c:29:a7:ea:4b'], - 'BUILD_TIMEOUT': 60, - 'SEARCH_PATH': ['ods.com'], - 'SERVER_USERNAME': 'root', - 'SERVER_PASSWORD': 'root' -} -for v in PRESET_VALUES: - if v in os.environ.keys(): - PRESET_VALUES[v] = os.environ.get(v) - print (v + PRESET_VALUES[v] + " is set by env variables") - else: - print (PRESET_VALUES[v]) - -# instantiate a client -client = Client(COMPASS_SERVER_URL) - -# login -status, response = client.login(COMPASS_LOGIN_EMAIL, COMPASS_LOGIN_PASSWORD) -print '============================================================' -print 'login status: %s response: %s' % (status, response) -if status >= 400: - sys.exit(1) - -# list all switches -status, response = client.list_switches() -print '=============================================================' -print 'get all switches status: %s response: %s' % (status, response) - -# add a switch -status, response = client.add_switch( - SWITCH_IP, - SWITCH_SNMP_VERSION, - SWITCH_SNMP_COMMUNITY -) -print '============================================' -print 'adding a switch..status: %s, response: %s' % (status, response) - -# if switch already exists, get one from all switches -switch = None -if status < 400: - switch = response -else: - status, response = client.list_switches() - print '=========================================' - print 'list switches status %s response %s' % (status, response) - if status >= 400: - sys.exit(1) - for switch_ in response: - if switch_['ip'] == SWITCH_IP: - switch = switch_ - break - -switch_id = switch['id'] -switch_ip = switch['ip'] -print '======================' -print 'switch has been set as %s' % switch_ip - -# wait till switch state becomes under_monitoring -while switch['state'] != 'under_monitoring': - print 'waiting for state to become under_monitoring' - client.poll_switch(switch_id) - status, resp = client.get_switch(switch_id) - print '=====================================' - print 'poll switch status %s response %s' % (status, resp) - switch = resp - print 'switch is in state: %s' % switch['state'] - time.sleep(5) - -print '=========================================' -print 'switch state now is %s' % (switch['state']) - -# create a machine list -machine_macs = {} -machines = {} -for machine in PRESET_VALUES['MACHINES_TO_ADD']: - status, response = client.list_machines(mac=machine) - print '============================================' - print 'list machines status %s response %s' % (status, response) - if status >= 400: - sys.exit(1) - if status == 200 and response != []: - machine_id = response[0]['id'] - machine_macs[machine_id] = response[0]['mac'] - machines = response - -print '=================================' -print 'found machines are : %s' % machines - -machines_to_add = PRESET_VALUES['MACHINES_TO_ADD'] -if set(machine_macs.values()) != set(machines_to_add): - print 'only found macs %s while expected are %s' % ( - machine_macs.values(), machines_to_add) - sys.exit(1) - -# list all adapters -status, response = client.list_adapters() -print '===============================' -print 'all adapters are: %s' % response -if status >= 400: - sys.exit(1) - -adapters = response -adapter_id = None -os_id = None -flavor_id = None -adapter_name = PRESET_VALUES['ADPATER_NAME'] -os_pattern = re.compile(PRESET_VALUES['OS_NAME_PATTERN']) -flavor_pattern = re.compile(PRESET_VALUES['FLAVOR_PATTERN']) -for adapter in adapters: - if adapter_name == adapter['name']: - adapter_id = adapter['id'] - for supported_os in adapter['supported_oses']: - if os_pattern.match(supported_os['name']): - os_id = supported_os['id'] - break - for flavor in adapter['flavors']: - if flavor_pattern.match(flavor['name']): - flavor_id = flavor['id'] - if adapter_id and os_id and flavor_id: - break - -print '=======================================================' -print 'using adapter %s os %s flavor %s to deploy cluster' % ( - adapter_id, os_id, flavor_id -) - -# add a cluster -status, response = client.add_cluster( - CLUSTER_NAME, - adapter_id, - os_id, - flavor_id -) -print '===============================================================' -print 'add cluster %s status %s: %s' % (CLUSTER_NAME, status, response) -if status >= 400: - sys.exit(1) - -status, response = client.list_clusters(name=CLUSTER_NAME) -print '================================================================' -print 'list clusters %s status %s: %s' % (CLUSTER_NAME, status, response) -if status >= 400: - sys.exit(1) - -cluster = response[0] -cluster_id = cluster['id'] - -print '==================' -print 'cluster is %s' % cluster - -# Add hosts to the cluster -machines_dict = {} -machine_id_list = [] -for machine in machines: - id_mapping = {} - id_mapping['machine_id'] = machine['id'] - machine_id_list.append(id_mapping) - -machines_dict['machines'] = machine_id_list - -status, response = client.add_hosts_to_cluster( - cluster_id, machines_dict -) -print '===================================' -print 'add hosts %s to cluster status %s response %s' % ( - machines_dict, status, response) -if status >= 400: - sys.exit(1) - -# Add two subnets -subnet_1 = '10.145.89.0/24' -subnet_2 = '192.168.100.0/24' - -status, response = client.add_subnet(subnet_1) -print '==================' -print 'add subnet %s status %s: %s' % (subnet_1, status, response) -if status >= 400: - sys.exit(1) - -status, response = client.add_subnet(subnet_2) -print '==================' -print 'add subnet %s status %s: %s' % (subnet_2, status, response) -if status >= 400: - sys.exit(1) - -status, subnet1 = client.list_subnets(subnet=subnet_1) -print '===========================================================' -print 'list subnet %s status %s: %s' % (subnet_1, status, subnet1) -if status >= 400: - sys.exit(1) - -status, subnet2 = client.list_subnets(subnet=subnet_2) -print '===========================================================' -print 'list subnet %s status %s: %s' % (subnet_2, status, subnet2) -if status >= 400: - sys.exit(1) - -subnet1_id = subnet1[0]['id'] -subnet2_id = subnet2[0]['id'] -print '========================' -print 'subnet1 has id: %s, subnet is %s' % (subnet1_id, subnet1) -print 'subnet2 has id: %s, subnet is %s' % (subnet2_id, subnet2) - -# Add host network -status, response = client.list_cluster_hosts(cluster_id) -print '================================================' -print 'list cluster hosts status %s: %s' % (status, response) -if status >= 400: - sys.exit(1) - -host = response[0] -host_id = host['id'] -print '==================' -print 'host is: %s' % host - -status, response = client.add_host_network( - host_id, - 'eth0', - '10.145.89.200', - subnet1_id, - is_mgmt=True -) -print '=======================' -print 'add eth0 network status %s: %s' % (status, response) -if status >= 400: - sys.exit(1) - -status, response = client.add_host_network( - host_id, - 'eth1', - '192.168.100.200', - subnet2_id, - is_promiscuous=True -) -print '=======================' -print 'add eth1 network status %s: %s' % (status, response) -if status >= 400: - sys.exit(1) - -# Update os config to cluster -cluster_os_config = { - 'general': { - 'language': PRESET_VALUES['LANGUAGE'], - 'timezone': PRESET_VALUES['TIMEZONE'], - 'http_proxy': PRESET_VALUES['PROXY'], - 'https_proxy': PRESET_VALUES['HTTPS_PROXY'], - 'no_proxy': PRESET_VALUES['NO_PROXY'], - 'ntp_server': PRESET_VALUES['NTP_SERVER'], - 'dns_servers': PRESET_VALUES['NAMESERVERS'], - 'domain': PRESET_VALUES['DOMAIN'], - 'search_path': PRESET_VALUES['SEARCH_PATH'], - 'default_gateway': PRESET_VALUES['GATEWAY'] - }, - 'server_credentials': { - 'username': PRESET_VALUES['SERVER_USERNAME'], - 'password': PRESET_VALUES['SERVER_PASSWORD'] - }, - 'partition': { - '/var': { - 'percentage': VAR_PERCENTAGE, - }, - '/home': { - 'percentage': HOME_PERCENTAGE, - } - } -} - - -cluster_package_config = { - 'security': { - 'service_credentials': { - 'image': { - 'username': SERVICE_USERNAME, - 'password': SERVICE_PASSWORD - }, - 'compute': { - 'username': SERVICE_USERNAME, - 'password': SERVICE_PASSWORD - }, - 'dashboard': { - 'username': SERVICE_USERNAME, - 'password': SERVICE_PASSWORD - }, - 'identity': { - 'username': SERVICE_USERNAME, - 'password': SERVICE_PASSWORD - }, - 'metering': { - 'username': SERVICE_USERNAME, - 'password': SERVICE_PASSWORD - }, - 'rabbitmq': { - 'username': SERVICE_USERNAME, - 'password': SERVICE_PASSWORD - }, - 'volume': { - 'username': SERVICE_USERNAME, - 'password': SERVICE_PASSWORD - }, - 'mysql': { - 'username': SERVICE_USERNAME, - 'password': SERVICE_PASSWORD - } - }, - 'console_credentials': { - 'admin': { - 'username': CONSOLE_USERNAME, - 'password': CONSOLE_PASSWORD - }, - 'compute': { - 'username': CONSOLE_USERNAME, - 'password': CONSOLE_PASSWORD - }, - 'dashboard': { - 'username': CONSOLE_USERNAME, - 'password': CONSOLE_PASSWORD - }, - 'image': { - 'username': CONSOLE_USERNAME, - 'password': CONSOLE_PASSWORD - }, - 'metering': { - 'username': CONSOLE_USERNAME, - 'password': CONSOLE_PASSWORD - }, - 'network': { - 'username': CONSOLE_USERNAME, - 'password': CONSOLE_PASSWORD - }, - 'object-store': { - 'username': CONSOLE_USERNAME, - 'password': CONSOLE_PASSWORD - }, - 'volume': { - 'username': CONSOLE_USERNAME, - 'password': CONSOLE_PASSWORD - } - } - }, - 'network_mapping': { - 'management': MANAGEMENT_NIC, - 'tenant': TENANT_NIC, - 'storage': STORAGE_NIC, - 'public': PUBLIC_NIC - } -} - -status, response = client.update_cluster_config( - cluster_id, - cluster_os_config, - cluster_package_config -) - -print '=======================================' -print 'cluster %s update status %s: %s' % ( - cluster_id, status, response) -if status >= 400: - sys.exit(1) - -status, response = client.update_cluster_host( - cluster_id, host_id, roles=PRESET_VALUES['ROLES_LIST']) -print '=================================================' -print 'update cluster host %s/%s status %s: %s' % ( - cluster_id, host_id, status, response) -if status >= 400: - sys.exit(1) - -# Review and deploy -status, response = client.review_cluster( - cluster_id, review={'hosts': [host_id]}) -print '=======================================' -print 'reviewing cluster status %s: %s' % (status, response) -if status >= 400: - sys.exit(1) - -status, response = client.deploy_cluster( - cluster_id, deploy={'hosts': [host_id]}) -print '=======================================' -print 'deploy cluster status %s: %s' % (status, response) -if status >= 400: - sys.exit(1) |