コード例 #1
0
    def get_secgroup_uuids(self, security_groups):
        '''Returns a list of security group UUIDs.

        Args:
        security_groups: List of security group names or UUIDs
        '''
        seclist = []
        all_groups = None
        for sg in security_groups:
            if uuidutils.is_uuid_like(sg):
                seclist.append(sg)
            else:
                if not all_groups:
                    response = self.client().list_security_groups()
                    all_groups = response['security_groups']
                same_name_groups = [g for g in all_groups if g['name'] == sg]
                groups = [g['id'] for g in same_name_groups]
                if len(groups) == 0:
                    raise exception.PhysicalResourceNotFound(resource_id=sg)
                elif len(groups) == 1:
                    seclist.append(groups[0])
                else:
                    # for admin roles, can get the other users'
                    # securityGroups, so we should match the tenant_id with
                    # the groups, and return the own one
                    own_groups = [
                        g['id'] for g in same_name_groups
                        if g['tenant_id'] == self.context.tenant_id
                    ]
                    if len(own_groups) == 1:
                        seclist.append(own_groups[0])
                    else:
                        raise exception.PhysicalResourceNameAmbiguity(name=sg)
        return seclist
コード例 #2
0
 def test_is_uuid_like(self):
     self.assertTrue(uuidutils.is_uuid_like(str(uuid.uuid4())))
     self.assertTrue(uuidutils.is_uuid_like(
         '{12345678-1234-5678-1234-567812345678}'))
     self.assertTrue(uuidutils.is_uuid_like(
         '12345678123456781234567812345678'))
     self.assertTrue(uuidutils.is_uuid_like(
         'urn:uuid:12345678-1234-5678-1234-567812345678'))
     self.assertTrue(uuidutils.is_uuid_like(
         'urn:bbbaaaaa-aaaa-aaaa-aabb-bbbbbbbbbbbb'))
     self.assertTrue(uuidutils.is_uuid_like(
         'uuid:bbbaaaaa-aaaa-aaaa-aabb-bbbbbbbbbbbb'))
     self.assertTrue(uuidutils.is_uuid_like(
         '{}---bbb---aaa--aaa--aaa-----aaa---aaa--bbb-bbb---bbb-bbb-bb-{}'))
コード例 #3
0
ファイル: glance.py プロジェクト: whiteear/heat
    def get_image_id(self, image_identifier):
        '''
        Return an id for the specified image name or identifier.

        :param image_identifier: image name or a UUID-like identifier
        :returns: the id of the requested :image_identifier:
        :raises: exception.ImageNotFound,
                 exception.PhysicalResourceNameAmbiguity
        '''
        if uuidutils.is_uuid_like(image_identifier):
            try:
                image_id = self.client().images.get(image_identifier).id
            except exc.HTTPNotFound:
                image_id = self.get_image_id_by_name(image_identifier)
        else:
            image_id = self.get_image_id_by_name(image_identifier)
        return image_id
コード例 #4
0
ファイル: net_explorer.py プロジェクト: finalbro/murano
    def getDefaultRouter(self, _context):
        client = self._clients.get_neutron_client(_context)
        router_name = self._settings.router_name

        routers = client.list_routers(
            tenant_id=self._tenant_id, name=router_name).get('routers')
        if len(routers) == 0:
            LOG.debug('Router {0} not found'.format(router_name))
            if self._settings.create_router:
                LOG.debug('Attempting to create Router {0}'.
                          format(router_name))
                external_network = self._settings.external_network
                kwargs = {'id': external_network} \
                    if uuidutils.is_uuid_like(external_network) \
                    else {'name': external_network}
                networks = client.list_networks(**kwargs).get('networks')
                ext_nets = filter(lambda n: n['router:external'], networks)
                if len(ext_nets) == 0:
                    raise KeyError('Router %s could not be created, '
                                   'no external network found' % router_name)
                nid = ext_nets[0]['id']

                body_data = {
                    'router': {
                        'name': router_name,
                        'external_gateway_info': {
                            'network_id': nid
                        },
                        'admin_state_up': True,
                    }
                }
                router = client.create_router(body=body_data).get('router')
                LOG.debug('Created router: {0}'.format(router))
                return router['id']
            else:
                raise KeyError('Router %s was not found' % router_name)
        else:
            if routers[0]['external_gateway_info'] is None:
                raise Exception('Please set external gateway '
                                'for the router %s ' % router_name)
            router_id = routers[0]['id']
        return router_id
コード例 #5
0
 def test_is_uuid_like(self):
     self.assertTrue(uuidutils.is_uuid_like(str(uuid.uuid4())))
     self.assertTrue(
         uuidutils.is_uuid_like('{12345678-1234-5678-1234-567812345678}'))
     self.assertTrue(
         uuidutils.is_uuid_like('12345678123456781234567812345678'))
     self.assertTrue(
         uuidutils.is_uuid_like(
             'urn:uuid:12345678-1234-5678-1234-567812345678'))
     self.assertTrue(
         uuidutils.is_uuid_like('urn:bbbaaaaa-aaaa-aaaa-aabb-bbbbbbbbbbbb'))
     self.assertTrue(
         uuidutils.is_uuid_like(
             'uuid:bbbaaaaa-aaaa-aaaa-aabb-bbbbbbbbbbbb'))
     self.assertTrue(
         uuidutils.is_uuid_like(
             '{}---bbb---aaa--aaa--aaa-----aaa---aaa--bbb-bbb---bbb-bbb-bb-{}'
         ))
コード例 #6
0
 def get_secgroup_uuids(security_groups, client, tenant_id):
     '''
     Returns a list of security group UUIDs.
     Args:
         security_groups: List of security group names or UUIDs
         client: reference to neutronclient
         tenant_id: the tenant id to match the security_groups
     '''
     warnings.warn('neutron.NeutronResource.get_secgroup_uuids is '
                   'deprecated. Use '
                   'self.client_plugin("neutron").get_secgroup_uuids')
     seclist = []
     all_groups = None
     for sg in security_groups:
         if uuidutils.is_uuid_like(sg):
             seclist.append(sg)
         else:
             if not all_groups:
                 response = client.list_security_groups()
                 all_groups = response['security_groups']
             same_name_groups = [g for g in all_groups if g['name'] == sg]
             groups = [g['id'] for g in same_name_groups]
             if len(groups) == 0:
                 raise exception.PhysicalResourceNotFound(resource_id=sg)
             elif len(groups) == 1:
                 seclist.append(groups[0])
             else:
                 # for admin roles, can get the other users'
                 # securityGroups, so we should match the tenant_id with
                 # the groups, and return the own one
                 own_groups = [
                     g['id'] for g in same_name_groups
                     if g['tenant_id'] == tenant_id
                 ]
                 if len(own_groups) == 1:
                     seclist.append(own_groups[0])
                 else:
                     raise exception.PhysicalResourceNameAmbiguity(name=sg)
     return seclist
コード例 #7
0
ファイル: server.py プロジェクト: whiteear/heat
    def _build_nics(self, networks):
        if not networks:
            return None

        nics = []

        for net_data in networks:
            nic_info = {}
            if net_data.get(self.NETWORK_UUID):
                nic_info['net-id'] = net_data[self.NETWORK_UUID]
            label_or_uuid = net_data.get(self.NETWORK_ID)
            if label_or_uuid:
                if uuidutils.is_uuid_like(label_or_uuid):
                    nic_info['net-id'] = label_or_uuid
                else:
                    network = self.nova().networks.find(label=label_or_uuid)
                    nic_info['net-id'] = network.id
            if net_data.get(self.NETWORK_FIXED_IP):
                nic_info['v4-fixed-ip'] = net_data[self.NETWORK_FIXED_IP]
            if net_data.get(self.NETWORK_PORT):
                nic_info['port-id'] = net_data[self.NETWORK_PORT]
            nics.append(nic_info)
        return nics
コード例 #8
0
 def test_is_uuid_like_insensitive(self):
     self.assertTrue(uuidutils.is_uuid_like(str(uuid.uuid4()).upper()))
コード例 #9
0
    def handle_create(self):
        '''
        Create cloud database instance.
        '''
        self.flavor = self.client_plugin().get_flavor_id(
            self.properties[self.FLAVOR])
        self.volume = {'size': self.properties[self.SIZE]}
        self.databases = self.properties.get(self.DATABASES)
        self.users = self.properties.get(self.USERS)
        restore_point = self.properties.get(self.RESTORE_POINT)
        if restore_point:
            restore_point = {"backupRef": restore_point}
        zone = self.properties.get(self.AVAILABILITY_ZONE)
        self.datastore_type = self.properties.get(self.DATASTORE_TYPE)
        self.datastore_version = self.properties.get(self.DATASTORE_VERSION)

        # convert user databases to format required for troveclient.
        # that is, list of database dictionaries
        for user in self.users:
            dbs = [{'name': db} for db in user.get(self.USER_DATABASES, [])]
            user[self.USER_DATABASES] = dbs

        # convert networks to format required by troveclient
        nics = []
        for nic in self.properties.get(self.NICS):
            nic_dict = {}
            net = nic.get(self.NET)
            if net:
                if uuidutils.is_uuid_like(net):
                    net_id = net
                else:
                    # using Nova for lookup to cover both neutron and
                    # nova-network cases
                    nova = self.client('nova')
                    net_id = nova.networks.find(label=net).id
                nic_dict['net-id'] = net_id
            port = nic.get(self.PORT)
            if port:
                neutron = self.client_plugin('neutron')
                nic_dict['port-id'] = neutron.find_neutron_resource(
                    self.properties, self.PORT, 'port')
            ip = nic.get(self.V4_FIXED_IP)
            if ip:
                nic_dict['v4-fixed-ip'] = ip
            nics.append(nic_dict)

        # create db instance
        instance = self.trove().instances.create(
            self._dbinstance_name(),
            self.flavor,
            volume=self.volume,
            databases=self.databases,
            users=self.users,
            restorePoint=restore_point,
            availability_zone=zone,
            datastore=self.datastore_type,
            datastore_version=self.datastore_version,
            nics=nics)
        self.resource_id_set(instance.id)

        return instance
コード例 #10
0
 def test_is_uuid_like_insensitive(self):
     self.assertTrue(uuidutils.is_uuid_like(str(uuid.uuid4()).upper()))
コード例 #11
0
def find_resource(manager, name_or_id, **find_args):
    """Look for resource in a given manager.

    Used as a helper for the _find_* methods.
    Example:

    .. code-block:: python

        def _find_hypervisor(cs, hypervisor):
            #Get a hypervisor by name or ID.
            return cliutils.find_resource(cs.hypervisors, hypervisor)
    """
    # first try to get entity as integer id
    try:
        return manager.get(int(name_or_id))
    except (TypeError, ValueError, exceptions.NotFound):
        pass

    # now try to get entity as uuid
    try:
        if six.PY2:
            tmp_id = encodeutils.safe_encode(name_or_id)
        else:
            tmp_id = encodeutils.safe_decode(name_or_id)

        if uuidutils.is_uuid_like(tmp_id):
            return manager.get(tmp_id)
    except (TypeError, ValueError, exceptions.NotFound):
        pass

    # for str id which is not uuid
    if getattr(manager, 'is_alphanum_id_allowed', False):
        try:
            return manager.get(name_or_id)
        except exceptions.NotFound:
            pass

    try:
        try:
            return manager.find(human_id=name_or_id, **find_args)
        except exceptions.NotFound:
            pass

        # finally try to find entity by name
        try:
            resource = getattr(manager, 'resource_class', None)
            name_attr = resource.NAME_ATTR if resource else 'name'
            kwargs = {name_attr: name_or_id}
            kwargs.update(find_args)
            return manager.find(**kwargs)
        except exceptions.NotFound:
            msg = _("No %(name)s with a name or "
                    "ID of '%(name_or_id)s' exists.") % \
                {
                    "name": manager.resource_class.__name__.lower(),
                    "name_or_id": name_or_id
                }
            raise exceptions.CommandError(msg)
    except exceptions.NoUniqueMatch:
        msg = _("Multiple %(name)s matches found for "
                "'%(name_or_id)s', use an ID to be more specific.") % \
            {
                "name": manager.resource_class.__name__.lower(),
                "name_or_id": name_or_id
            }
        raise exceptions.CommandError(msg)
コード例 #12
0
ファイル: types.py プロジェクト: FNST-OpenStack/cloudkitty
 def validate(value):
     if not uuidutils.is_uuid_like(value):
         raise ValueError(_LE("Invalid UUID, got '%s'") % value)
     return value
コード例 #13
0
 def test_name_is_uuid_like(self):
     self.assertFalse(uuidutils.is_uuid_like('zhongyueluo'))
コード例 #14
0
 def test_id_is_uuid_like(self):
     self.assertFalse(uuidutils.is_uuid_like(1234567))
コード例 #15
0
 def test_id_is_uuid_like(self):
     self.assertFalse(uuidutils.is_uuid_like(1234567))
コード例 #16
0
 def test_name_is_uuid_like(self):
     self.assertFalse(uuidutils.is_uuid_like('zhongyueluo'))
コード例 #17
0
ファイル: server.py プロジェクト: whiteear/heat
    def handle_create(self):
        security_groups = self.properties.get(self.SECURITY_GROUPS)

        user_data_format = self.properties.get(self.USER_DATA_FORMAT)
        ud_content = self.properties.get(self.USER_DATA)
        if self.user_data_software_config() or self.user_data_raw():
            if uuidutils.is_uuid_like(ud_content):
                # attempt to load the userdata from software config
                ud_content = self.get_software_config(ud_content)

        metadata = self.metadata_get(True) or {}

        if self.user_data_software_config():
            self._create_transport_credentials()
            self._populate_deployments_metadata(metadata)

        if self.properties[self.ADMIN_USER]:
            instance_user = self.properties[self.ADMIN_USER]
        elif cfg.CONF.instance_user:
            instance_user = cfg.CONF.instance_user
        else:
            instance_user = None

        userdata = self.client_plugin().build_userdata(
            metadata,
            ud_content,
            instance_user=instance_user,
            user_data_format=user_data_format)

        flavor = self.properties[self.FLAVOR]
        availability_zone = self.properties[self.AVAILABILITY_ZONE]

        image = self.properties.get(self.IMAGE)
        if image:
            image = self.client_plugin('glance').get_image_id(image)

        flavor_id = self.client_plugin().get_flavor_id(flavor)

        instance_meta = self.properties.get(self.METADATA)
        if instance_meta is not None:
            instance_meta = self.client_plugin().meta_serialize(
                instance_meta)

        scheduler_hints = self.properties.get(self.SCHEDULER_HINTS)
        nics = self._build_nics(self.properties.get(self.NETWORKS))
        block_device_mapping = self._build_block_device_mapping(
            self.properties.get(self.BLOCK_DEVICE_MAPPING))
        reservation_id = self.properties.get(self.RESERVATION_ID)
        disk_config = self.properties.get(self.DISK_CONFIG)
        admin_pass = self.properties.get(self.ADMIN_PASS) or None
        personality_files = self.properties.get(self.PERSONALITY)
        key_name = self.properties.get(self.KEY_NAME)

        server = None
        try:
            server = self.nova().servers.create(
                name=self._server_name(),
                image=image,
                flavor=flavor_id,
                key_name=key_name,
                security_groups=security_groups,
                userdata=userdata,
                meta=instance_meta,
                scheduler_hints=scheduler_hints,
                nics=nics,
                availability_zone=availability_zone,
                block_device_mapping=block_device_mapping,
                reservation_id=reservation_id,
                config_drive=self._config_drive(),
                disk_config=disk_config,
                files=personality_files,
                admin_pass=admin_pass)
        finally:
            # Avoid a race condition where the thread could be canceled
            # before the ID is stored
            if server is not None:
                self.resource_id_set(server.id)

        return server