Exemple #1
0
def convert_with_links(rpc_portgroup, fields=None, sanitize=True):
    """Add links to the portgroup."""
    portgroup = api_utils.object_to_dict(
        rpc_portgroup,
        link_resource='portgroups',
        fields=('address', 'extra', 'internal_info', 'mode', 'name',
                'properties', 'standalone_ports_supported'))
    api_utils.populate_node_uuid(rpc_portgroup, portgroup)
    url = api.request.public_url
    portgroup['ports'] = [
        link.make_link('self', url, 'portgroups',
                       rpc_portgroup.uuid + "/ports"),
        link.make_link('bookmark',
                       url,
                       'portgroups',
                       rpc_portgroup.uuid + "/ports",
                       bookmark=True)
    ]

    if fields is not None:
        api_utils.check_for_invalid_fields(fields, portgroup)

    if not sanitize:
        return portgroup

    api_utils.sanitize_dict(portgroup, fields)

    return portgroup
Exemple #2
0
    def _convert_with_links(portgroup, url, fields=None):
        """Add links to the portgroup."""
        if fields is None:
            portgroup.ports = [
                link.make_link('self', url, 'portgroups',
                               portgroup.uuid + "/ports"),
                link.make_link('bookmark',
                               url,
                               'portgroups',
                               portgroup.uuid + "/ports",
                               bookmark=True)
            ]

        # never expose the node_id attribute
        portgroup.node_id = atypes.Unset

        portgroup.links = [
            link.make_link('self', url, 'portgroups', portgroup.uuid),
            link.make_link('bookmark',
                           url,
                           'portgroups',
                           portgroup.uuid,
                           bookmark=True)
        ]
        return portgroup
Exemple #3
0
 def _convert_with_links(conductor, url, fields=None):
     conductor.links = [link.make_link('self', url, 'conductors',
                                       conductor.hostname),
                        link.make_link('bookmark', url, 'conductors',
                                       conductor.hostname,
                                       bookmark=True)]
     return conductor
Exemple #4
0
 def _convert_with_links(bios, node_uuid, url):
     """Add links to the bios setting."""
     name = bios.name
     bios.links = [link.make_link('self', url, 'nodes',
                                  "%s/bios/%s" % (node_uuid, name)),
                   link.make_link('bookmark', url, 'nodes',
                                  "%s/bios/%s" % (node_uuid, name),
                                  bookmark=True)]
     return bios
Exemple #5
0
 def _convert_with_links(allocation, url):
     """Add links to the allocation."""
     # This field is only used in POST, never return it.
     allocation.node = atypes.Unset
     allocation.links = [
         link.make_link('self', url, 'allocations', allocation.uuid),
         link.make_link('bookmark', url, 'allocations',
                        allocation.uuid, bookmark=True)
     ]
     return allocation
Exemple #6
0
 def _convert_with_links(template, url, fields=None):
     template.links = [
         link.make_link('self', url, 'deploy_templates', template.uuid),
         link.make_link('bookmark',
                        url,
                        'deploy_templates',
                        template.uuid,
                        bookmark=True)
     ]
     return template
Exemple #7
0
    def _convert_with_links(connector, url):

        connector.links = [
            link.make_link('self', url, 'volume/connectors', connector.uuid),
            link.make_link('bookmark',
                           url,
                           'volume/connectors',
                           connector.uuid,
                           bookmark=True)
        ]
        return connector
Exemple #8
0
    def _convert_with_links(target, url):

        target.links = [
            link.make_link('self', url, 'volume/targets', target.uuid),
            link.make_link('bookmark',
                           url,
                           'volume/targets',
                           target.uuid,
                           bookmark=True)
        ]
        return target
Exemple #9
0
def get_next(collection, limit, url=None, key_field='uuid', **kwargs):
    """Return a link to the next subset of the collection."""
    if not has_next(collection, limit):
        return None

    fields = kwargs.pop('fields', None)
    # NOTE(saga): If fields argument is present in kwargs and not None. It
    # is a list so convert it into a comma seperated string.
    if fields:
        kwargs['fields'] = ','.join(fields)
    q_args = ''.join(['%s=%s&' % (key, kwargs[key]) for key in kwargs])

    last_item = collection[-1]
    # handle items which are either objects or dicts
    if hasattr(last_item, key_field):
        marker = getattr(last_item, key_field)
    else:
        marker = last_item.get(key_field)

    next_args = '?%(args)slimit=%(limit)d&marker=%(marker)s' % {
        'args': q_args,
        'limit': limit,
        'marker': marker
    }

    return link.make_link('next', api.request.public_url, url,
                          next_args)['href']
Exemple #10
0
def default_version():
    """Return a dict representing the current default version

    id: The ID of the (major) version, also acts as the release number
    links: A list containing one link that points to the current version
    of the API

    status: Status of the version, one of CURRENT, SUPPORTED, DEPRECATED

    min_version: The current, maximum supported (major.minor) version of API.

    version: Minimum supported (major.minor) version of API.
    """

    # NOTE(dtantsur): avoid circular imports
    from ironic.api.controllers.v1 import versions

    return {
        'id':
        ID_VERSION1,
        'links': [
            link.make_link('self',
                           api.request.public_url,
                           ID_VERSION1,
                           '',
                           bookmark=True)
        ],
        'status':
        'CURRENT',
        'min_version':
        versions.min_version_string(),
        'version':
        versions.max_version_string()
    }
Exemple #11
0
    def convert_with_links(cls, rpc_port, fields=None, sanitize=True):
        port = Port(**rpc_port.as_dict())

        port._validate_fields(fields)

        url = api.request.public_url

        port.links = [
            link.make_link('self', url, 'ports', port.uuid),
            link.make_link('bookmark', url, 'ports', port.uuid, bookmark=True)
        ]

        if not sanitize:
            return port

        port.sanitize(fields=fields)

        return port
Exemple #12
0
 def _convert_with_links(chassis, url, fields=None):
     if fields is None:
         chassis.nodes = [
             link.make_link('self', url, 'chassis',
                            chassis.uuid + "/nodes"),
             link.make_link('bookmark',
                            url,
                            'chassis',
                            chassis.uuid + "/nodes",
                            bookmark=True)
         ]
     chassis.links = [
         link.make_link('self', url, 'chassis', chassis.uuid),
         link.make_link('bookmark',
                        url,
                        'chassis',
                        chassis.uuid,
                        bookmark=True)
     ]
     return chassis
Exemple #13
0
def convert_with_links(rpc_chassis, fields=None, sanitize=True):
    chassis = api_utils.object_to_dict(rpc_chassis,
                                       fields=('description', 'extra'),
                                       link_resource='chassis')

    url = api.request.public_url
    chassis['nodes'] = [
        link.make_link('self', url, 'chassis', rpc_chassis.uuid + "/nodes"),
        link.make_link('bookmark',
                       url,
                       'chassis',
                       rpc_chassis.uuid + "/nodes",
                       bookmark=True)
    ],

    if fields is not None:
        api_utils.check_for_invalid_fields(fields, chassis)

    if sanitize:
        api_utils.sanitize_dict(chassis, fields)
    return chassis
Exemple #14
0
    def convert(node_ident=None):
        url = api.request.public_url
        volume = Volume()
        if node_ident:
            resource = 'nodes'
            args = '%s/volume/' % node_ident
        else:
            resource = 'volume'
            args = ''

        volume.links = [
            link.make_link('self', url, resource, args),
            link.make_link('bookmark', url, resource, args, bookmark=True)
        ]

        volume.connectors = [
            link.make_link('self', url, resource, args + 'connectors'),
            link.make_link('bookmark',
                           url,
                           resource,
                           args + 'connectors',
                           bookmark=True)
        ]

        volume.targets = [
            link.make_link('self', url, resource, args + 'targets'),
            link.make_link('bookmark',
                           url,
                           resource,
                           args + 'targets',
                           bookmark=True)
        ]

        return volume
Exemple #15
0
    def get_next(self, limit, url=None, **kwargs):
        """Return a link to the next subset of the collection."""
        if not self.has_next(limit):
            return atypes.Unset

        resource_url = url or self._type
        fields = kwargs.pop('fields', None)
        # NOTE(saga): If fields argument is present in kwargs and not None. It
        # is a list so convert it into a comma seperated string.
        if fields:
            kwargs['fields'] = ','.join(fields)
        q_args = ''.join(['%s=%s&' % (key, kwargs[key]) for key in kwargs])
        next_args = '?%(args)slimit=%(limit)d&marker=%(marker)s' % {
            'args': q_args,
            'limit': limit,
            'marker': getattr(self.collection[-1], self.get_key_field())
        }

        return link.make_link('next', api.request.public_url, resource_url,
                              next_args)['href']
Exemple #16
0
def v1():
    v1 = {
        'id':
        "v1",
        'links': [
            link.make_link('self',
                           api.request.public_url,
                           'v1',
                           '',
                           bookmark=True),
            link.make_link('describedby',
                           'https://docs.openstack.org',
                           '/ironic/latest/contributor/',
                           'webapi.html',
                           bookmark=True,
                           type='text/html')
        ],
        'media_types': {
            'base': 'application/json',
            'type': 'application/vnd.openstack.ironic.v1+json'
        },
        'chassis': [
            link.make_link('self', api.request.public_url, 'chassis', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'chassis',
                           '',
                           bookmark=True)
        ],
        'nodes': [
            link.make_link('self', api.request.public_url, 'nodes', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'nodes',
                           '',
                           bookmark=True)
        ],
        'ports': [
            link.make_link('self', api.request.public_url, 'ports', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'ports',
                           '',
                           bookmark=True)
        ],
        'drivers': [
            link.make_link('self', api.request.public_url, 'drivers', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'drivers',
                           '',
                           bookmark=True)
        ],
        'version':
        version.default_version()
    }
    if utils.allow_portgroups():
        v1['portgroups'] = [
            link.make_link('self', api.request.public_url, 'portgroups', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'portgroups',
                           '',
                           bookmark=True)
        ]
    if utils.allow_volume():
        v1['volume'] = [
            link.make_link('self', api.request.public_url, 'volume', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'volume',
                           '',
                           bookmark=True)
        ]
    if utils.allow_ramdisk_endpoints():
        v1['lookup'] = [
            link.make_link('self', api.request.public_url, 'lookup', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'lookup',
                           '',
                           bookmark=True)
        ]
        v1['heartbeat'] = [
            link.make_link('self', api.request.public_url, 'heartbeat', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'heartbeat',
                           '',
                           bookmark=True)
        ]
    if utils.allow_expose_conductors():
        v1['conductors'] = [
            link.make_link('self', api.request.public_url, 'conductors', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'conductors',
                           '',
                           bookmark=True)
        ]
    if utils.allow_allocations():
        v1['allocations'] = [
            link.make_link('self', api.request.public_url, 'allocations', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'allocations',
                           '',
                           bookmark=True)
        ]
    if utils.allow_expose_events():
        v1['events'] = [
            link.make_link('self', api.request.public_url, 'events', ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'events',
                           '',
                           bookmark=True)
        ]
    if utils.allow_deploy_templates():
        v1['deploy_templates'] = [
            link.make_link('self', api.request.public_url, 'deploy_templates',
                           ''),
            link.make_link('bookmark',
                           api.request.public_url,
                           'deploy_templates',
                           '',
                           bookmark=True)
        ]
    return v1
Exemple #17
0
    def convert_with_links(name, hosts, detail=False, interface_info=None):
        """Convert driver/hardware type info to an API-serializable object.

        :param name: name of a hardware type.
        :param hosts: list of conductor hostnames driver is active on.
        :param detail: boolean, whether to include detailed info, such as
                       the 'type' field and default/enabled interfaces fields.
        :param interface_info: optional list of dicts of hardware interface
                               info.
        :returns: API-serializable driver object.
        """
        driver = Driver()
        driver.name = name
        driver.hosts = hosts
        driver.links = [
            link.make_link('self', api.request.public_url, 'drivers', name),
            link.make_link('bookmark',
                           api.request.public_url,
                           'drivers',
                           name,
                           bookmark=True)
        ]
        if api_utils.allow_links_node_states_and_driver_properties():
            driver.properties = [
                link.make_link('self', api.request.public_url, 'drivers',
                               name + "/properties"),
                link.make_link('bookmark',
                               api.request.public_url,
                               'drivers',
                               name + "/properties",
                               bookmark=True)
            ]

        if api_utils.allow_dynamic_drivers():
            # NOTE(dtantsur): only dynamic drivers (based on hardware types)
            # are supported starting with the Rocky release.
            driver.type = 'dynamic'
            if detail:
                if interface_info is None:
                    # TODO(jroll) objectify this
                    interface_info = (
                        api.request.dbapi.list_hardware_type_interfaces([name
                                                                         ]))
                for iface_type in driver_base.ALL_INTERFACES:
                    default = None
                    enabled = set()
                    for iface in interface_info:
                        if iface['interface_type'] == iface_type:
                            iface_name = iface['interface_name']
                            enabled.add(iface_name)
                            # NOTE(jroll) this assumes the default is the same
                            # on all conductors
                            if iface['default']:
                                default = iface_name

                    default_key = 'default_%s_interface' % iface_type
                    enabled_key = 'enabled_%s_interfaces' % iface_type
                    setattr(driver, default_key, default)
                    setattr(driver, enabled_key, list(enabled))

        hide_fields_in_newer_versions(driver)
        return driver
Exemple #18
0
 def convert():
     v1 = V1()
     v1.id = "v1"
     v1.links = [
         link.make_link('self',
                        api.request.public_url,
                        'v1',
                        '',
                        bookmark=True),
         link.make_link('describedby',
                        'https://docs.openstack.org',
                        '/ironic/latest/contributor/',
                        'webapi.html',
                        bookmark=True,
                        type='text/html')
     ]
     v1.media_types = [
         MediaType('application/json',
                   'application/vnd.openstack.ironic.v1+json')
     ]
     v1.chassis = [
         link.make_link('self', api.request.public_url, 'chassis', ''),
         link.make_link('bookmark',
                        api.request.public_url,
                        'chassis',
                        '',
                        bookmark=True)
     ]
     v1.nodes = [
         link.make_link('self', api.request.public_url, 'nodes', ''),
         link.make_link('bookmark',
                        api.request.public_url,
                        'nodes',
                        '',
                        bookmark=True)
     ]
     v1.ports = [
         link.make_link('self', api.request.public_url, 'ports', ''),
         link.make_link('bookmark',
                        api.request.public_url,
                        'ports',
                        '',
                        bookmark=True)
     ]
     if utils.allow_portgroups():
         v1.portgroups = [
             link.make_link('self', api.request.public_url, 'portgroups',
                            ''),
             link.make_link('bookmark',
                            api.request.public_url,
                            'portgroups',
                            '',
                            bookmark=True)
         ]
     v1.drivers = [
         link.make_link('self', api.request.public_url, 'drivers', ''),
         link.make_link('bookmark',
                        api.request.public_url,
                        'drivers',
                        '',
                        bookmark=True)
     ]
     if utils.allow_volume():
         v1.volume = [
             link.make_link('self', api.request.public_url, 'volume', ''),
             link.make_link('bookmark',
                            api.request.public_url,
                            'volume',
                            '',
                            bookmark=True)
         ]
     if utils.allow_ramdisk_endpoints():
         v1.lookup = [
             link.make_link('self', api.request.public_url, 'lookup', ''),
             link.make_link('bookmark',
                            api.request.public_url,
                            'lookup',
                            '',
                            bookmark=True)
         ]
         v1.heartbeat = [
             link.make_link('self', api.request.public_url, 'heartbeat',
                            ''),
             link.make_link('bookmark',
                            api.request.public_url,
                            'heartbeat',
                            '',
                            bookmark=True)
         ]
     if utils.allow_expose_conductors():
         v1.conductors = [
             link.make_link('self', api.request.public_url, 'conductors',
                            ''),
             link.make_link('bookmark',
                            api.request.public_url,
                            'conductors',
                            '',
                            bookmark=True)
         ]
     if utils.allow_allocations():
         v1.allocations = [
             link.make_link('self', api.request.public_url, 'allocations',
                            ''),
             link.make_link('bookmark',
                            api.request.public_url,
                            'allocations',
                            '',
                            bookmark=True)
         ]
     if utils.allow_expose_events():
         v1.events = [
             link.make_link('self', api.request.public_url, 'events', ''),
             link.make_link('bookmark',
                            api.request.public_url,
                            'events',
                            '',
                            bookmark=True)
         ]
     if utils.allow_deploy_templates():
         v1.deploy_templates = [
             link.make_link('self', api.request.public_url,
                            'deploy_templates', ''),
             link.make_link('bookmark',
                            api.request.public_url,
                            'deploy_templates',
                            '',
                            bookmark=True)
         ]
     v1.version = version.default_version()
     return v1