Esempio n. 1
0
def instances_rm(region_id, device, instances, images, instance_states, region_conn):
    '''
    Return instances RelationshipMap given region_id and an InstanceInfo
    ResultSet.
    '''
    instance_data = []
    image_filters = []
    for instance in instances:
        image_filters.append(instance.image_id)

    if image_filters:
        data = region_conn.get_all_images(image_ids=image_filters)
        images.extend(data)

    image_ids = [x.id for x in images]
    for instance in instances:
        data = get_instance_data(instance, image_ids)
        data.update({
            'guest': check_tag(device.zAWSDiscover, instance.tags),
            'pem_path': path_to_pem(region_id, device.zAWSRegionPEM),
        })
        instance_states[data['id']] = prodState(data['state'])
        instance_data.append(data)

    return RelationshipMap(
        compname='regions/%s' % region_id,
        relname='instances',
        modname=MODULE_NAME['EC2Instance'],
        objmaps=instance_data
    )
    def create_guest(self, state='running'):
        '''
        Create guest device for this instance if it doesn't already
        exist.
        '''
        if not self.guest:
            return

        # Create guest device only if it was not created before
        if self._has_guest:
            return

        deviceclass = self.guest_deviceclass()
        if not deviceclass:
            return

        manage_ip = self.guest_manage_ip()
        if not manage_ip:
            return

        collector = self.guest_collector()
        if not collector:
            return

        if self.guest_device():
            return

        LOG.info(
            'instance %s running. Discovering guest device',
            self.titleOrId())

        device = deviceclass.createInstance(self.id)
        device.title = self.title
        device.setManageIp(manage_ip)
        device.setPerformanceMonitor(collector.id)
        device.setProdState(prodState(self.state.lower()))
        device.setZenProperty('zKeyPath', self.pem_path)
        device.index_object()
        notify(IndexingEvent(device))

        # Schedule a modeling job for the new device.
        device.collectDevice(setlog=False, background=True)

        self._has_guest = True
Esempio n. 3
0
def get_instances_relmap(region_id, ds, instances, images,
                         instance_states, region_conn):
    """
    Return instances RelationshipMap given region_id and an InstanceInfo
    ResultSet.
    """
    image_filters = [i.image_id for i in instances]
    if image_filters:
        try:
            image_data = yield region_conn.get_all_images(
                image_ids=image_filters)
        except Exception as e:
            log.warning("Unable to retrieve image data for "
                        "plugin: %s, template: %s, datasource: %s, "
                        "device: %s, component: %s, %s",
                        ds.plugin_classname, ds.template, ds.datasource,
                        ds.device, ds.component, str(e))
        else:
            images.extend(image_data)

    instance_data = []
    image_ids = [x.id for x in images]
    for instance in instances:
        data = get_instance_data(instance, image_ids)
        data.update({
            'guest': check_tag(ds.zAWSDiscover, instance.tags),
            'pem_path': path_to_pem(region_id, ds.zAWSRegionPEM),
        })
        instance_states[data['id']] = prodState(data['state'])
        instance_data.append(data)

    defer.returnValue(
        RelationshipMap(
            compname='regions/%s' % region_id,
            relname='instances',
            modname=MODULE_NAME['EC2Instance'],
            objmaps=instance_data
        )
    )
Esempio n. 4
0
def reserved_instances_rm(region_id, reserved_instances, instance_states):
    obj_map = []
    for ri in reserved_instances:
        # ZEN-17556: Ignore reserved instances with a None id.
        if ri.id is None:
            continue

        obj_map.append({
            'id': prepId(ri.id),
            'title': ri.id,
            'reserved_instance_id': ri.id,
            'instance_type': ri.instance_type,
            'state': ri.state,
        })

        instance_states[prepId(ri.id)] = prodState(ri.state)

    return RelationshipMap(
        compname='regions/%s' % region_id,
        relname='reserved_instances',
        modname=MODULE_NAME['EC2ReservedInstance'],
        objmaps=obj_map
    )