omni/scripts/create-nova-flavors-gce.py

83 lines
3.1 KiB
Python

"""
Copyright (c) 2017 Platform9 Systems Inc. (http://www.platform9.com)
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.
"""
import os
import sys
from gce import gceutils
from keystoneauth1 import loading
from keystoneauth1 import session
from novaclient import client as nova_client
def get_env_param(env_name):
if env_name in os.environ:
return os.environ[env_name]
raise Exception("%s environment variable not set." % env_name)
def get_keystone_session(
auth_url=get_env_param('OS_AUTH_URL'),
project_name=os.environ.get('OS_PROJECT_NAME'),
tenant_name=os.environ.get('OS_TENANT_NAME'),
project_domain_name=os.environ.get('OS_PROJECT_DOMAIN_NAME',
'default'), # noqa
username=get_env_param('OS_USERNAME'),
user_domain_name=os.environ.get('OS_USER_DOMAIN_NAME', 'default'),
password=get_env_param('OS_PASSWORD')):
if not project_name:
if not tenant_name:
raise Exception("Either OS_PROJECT_NAME or OS_TENANT_NAME is "
"required.")
project_name = tenant_name
loader = loading.get_plugin_loader('password')
auth = loader.load_from_options(
auth_url=auth_url, project_name=project_name,
project_domain_name=project_domain_name, username=username,
user_domain_name=user_domain_name, password=password)
sess = session.Session(auth=auth)
return sess
class GceFlavors(object):
def __init__(self, service_key_path, project, zone):
self.gce_svc = gceutils.get_gce_service(service_key_path)
self.project = project
self.zone = zone
auth_url = get_env_param('OS_AUTH_URL')
if auth_url.find('v2.0') > 0:
auth_url = auth_url.replace('v2.0', 'v3')
self.auth_url = auth_url
self.sess = get_keystone_session(auth_url=self.auth_url)
self.nova_client = nova_client.Client('2', session=self.sess)
def register_gce_flavors(self):
flavors = gceutils.get_machines_info(self.gce_svc, self.project,
self.zone)
for flavor_name, flavor_info in flavors.iteritems():
self.nova_client.flavors.create(
flavor_name, flavor_info['memory_mb'], flavor_info['vcpus'], 0)
print("Registered flavor %s" % flavor_name)
if __name__ == '__main__':
if len(sys.argv) != 4:
print('Usage: {0} <service_key_path> <project> <zone>'.format(
sys.argv[0]))
sys.exit(1)
gce_flavors = GceFlavors(sys.argv[1], sys.argv[2], sys.argv[3])
gce_flavors.register_gce_flavors()