Example #1
0
def keystone_client():
    openstack = OpenStack.get()
    # authenticate with keystone
    return ksclient.Client(auth_url=openstack.authurl,
                           username=openstack.osusername,
                           password=openstack.ospassword,
                           tenant_id=openstack.tenantid)
Example #2
0
def keystone_client():
	openstack = OpenStack.get()
	# authenticate with keystone
	return ksclient.Client(
		auth_url = openstack.authurl, 
		username = openstack.osusername, 
		password = openstack.ospassword, 
		tenant_id = openstack.tenantid
	)
Example #3
0
def nova_connection():
    # openstack connection
    openstack = OpenStack.get()

    # establish connection to openstack
    connection = novaclient.Client(openstack.osusername,
                                   openstack.ospassword,
                                   openstack.tenantname,
                                   openstack.authurl,
                                   service_type="compute")

    return connection
Example #4
0
def nova_connection():
	# openstack connection
	openstack = OpenStack.get()

	# establish connection to openstack
	connection = novaclient.Client(
		openstack.osusername,
		openstack.ospassword,
		openstack.tenantname,
		openstack.authurl,
		service_type="compute"
	)

	return connection
Example #5
0
def glance_client():
	keystone = keystone_client()
	openstack = OpenStack.get()
	service_type = "image"

	# get list of endpoints for image and our region from keystone
	endpoints = keystone.service_catalog.get_endpoints(
		service_type=service_type,
		region_name=openstack.region)[service_type]

	# if len is 0 there is no endpoint for us available
	if len(endpoints) == 0:
		raise Exception('No endpoints for service type "{0}".'.format(service_type))

	# get public url
	endpoint = endpoints[0]['publicURL']

	# establish connection to glance
	return glanceclient.Client('1', endpoint=endpoint, token=keystone.auth_token, timeout=10)
Example #6
0
def glance_client():
    keystone = keystone_client()
    openstack = OpenStack.get()
    service_type = "image"

    # get list of endpoints for image and our region from keystone
    endpoints = keystone.service_catalog.get_endpoints(
        service_type=service_type, region_name=openstack.region)[service_type]

    # if len is 0 there is no endpoint for us available
    if len(endpoints) == 0:
        raise Exception(
            'No endpoints for service type "{0}".'.format(service_type))

    # get public url
    endpoint = endpoints[0]['publicURL']

    # establish connection to glance
    return glanceclient.Client('1',
                               endpoint=endpoint,
                               token=keystone.auth_token,
                               timeout=10)
Example #7
0
def get_stats():
	# default response
	response = {"response": "success", "result": {"message": ""}}

	# openstack settings
	openstack = OpenStack.get()

	# try establishing nova connection
	try:
		nova = nova_connection()
	except:
		response['response'] = "error"
		response['result'] = "Can't communicate with OpenStack cluster."
		app.logger.error("Can't communicate with OpenStack cluster.")
		return response
	
	try:
		# grab the infos from openstack
		cluster_quota = nova.quotas.get(openstack.tenantid)
		
		# build the stats object
		stats = {
			"quota": {
				"cores": cluster_quota.cores,
				"fixips": cluster_quota.fixed_ips,
				"instances": cluster_quota.instances,
				"ram": cluster_quota.ram
			},
			"hypervisors": []
		}

	except:
		response['response'] = "error"
		response['result']['message'] = "OpenStack quota list unavailable."
		app.logger.error("The OpenStack cluster is refusing to provide quota information.")
		return response

	# try to talk to the hypervisor list function
	try:
		cluster_hypervisors = nova.hypervisors.list()
			
		# loop through hypervisors
		for cluster_hypervisor in cluster_hypervisors:
			hypervisor = {}

			hypervisor['hypervisor_hostname'] = cluster_hypervisor.hypervisor_hostname
			hypervisor['is_loaded'] = cluster_hypervisor.is_loaded()
			hypervisor['current_workload'] = cluster_hypervisor.current_workload
			hypervisor['local_gb'] = cluster_hypervisor.local_gb
			hypervisor['local_gb_used'] = cluster_hypervisor.local_gb_used
			hypervisor['memory_mb'] = cluster_hypervisor.memory_mb
			hypervisor['memory_mb_used'] = cluster_hypervisor.memory_mb_used
			hypervisor['free_disk_gb'] = cluster_hypervisor.free_disk_gb
			hypervisor['free_ram_mb'] = cluster_hypervisor.free_ram_mb
			hypervisor['vcpus'] = cluster_hypervisor.vcpus
			hypervisor['vcpus_used'] = cluster_hypervisor.vcpus_used
			hypervisor['running_vms'] = cluster_hypervisor.running_vms
			hypervisor['disk_available_least'] = cluster_hypervisor.disk_available_least

			stats['hypervisors'].append(hypervisor)

	except:
		# nevermind then
		app.logger.error("The OpenStack cluster is refusing to provide hypervisor information.")
		pass

	# return one or both of quota and hypervisor stats
	response['response'] = "success"
	response['result']['message'] = "OpenStack stats detail."
	response['result']['stats'] = stats
	return response		
Example #8
0
def configure_openstack():
    # quote strip
    def dequote(string):
        if string.startswith('"') and string.endswith('"'):
            string = string[1:-1]
        return string

        # check configuration

    settings = Status().check_settings()

    # get the form
    form = OpenStackForm(request.form)

    # try to select one and only record
    openstack = db.session.query(OpenStack).first()

    # create new entry if configuration doesn't exist
    if not openstack:
        openstack = OpenStack()

    if request.method == "POST":
        # clear settings cache
        Status().flush()

        # handle a file upload
        try:
            file = request.files["file"]
        except:
            file = False

        if file and allowed_file(file.filename):
            keyvals = {}
            for line in file:
                keyval = dict(re.findall(r'(\S+)=(".*?"|\S+)', line))
                if len(keyval) > 0:
                    keyvals.update(keyval)

                    # set values from extracted lines above - needs SQL injection protection?
            openstack.authurl = "%s" % dequote(keyvals["OS_AUTH_URL"])
            openstack.tenantname = "%s" % dequote(keyvals["OS_TENANT_NAME"])
            openstack.tenantid = "%s" % dequote(keyvals["OS_TENANT_ID"])
            openstack.osusername = "******" % dequote(keyvals["OS_USERNAME"])
            openstack.ospassword = "******"

            # update entry
            openstack.update(openstack)

        elif file:
            # file type not allowed
            flash("File type not allowed or empty.  Try again.", "file-error")

        else:
            # user is manually updating form
            if form.validate_on_submit():
                # populate with form and update
                form.populate_obj(openstack)
                openstack.update(openstack)
                flash("OpenStack settings updated!", "success")

                return redirect(url_for(".configure_openstack"))
            else:
                flash("There were form errors. Please check your entries and try again.", "error")

                # get existing form data
    openstack = db.session.query(OpenStack).first()

    # if notice, show message
    return render_template("configure/openstack.html", settings=settings, form=form, openstack=openstack)
Example #9
0
def get_stats():
    # default response
    response = {"response": "success", "result": {"message": ""}}

    # openstack settings
    openstack = OpenStack.get()

    # try establishing nova connection
    try:
        nova = nova_connection()
    except:
        response['response'] = "error"
        response['result'] = "Can't communicate with OpenStack cluster."
        app.logger.error("Can't communicate with OpenStack cluster.")
        return response

    try:
        # grab the infos from openstack
        cluster_quota = nova.quotas.get(openstack.tenantid)

        # build the stats object
        stats = {
            "quota": {
                "cores": cluster_quota.cores,
                "fixips": cluster_quota.fixed_ips,
                "instances": cluster_quota.instances,
                "ram": cluster_quota.ram
            },
            "hypervisors": []
        }

    except:
        response['response'] = "error"
        response['result']['message'] = "OpenStack quota list unavailable."
        app.logger.error(
            "The OpenStack cluster is refusing to provide quota information.")
        return response

    # try to talk to the hypervisor list function
    try:
        cluster_hypervisors = nova.hypervisors.list()

        # loop through hypervisors
        for cluster_hypervisor in cluster_hypervisors:
            hypervisor = {}

            hypervisor[
                'hypervisor_hostname'] = cluster_hypervisor.hypervisor_hostname
            hypervisor['is_loaded'] = cluster_hypervisor.is_loaded()
            hypervisor[
                'current_workload'] = cluster_hypervisor.current_workload
            hypervisor['local_gb'] = cluster_hypervisor.local_gb
            hypervisor['local_gb_used'] = cluster_hypervisor.local_gb_used
            hypervisor['memory_mb'] = cluster_hypervisor.memory_mb
            hypervisor['memory_mb_used'] = cluster_hypervisor.memory_mb_used
            hypervisor['free_disk_gb'] = cluster_hypervisor.free_disk_gb
            hypervisor['free_ram_mb'] = cluster_hypervisor.free_ram_mb
            hypervisor['vcpus'] = cluster_hypervisor.vcpus
            hypervisor['vcpus_used'] = cluster_hypervisor.vcpus_used
            hypervisor['running_vms'] = cluster_hypervisor.running_vms
            hypervisor[
                'disk_available_least'] = cluster_hypervisor.disk_available_least

            stats['hypervisors'].append(hypervisor)

    except:
        # nevermind then
        app.logger.error(
            "The OpenStack cluster is refusing to provide hypervisor information."
        )
        pass

    # return one or both of quota and hypervisor stats
    response['response'] = "success"
    response['result']['message'] = "OpenStack stats detail."
    response['result']['stats'] = stats
    return response
Example #10
0
def openstack_check():
    # check openstack is setup
    response = OpenStack().check()
    return jsonify(response)
Example #11
0
def configure_openstack():
    # quote strip
    def dequote(string):
        if string.startswith('"') and string.endswith('"'):
            string = string[1:-1]
        return string

    # check configuration
    settings = Status().check_settings()

    # get the form
    form = OpenStackForm(request.form)

    # try to select one and only record
    openstack = db.session.query(OpenStack).first()

    # create new entry if configuration doesn't exist
    if not openstack:
        openstack = OpenStack()

    if request.method == 'POST':
        # clear settings cache
        Status().flush()

        # handle a file upload
        try:
            file = request.files['file']
        except:
            file = False

        if file and allowed_file(file.filename):
            keyvals = {}
            for line in file:
                keyval = dict(re.findall(r'(\S+)=(".*?"|\S+)', line))
                if len(keyval) > 0:
                    keyvals.update(keyval)

            # set values from extracted lines above - needs SQL injection protection?
            openstack.authurl = "%s" % dequote(keyvals['OS_AUTH_URL'])
            openstack.tenantname = "%s" % dequote(keyvals['OS_TENANT_NAME'])
            openstack.tenantid = "%s" % dequote(keyvals['OS_TENANT_ID'])
            openstack.osusername = "******" % dequote(keyvals['OS_USERNAME'])
            openstack.ospassword = "******"

            # update entry
            openstack.update(openstack)

        elif file:
            # file type not allowed
            flash("File type not allowed or empty.  Try again.", "file-error")

        else:
            # user is manually updating form
            if form.validate_on_submit():
                # populate with form and update
                form.populate_obj(openstack)
                openstack.update(openstack)
                flash("OpenStack settings updated!", "success")

                return redirect(url_for(".configure_openstack"))
            else:
                flash(
                    "There were form errors. Please check your entries and try again.",
                    "error")

    # get existing form data
    openstack = db.session.query(OpenStack).first()

    # if notice, show message
    return render_template('configure/openstack.html',
                           settings=settings,
                           form=form,
                           openstack=openstack)