Example #1
0
def process_action(ch, method, properties, body): #callback
    ch.basic_ack(delivery_tag=method.delivery_tag)

    logger = logging.getLogger(sname)
    kc = Keystone(config_path=himlarcli_config, debug=options.debug, log=logger)
    kc.set_domain('dataporten')

    data = json.loads(body)
    user = kc.get_user_by_email(data['email'], user_type='api')

    logger.info('processing %s for %s', data['action'], data['email'])

    if user:
        if data['action'] == 'reset_password':
            reset = kc.reset_password(email=data['email'], password=data['password'])
        elif data['action'] == 'provision':
            logger.info('user exists! %s', data['email'])
    else:
        if data['action'] == 'provision':
            provision = kc.provision_dataporten(email=data['email'], password=data['password'])
        elif data['action'] == 'reset_password':
            logger.info('Provisioning is required! %s', data['email'])
Example #2
0
from himlarcli.nova import Nova
#from himlarcli.cinder import Cinder
from himlarcli.gnocchi import Gnocchi
from himlarcli.cinder import Cinder
from himlarcli.parser import Parser
from himlarcli.printer import Printer
from himlarcli import utils as himutils
from datetime import date, timedelta
from collections import OrderedDict

parser = Parser()
options = parser.parse_args()
printer = Printer(options.format)

kc= Keystone(options.config, debug=options.debug)
kc.set_domain(options.domain)
kc.set_dry_run(options.dry_run)
logger = kc.get_logger()

# Billing will always use all regions
regions = kc.find_regions()

def action_whales():
    start = himutils.get_date(options.start, date.today() - timedelta(days=1))
    stop = himutils.get_date(options.end, date.today() + timedelta(days=1))
    if start > stop:
        himutils.sys_error('start %s must be fore stop %s' % (start, stop))
    logger.debug('=> start date = %s', start)
    logger.debug('=> stop date = %s', stop)

    for region in regions:
Example #3
0
from sqlalchemy.orm import sessionmaker
from datetime import datetime

from himlarcli.keystone import Keystone
from himlarcli.nova import Nova
from himlarcli.neutron import Neutron
from himlarcli.parser import Parser
from himlarcli import utils as himutils

parser = Parser()
parser.toggle_show('dry-run')
parser.toggle_show('format')
options = parser.parse_args()

kc= Keystone(options.config, debug=options.debug)
kc.set_domain(options.domain)
logger = kc.get_logger()

# Region
if hasattr(options, 'region'):
    regions = kc.find_regions(region_name=options.region)
else:
    regions = kc.find_regions()

logger.debug('=> regions used: %s', ','.join(regions))

Base = declarative_base()

class Owner(Base):
    __tablename__ = 'owners'
    ip = Column(String(16), primary_key=True)
Example #4
0
#!/usr/bin/env python
import sys
from himlarcli.keystone import Keystone
from himlarcli.nova import Nova
from himlarcli.parser import Parser
from himlarcli.printer import Printer
from himlarcli import utils as himutils

himutils.is_virtual_env()

# Load parser config from config/parser/*
parser = Parser()
options = parser.parse_args()

ksclient = Keystone(options.config, debug=options.debug)
ksclient.set_domain('Dataporten')
logger = ksclient.get_logger()
printer = Printer(options.format)

# Regions
regions = himutils.load_region_config('config/stats',
                                      region=ksclient.region,
                                      log=logger)
""" ACTIONS """


def project():
    stats = {
        'demo': 0,
        'personal': 0,
        'research': 0,
Example #5
0
    def prettyprint_project_instances(project, options, logger, regions):
        out_str = ''
        instances_total = 0
        instances = dict()

        # Get Instances
        for region in regions:
            # Initiate Nova object
            nc = utils.get_client(Nova, options, logger, region)

            # Get a list of instances in project
            instances[region] = nc.get_project_instances(project_id=project.id)
            for instance in instances[region]:
                instances_total += 1

        # Print Instances table
        if instances_total > 0:
            kc = Keystone(options.config, debug=options.debug)
            kc.set_dry_run(options.dry_run)
            kc.set_domain(options.domain)

            table_instances = PrettyTable()
            table_instances.field_names = [
                'id', 'name', 'status', 'owner', 'IPv4', 'IPv6', 'region',
                'flavor', 'image [status]'
            ]
            table_instances.align['id'] = 'l'
            table_instances.align['name'] = 'l'
            table_instances.align['status'] = 'l'
            table_instances.align['owner'] = 'l'
            table_instances.align['IPv4'] = 'l'
            table_instances.align['IPv6'] = 'l'
            table_instances.align['region'] = 'l'
            table_instances.align['flavor'] = 'l'
            table_instances.align['image [status]'] = 'l'
            for region in regions:
                # Initiate Glance object
                gc = utils.get_client(Glance, options, logger, region)
                for instance in instances[region]:
                    if len(instance.addresses.keys()) > 0:
                        network = instance.addresses.keys()[0]
                        ipv4_list = []
                        ipv6_list = []
                        for interface in instance.addresses[network]:
                            if interface['version'] == 4:
                                ipv4_list.append(interface['addr'])
                            if interface['version'] == 6:
                                ipv6_list.append(interface['addr'])
                        ipv4_addresses = ", ".join(ipv4_list)
                        ipv6_addresses = ", ".join(ipv6_list)
                    else:
                        ipv4_addresses = 'None'
                        ipv6_addresses = 'None'
                    if 'id' not in instance.image:
                        image_name = 'UNKNOWN'
                        image_status = 'N/A'
                    else:
                        filters = {'id': instance.image['id']}
                        image = gc.find_image(filters=filters, limit=1)
                        if len(image) == 1:
                            image_name = image[0]['name']
                            image_status = image[0]['status']
                        else:
                            image_name = 'UNKNOWN'
                            image_status = 'N/A'
                    user = kc.get_by_id('user', instance.user_id)
                    owner = user.name if user else '(deleted-user)'
                    row = []
                    row.append(instance.id)
                    row.append(instance.name)
                    row.append(instance.status)
                    row.append(owner)
                    row.append(ipv4_addresses)
                    row.append(ipv6_addresses)
                    row.append(region)
                    row.append(instance.flavor["original_name"])
                    row.append("%s [%s]" % (image_name, image_status))
                    table_instances.add_row(row)
            out_str += "\n  Instances (%d): \n" % instances_total
            out_str += table_instances.get_string() + "\n"

        return out_str.encode('utf-8')
Example #6
0
    def prettyprint_project_metadata(project,
                                     options,
                                     logger,
                                     regions,
                                     user=None):
        out_str = ''
        kc = Keystone(options.config, debug=options.debug)
        kc.set_dry_run(options.dry_run)
        kc.set_domain(options.domain)

        project_type = project.type if hasattr(project,
                                               'type') else '(unknown)'
        project_admin = project.admin if hasattr(project,
                                                 'admin') else '(unknown)'
        project_created = project.createdate if hasattr(
            project, 'createdate') else '(unknown)'
        project_enddate = project.enddate if hasattr(project,
                                                     'enddate') else 'None'
        project_contact = project.contact if hasattr(project,
                                                     'contact') else 'None'
        project_roles = kc.list_roles(project_name=project.name)

        # Make project create date readable
        project_created = re.sub(r'T\d\d:\d\d:\d\d.\d\d\d\d\d\d', '',
                                 project_created)

        # Disabled project?
        status = "*** DISABLED *** " if not project.enabled else ''

        # Print header for project
        out_str += "%sPROJECT: %s" % (status, project.name)
        if user is not None and not options.admin:
            prole = 'admin' if user == project.admin else 'member'
            out_str += " (%s)" % prole
        out_str += "\n" + '=' * 80 + "\n"

        # Print project metadata
        table_metadata = PrettyTable()
        table_metadata._max_width = {'value': 70}
        table_metadata.border = 0
        table_metadata.header = 0
        table_metadata.field_names = ['meta', 'value']
        table_metadata.align['meta'] = 'r'
        table_metadata.align['value'] = 'l'
        table_metadata.add_row(['ID:', project.id])
        table_metadata.add_row(['Admin:', project_admin])
        table_metadata.add_row(['Contact:', project_contact])
        table_metadata.add_row(['Type:', project_type])
        table_metadata.add_row(['Created:', project_created])
        table_metadata.add_row(['Enddate:', project_enddate])
        table_metadata.add_row(['Description:', project.description])
        if len(project_roles) > 0:
            users = dict()
            users['user'] = []
            users['object'] = []
            users['superuser'] = []
            for role in project_roles:
                user = role['group'].replace('-group', '')
                users[role['role']].append(user)
            table_metadata.add_row(['Users:', "\n".join(users['user'])])
            if len(users['superuser']) > 0:
                table_metadata.add_row(
                    ['Superusers:', "\n".join(users['superuser'])])
            if len(users['object']) > 0:
                table_metadata.add_row(
                    ['Object Users:', "\n".join(users['object'])])
        if not options.detail:
            zones = Printer._count_project_zones(project, options, logger)
            volumes = Printer._count_project_volumes(project, options, logger,
                                                     regions)
            images = Printer._count_project_images(project, options, logger,
                                                   regions)
            instances = Printer._count_project_instances(
                project, options, logger, regions)
            volume_list = []
            image_list = []
            instance_list = []
            for region in regions:
                volume_list.append("%d (%s)" % (volumes[region], region))
                image_list.append("%d (%s)" % (images[region], region))
                instance_list.append("%d (%s)" % (instances[region], region))
            table_metadata.add_row(['Zones:', zones])
            table_metadata.add_row(['Volumes:', ', '.join(volume_list)])
            table_metadata.add_row(['Images:', ', '.join(image_list)])
            table_metadata.add_row(['Instances:', ', '.join(instance_list)])

        out_str += table_metadata.get_string() + "\n"
        return out_str.encode('utf-8')
Example #7
0
from himlarcli import tests as tests
tests.is_virtual_env()

from himlarcli.keystone import Keystone
from himlarcli.parser import Parser
from himlarcli.printer import Printer
from himlarcli import utils as himutils

parser = Parser()
options = parser.parse_args()
printer = Printer(options.format)

ksclient = Keystone(options.config, debug=options.debug)
ksclient.set_dry_run(options.dry_run)
ksclient.set_domain(options.domain)
logger = ksclient.get_logger()

if hasattr(options, 'region'):
    regions = ksclient.find_regions(region_name=options.region)
else:
    regions = ksclient.find_regions()

if not regions:
    himutils.sys_error('No valid regions found!')


def action_grant():
    # Get all users from a project
    users = ksclient.list_roles(project_name=options.project)
    for user in users:
Example #8
0
from himlarcli import tests as tests
tests.is_virtual_env()

from himlarcli.keystone import Keystone
from himlarcli.parser import Parser
from himlarcli.printer import Printer
from himlarcli import utils as himutils

parser = Parser()
options = parser.parse_args()
printer = Printer(options.format)

ksclient = Keystone(options.config, debug=options.debug)
ksclient.set_dry_run(options.dry_run)
ksclient.set_domain(options.domain)
logger = ksclient.get_logger()

if hasattr(options, 'region'):
    regions = ksclient.find_regions(region_name=options.region)
else:
    regions = ksclient.find_regions()

if not regions:
    himutils.sys_error('No valid regions found!')

def action_grant():
    # Get all users from a project
    users = ksclient.list_roles(project_name=options.project)
    for user in users:
        if user['role'] is not 'object':
Example #9
0
#!/usr/bin/env python
import sys
from himlarcli.keystone import Keystone
from himlarcli.nova import Nova
from himlarcli.parser import Parser
from himlarcli.printer import Printer
from himlarcli import utils as himutils

himutils.is_virtual_env()

# Load parser config from config/parser/*
parser = Parser()
options = parser.parse_args()

ksclient = Keystone(options.config, debug=options.debug)
ksclient.set_domain('Dataporten')
logger = ksclient.get_logger()
printer = Printer(options.format)

# Regions
regions = himutils.load_region_config('config/stats',
                                      region=ksclient.region,
                                      log=logger)
""" ACTIONS """

def project():
    stats = {'demo': 0,
             'personal': 0,
             'research': 0,
             'education': 0,
             'admin': 0,