Beispiel #1
0
 def _check_resource_to_order(self, resource, resource_to_order,
                              bad_resources, try_to_fix):
     try:
         order = resource_to_order[resource.id]
     except KeyError:
         # Situation 1: There may exist resources that have no orders
         # NOTE(suo): The resource billed by month/year may also has no
         # order, but for now, we couldn't know which billing type it is
         # only from the GET resource method, on this occasion, we take
         # this resource as the hourly billing type, then create the order
         # in auto-fix process
         if resource.status == const.STATE_ERROR:
             bad_resources.append(resource)
             return
         if not resource.is_bill:
             return
         try_to_fix['1'].append(resource)
     else:
         # Situation 2: There may exist resource whose status doesn't match
         # with its order's
         if resource.status == const.STATE_ERROR:
             bad_resources.append(resource)
         elif order['unit'] in ['month', 'year']:
             # if the order is billed by month or year, we don't check
             # it for now, just pass, and set it to checked later
             pass
         elif (resource.resource_type == const.RESOURCE_LISTENER
               and resource.admin_state != order['status']):
             # for loadbalancer listener
             action_time = utils.format_datetime(timeutils.strtime())
             try_to_fix['2'].append(
                 Situation2Item(order['order_id'], resource.resource_type,
                                action_time, resource.admin_state,
                                resource.project_id))
         elif (resource.resource_type != const.RESOURCE_LISTENER
               and resource.status != order['status']):
             action_time = utils.format_datetime(timeutils.strtime())
             try_to_fix['2'].append(
                 Situation2Item(order['order_id'], resource.resource_type,
                                action_time, resource.status,
                                resource.project_id))
         # Situation 3: Resource's order has been created, but its bill not
         # be created by master
         elif (not order['cron_time']
               and order['status'] != const.STATE_STOPPED):
             try_to_fix['3'].append(
                 Situation3Item(order['order_id'], resource.created_at,
                                resource.project_id))
         # Situation 5: The order's unit_price is different from the
         # resource's actual price
         else:
             unit_price = (
                 self.RESOURCE_CREATE_MAP[resource.resource_type].\
                 get_unit_price(resource, 'hour'))
             order_unit_price = utils._quantize_decimal(order['unit_price'])
             if unit_price is not None and unit_price != order_unit_price:
                 try_to_fix['5'].append(
                     Situation5Item(order['order_id'], resource, unit_price,
                                    resource.project_id))
         resource_to_order[resource.id]['checked'] = True
Beispiel #2
0
    def load_hourly_cron_jobs(self):
        orders = self._get_cron_orders(bill_methods=['hour'],
                                       region_id=cfg.CONF.region_name)
        for order in orders:
            if not order['cron_time']:
                continue
            elif isinstance(order['cron_time'], basestring):
                cron_time = timeutils.parse_strtime(
                    order['cron_time'], fmt=ISO8601_UTC_TIME_FORMAT)
            else:
                cron_time = order['cron_time']

            # create cron job
            danger_time = (datetime.datetime.utcnow() +
                           datetime.timedelta(seconds=30))
            if cron_time > danger_time:
                self._create_cron_job(order['order_id'],
                                      start_date=cron_time)
            else:
                LOG.warning("The order(%s) is in danger time after master "
                            "started", order['order_id'])
                while cron_time <= danger_time:
                    cron_time += datetime.timedelta(hours=1)
                cron_time -= datetime.timedelta(hours=1)
                action_time = utils.format_datetime(
                    timeutils.strtime(cron_time))
                self._create_bill(self.ctxt,
                                  order['order_id'],
                                  action_time,
                                  "System Adjust")
            self.locks[order['order_id']] = gthreading.Lock()
Beispiel #3
0
    def load_hourly_cron_jobs(self):
        orders = self._get_cron_orders(bill_methods=['hour'],
                                       region_id=cfg.CONF.region_name)
        for order in orders:
            if not order['cron_time']:
                continue
            elif isinstance(order['cron_time'], basestring):
                cron_time = timeutils.parse_strtime(
                    order['cron_time'], fmt=ISO8601_UTC_TIME_FORMAT)
            else:
                cron_time = order['cron_time']

            # create cron job
            danger_time = (datetime.datetime.utcnow() +
                           datetime.timedelta(seconds=30))
            if cron_time > danger_time:
                self._create_cron_job(order['order_id'], start_date=cron_time)
            else:
                LOG.warning(
                    "The order(%s) is in danger time after master "
                    "started", order['order_id'])
                while cron_time <= danger_time:
                    cron_time += datetime.timedelta(hours=1)
                cron_time -= datetime.timedelta(hours=1)
                action_time = utils.format_datetime(
                    timeutils.strtime(cron_time))
                self._create_bill(self.ctxt, order['order_id'], action_time,
                                  "System Adjust")
            self.locks[order['order_id']] = gthreading.Lock()
Beispiel #4
0
def listener_list(project_id, region_name=None, project_name=None):
    client = get_neutronclient(region_name)
    if project_id:
        listeners = client.list_listeners(
            tenant_id=project_id).get('listeners')
    else:
        listeners = client.list_listeners().get('listeners')

    formatted_listeners = []
    for listener in listeners:
        status = utils.transform_status(listener['status'])
        admin_state = (const.STATE_RUNNING
                       if listener['admin_state_up'] else const.STATE_STOPPED)
        created_at = utils.format_datetime(
            listener.get('created_at', timeutils.strtime()))
        formatted_listeners.append(
            Listener(id=listener['id'],
                     name=listener['name'],
                     admin_state_up=listener['admin_state_up'],
                     admin_state=admin_state,
                     connection_limit=listener['connection_limit'],
                     project_id=listener['tenant_id'],
                     project_name=project_name,
                     resource_type=const.RESOURCE_LISTENER,
                     status=status,
                     original_status=listener['status'],
                     created_at=created_at))

    return formatted_listeners
Beispiel #5
0
def snapshot_list(project_id,
                  region_name=None,
                  detailed=True,
                  project_name=None):
    """To see all snapshots in the cloud as admin
    """
    c_client = get_cinderclient(region_name)
    search_opts = {'all_tenants': 1, 'project_id': project_id}
    if c_client is None:
        return []
    snapshots = c_client.volume_snapshots.list(detailed,
                                               search_opts=search_opts)
    formatted_snap = []
    for sp in snapshots:
        created_at = utils.format_datetime(sp.created_at)
        status = utils.transform_status(sp.status)
        formatted_snap.append(
            Snapshot(id=sp.id,
                     name=sp.display_name,
                     size=sp.size,
                     status=status,
                     original_status=sp.status,
                     resource_type=const.RESOURCE_SNAPSHOT,
                     user_id=None,
                     project_id=project_id,
                     project_name=project_name,
                     created_at=created_at,
                     volume_id=sp.volume_id))
    return formatted_snap
Beispiel #6
0
def floatingipset_list(project_id, region_name=None, project_name=None):
    client = get_neutronclient(region_name)
    if project_id:
        _fipsets = client.list_floatingipsets(tenant_id=project_id).get("floatingipsets")
        fipsets = [fip for fip in _fipsets if fip["tenant_id"] == project_id]

    else:
        fipsets = client.list_floatingipsets().get("floatingipsets")

    formatted_fipsets = []
    for fipset in fipsets:
        created_at = utils.format_datetime(fipset["created_at"])
        status = utils.transform_status(fipset["status"])
        formatted_fipsets.append(
            FloatingIpSet(
                id=fipset["id"],
                name=fipset["uos:name"],
                size=fipset["rate_limit"],
                providers=fipset["uos:service_provider"],
                project_id=fipset["tenant_id"],
                project_name=project_name,
                resource_type=const.RESOURCE_FLOATINGIPSET,
                status=status,
                original_status=fipset["status"],
                created_at=created_at,
            )
        )

    return formatted_fipsets
Beispiel #7
0
def listener_list(project_id, region_name=None, project_name=None):
    client = get_neutronclient(region_name)
    if project_id:
        listeners = client.list_listeners(tenant_id=project_id).get("listeners")
    else:
        listeners = client.list_listeners().get("listeners")

    formatted_listeners = []
    for listener in listeners:
        status = utils.transform_status(listener["status"])
        admin_state = const.STATE_RUNNING if listener["admin_state_up"] else const.STATE_STOPPED
        created_at = utils.format_datetime(listener.get("created_at", timeutils.strtime()))
        formatted_listeners.append(
            Listener(
                id=listener["id"],
                name=listener["name"],
                admin_state_up=listener["admin_state_up"],
                admin_state=admin_state,
                connection_limit=listener["connection_limit"],
                project_id=listener["tenant_id"],
                project_name=project_name,
                resource_type=const.RESOURCE_LISTENER,
                status=status,
                original_status=listener["status"],
                created_at=created_at,
            )
        )

    return formatted_listeners
Beispiel #8
0
def volume_list(project_id,
                region_name=None,
                detailed=True,
                project_name=None):
    """To see all volumes in the cloud as admin.
    """
    c_client = get_cinderclient(region_name)
    search_opts = {'all_tenants': 1, 'project_id': project_id}
    if c_client is None:
        return []
    volumes = c_client.volumes.list(detailed, search_opts=search_opts)
    formatted_volumes = []
    for volume in volumes:
        created_at = utils.format_datetime(volume.created_at)
        status = utils.transform_status(volume.status)
        formatted_volumes.append(
            Volume(id=volume.id,
                   name=volume.display_name,
                   size=volume.size,
                   status=status,
                   type=volume.volume_type,
                   original_status=volume.status,
                   resource_type=const.RESOURCE_VOLUME,
                   user_id=None,
                   project_id=project_id,
                   project_name=project_name,
                   attachments=volume.attachments,
                   created_at=created_at))
    return formatted_volumes
Beispiel #9
0
def listener_list(project_id, region_name=None, project_name=None):
    client = get_neutronclient(region_name)
    if project_id:
        listeners = client.list_listeners(
            tenant_id=project_id).get('listeners')
    else:
        listeners = client.list_listeners().get('listeners')

    formatted_listeners = []
    for listener in listeners:
        status = utils.transform_status(listener['status'])
        admin_state = (const.STATE_RUNNING
                       if listener['admin_state_up']
                       else const.STATE_STOPPED)
        created_at = utils.format_datetime(
            listener.get('created_at', timeutils.strtime()))
        formatted_listeners.append(
            Listener(id=listener['id'],
                     name=listener['name'],
                     admin_state_up=listener['admin_state_up'],
                     admin_state=admin_state,
                     connection_limit=listener['connection_limit'],
                     project_id=listener['tenant_id'],
                     project_name=project_name,
                     resource_type=const.RESOURCE_LISTENER,
                     status=status,
                     original_status=listener['status'],
                     created_at=created_at))

    return formatted_listeners
Beispiel #10
0
 def to_message(self):
     msg = {
         "event_type": "router.create.end.again",
         "payload": {"router": {"id": self.id, "name": self.name, "tenant_id": self.project_id}},
         "timestamp": utils.format_datetime(timeutils.strtime()),
     }
     return msg
Beispiel #11
0
def floatingip_list(project_id, region_name=None, project_name=None):
    client = get_neutronclient(region_name)
    if project_id:
        fips = client.list_floatingips(tenant_id=project_id).get('floatingips')
    else:
        fips = client.list_floatingips().get('floatingips')
    formatted_fips = []
    for fip in fips:
        created_at = utils.format_datetime(fip['created_at'])
        status = utils.transform_status(fip['status'])
        is_bill = False if fip.get('floatingipset_id') else True
        formatted_fips.append(
            FloatingIp(id=fip['id'],
                       name=fip['uos:name'],
                       is_bill=is_bill,
                       size=fip['rate_limit'],
                       providers=fip['uos:service_provider'],
                       project_id=fip['tenant_id'],
                       project_name=project_name,
                       resource_type=const.RESOURCE_FLOATINGIP,
                       status=status,
                       original_status=fip['status'],
                       created_at=created_at))

    return formatted_fips
Beispiel #12
0
def server_list(project_id, region_name=None, detailed=True, project_name=None):
    search_opts = {'all_tenants': 1,
                   'project_id': project_id}
    servers = get_novaclient(region_name).servers.list(detailed, search_opts)
    formatted_servers = []
    for server in servers:
        flavor = flavor_get(region_name, server.flavor['id'])
        image = image_get(region_name, server.image['id'])
        created_at = utils.format_datetime(server.created)
        status = utils.transform_status(server.status)
        formatted_servers.append(Server(id=server.id,
                                        name=server.name,
                                        flavor_name=flavor.name,
                                        flavor_id=flavor.id,
                                        disk_gb=getattr(image, "OS-EXT-IMG-SIZE:size") / (1024 * 1024 * 1024),
                                        image_name=image.name,
                                        image_id=image.id,
                                        status=status,
                                        original_status=server.status,
                                        resource_type=const.RESOURCE_INSTANCE,
                                        user_id=server.user_id,
                                        project_id=server.tenant_id,
                                        project_name=project_name,
                                        created_at=created_at))
    return formatted_servers
Beispiel #13
0
def volume_list(project_id, region_name=None, detailed=True, project_name=None):
    """To see all volumes in the cloud as admin.
    """
    c_client = get_cinderclient(region_name)
    search_opts = {'all_tenants': 1,
                   'project_id': project_id}
    if c_client is None:
        return []
    volumes = c_client.volumes.list(detailed, search_opts=search_opts)
    formatted_volumes = []
    for volume in volumes:
        created_at = utils.format_datetime(volume.created_at)
        status = utils.transform_status(volume.status)
        formatted_volumes.append(Volume(id=volume.id,
                                        name=volume.display_name,
                                        size=volume.size,
                                        status=status,
                                        type=volume.volume_type,
                                        original_status=volume.status,
                                        resource_type=const.RESOURCE_VOLUME,
                                        user_id = None,
                                        project_id = project_id,
                                        project_name=project_name,
                                        attachments=volume.attachments,
                                        created_at=created_at))
    return formatted_volumes
Beispiel #14
0
def snapshot_list(project_id, region_name=None, detailed=True, project_name=None):
    """To see all snapshots in the cloud as admin
    """
    c_client = get_cinderclient(region_name)
    search_opts = {'all_tenants': 1,
                   'project_id': project_id}
    if c_client is None:
        return []
    snapshots = c_client.volume_snapshots.list(detailed, search_opts=search_opts)
    formatted_snap = []
    for sp in snapshots:
        created_at = utils.format_datetime(sp.created_at)
        status = utils.transform_status(sp.status)
        formatted_snap.append(Snapshot(id=sp.id,
                                       name=sp.display_name,
                                       size=sp.size,
                                       status=status,
                                       original_status=sp.status,
                                       resource_type=const.RESOURCE_SNAPSHOT,
                                       user_id=None,
                                       project_id=project_id,
                                       project_name=project_name,
                                       created_at=created_at,
                                       volume_id=sp.volume_id))
    return formatted_snap
Beispiel #15
0
 def restore_resource(self, data):
     action_time = \
         gringutils.format_datetime(timeutils.strtime(timeutils.utcnow()))
     remarks = '%s Has Been Restored' % data.resource_type.capitalize()
     self.master_api.resource_restore(request.context, self._id,
                                      action_time,
                                      remarks)
Beispiel #16
0
def floatingipset_list(project_id, region_name=None, project_name=None):
    client = get_neutronclient(region_name)
    if project_id:
        _fipsets = client.list_floatingipsets(
            tenant_id=project_id).get('floatingipsets')
        fipsets = [fip for fip in _fipsets if fip['tenant_id'] == project_id]

    else:
        fipsets = client.list_floatingipsets().get('floatingipsets')

    formatted_fipsets = []
    for fipset in fipsets:
        created_at = utils.format_datetime(fipset['created_at'])
        status = utils.transform_status(fipset['status'])
        formatted_fipsets.append(
            FloatingIpSet(id=fipset['id'],
                          name=fipset['uos:name'],
                          size=fipset['rate_limit'],
                          providers=fipset['uos:service_provider'],
                          project_id=fipset['tenant_id'],
                          project_name=project_name,
                          resource_type=const.RESOURCE_FLOATINGIPSET,
                          status=status,
                          original_status=fipset['status'],
                          created_at=created_at))

    return formatted_fipsets
Beispiel #17
0
    def delete_resource(self, data):
        """Update the order when delete the resource"""

        action_time = \
            gringutils.format_datetime(timeutils.strtime(timeutils.utcnow()))
        remarks = '%s Has Been Deleted' % data.resource_type.capitalize()
        self.master_api.resource_deleted(request.context, self._id,
                                         action_time, remarks)
Beispiel #18
0
    def delete_resource(self, data):
        """Update the order when delete the resource"""

        action_time = \
            gringutils.format_datetime(timeutils.strtime(timeutils.utcnow()))
        remarks = '%s Has Been Deleted' % data.resource_type.capitalize()
        self.master_api.resource_deleted(request.context, self._id,
                                         action_time, remarks)
Beispiel #19
0
 def stop_resource(self, data):
     action_time = \
         gringutils.format_datetime(timeutils.strtime(timeutils.utcnow()))
     if data.resource_type == 'instance':
         self.master_api.instance_stopped(request.context, self._id,
                                          action_time)
     else:
         remarks = '%s Has Been Stopped' % data.resource_type.capitalize()
         self.master_api.resource_stopped(request.context, self._id,
                                          action_time, remarks)
Beispiel #20
0
 def stop_resource(self, data):
     action_time = \
         gringutils.format_datetime(timeutils.strtime(timeutils.utcnow()))
     if data.resource_type == 'instance':
         self.master_api.instance_stopped(request.context, self._id,
                                          action_time)
     else:
         remarks = '%s Has Been Stopped' % data.resource_type.capitalize()
         self.master_api.resource_stopped(request.context, self._id,
                                          action_time, remarks)
Beispiel #21
0
 def _check_order_to_resource(self, resource_id, order, try_to_fix):
     # if the order is billed by month or year, we don't check it
     if order['unit'] in ['month', 'year']:
         LOG.warn("The monthly/yearly billing resource %s has been "
                  "deleted, the order is %s, please check it manually",
                  resource_id, order['order_id'])
     else:
         # Situation 4: The resource of the order has been deleted
         deleted_at = utils.format_datetime(timeutils.strtime())
         try_to_fix['4'].append(Situation4Item(order['order_id'],
                                               deleted_at,
                                               order['project_id']))
Beispiel #22
0
 def to_message(self):
     msg = {
         'event_type': 'image.activate.again',
         'payload': {
             'id': self.id,
             'name': self.name,
             'size': self.size,
             'owner': self.project_id,
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #23
0
 def _check_order_to_resource(self, resource_id, order, try_to_fix):
     # if the order is billed by month or year, we don't check it
     if order['unit'] in ['month', 'year']:
         LOG.warn("The monthly/yearly billing resource %s has been "
                  "deleted, the order is %s, please check it manually",
                  resource_id, order['order_id'])
     else:
         # Situation 4: The resource of the order has been deleted
         deleted_at = utils.format_datetime(timeutils.strtime())
         try_to_fix['4'].append(Situation4Item(order['order_id'],
                                               deleted_at,
                                               order['project_id']))
Beispiel #24
0
 def to_message(self):
     msg = {
         "event_type": "alarm.creation.again",
         "payload": {
             "alarm_id": self.id,
             "detail": {"name": self.name},
             "user_id": self.user_id,
             "project_id": self.project_id,
         },
         "timestamp": utils.format_datetime(timeutils.strtime()),
     }
     return msg
Beispiel #25
0
 def to_message(self):
     msg = {
         'event_type': 'snapshot.create.end.again',
         'payload': {
             'snapshot_id': self.id,
             'display_name': self.name,
             'volume_size': self.size,
             'user_id': self.user_id,
             'tenant_id': self.project_id
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #26
0
 def to_message(self):
     msg = {
         'event_type': 'router.create.end.again',
         'payload': {
             'router': {
                 'id': self.id,
                 'name': self.name,
                 'tenant_id': self.project_id
             }
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #27
0
 def to_message(self):
     msg = {
         'event_type': 'snapshot.create.end.again',
         'payload': {
             'snapshot_id': self.id,
             'display_name': self.name,
             'volume_size': self.size,
             'user_id': self.user_id,
             'tenant_id': self.project_id
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #28
0
 def to_message(self):
     msg = {
         'event_type': 'router.create.end.again',
         'payload': {
             'router': {
                 'id': self.id,
                 'name': self.name,
                 'tenant_id': self.project_id
             }
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #29
0
 def to_message(self):
     msg = {
         'event_type': 'alarm.creation.again',
         'payload': {
             'alarm_id': self.id,
             'detail': {
                 'name': self.name,
             },
             'user_id': self.user_id,
             'project_id': self.project_id
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #30
0
 def to_message(self):
     msg = {
         'event_type': 'alarm.creation.again',
         'payload': {
             'alarm_id': self.id,
             'detail': {
                 'name': self.name,
             },
             'user_id': self.user_id,
             'project_id': self.project_id
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #31
0
 def to_message(self):
     msg = {
         'event_type': 'listener.create.end',
         'payload': {
             'listener': {
                 'id': self.id,
                 'name': self.name,
                 'admin_state_up': self.admin_state_up,
                 'connection_limit': self.connection_limit,
                 'tenant_id': self.project_id
             }
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #32
0
 def to_message(self):
     msg = {
         'event_type': 'floatingipset.create.end.again',
         'payload': {
             'floatingipset': {
                 'id': self.id,
                 'uos:name': self.name,
                 'uos:service_provider': self.providers,
                 'rate_limit': self.size,
                 'tenant_id': self.project_id
             }
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #33
0
 def to_message(self):
     msg = {
         "event_type": "floatingipset.create.end.again",
         "payload": {
             "floatingipset": {
                 "id": self.id,
                 "uos:name": self.name,
                 "uos:service_provider": self.providers,
                 "rate_limit": self.size,
                 "tenant_id": self.project_id,
             }
         },
         "timestamp": utils.format_datetime(timeutils.strtime()),
     }
     return msg
Beispiel #34
0
 def to_message(self):
     msg = {
         "event_type": "listener.create.end",
         "payload": {
             "listener": {
                 "id": self.id,
                 "name": self.name,
                 "admin_state_up": self.admin_state_up,
                 "connection_limit": self.connection_limit,
                 "tenant_id": self.project_id,
             }
         },
         "timestamp": utils.format_datetime(timeutils.strtime()),
     }
     return msg
Beispiel #35
0
 def to_message(self):
     msg = {
         'event_type': 'listener.create.end',
         'payload': {
             'listener': {
                 'id': self.id,
                 'name': self.name,
                 'admin_state_up': self.admin_state_up,
                 'connection_limit': self.connection_limit,
                 'tenant_id': self.project_id
             }
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #36
0
 def to_message(self):
     msg = {
         'event_type': 'floatingipset.create.end.again',
         'payload': {
             'floatingipset': {
                 'id': self.id,
                 'uos:name': self.name,
                 'uos:service_provider': self.providers,
                 'rate_limit': self.size,
                 'tenant_id': self.project_id
             }
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #37
0
def alarm_list(project_id, region_name=None, project_name=None):
    alarms = get_cmclient(region_name).alarms.list(q=[{'field': 'project_id',
                                                       'value': project_id}])
    formatted_alarms = []
    for alarm in alarms:
        created_at = utils.format_datetime(alarm.created_at)
        status = utils.transform_status(str(alarm.enabled))
        formatted_alarms.append(Alarm(id=alarm.alarm_id,
                                      name=alarm.name,
                                      status=status,
                                      original_status=str(alarm.enabled),
                                      resource_type=const.RESOURCE_ALARM,
                                      user_id=alarm.user_id,
                                      project_id=project_id,
                                      project_name=project_name,
                                      created_at=created_at))
    return formatted_alarms
Beispiel #38
0
def image_list(project_id, region_name=None, project_name=None):
    filters = {'owner': project_id}
    images = get_glanceclient(region_name).images.list(filters=filters)
    formatted_images = []
    for image in images:
        created_at = utils.format_datetime(image.created_at)
        status = utils.transform_status(image.status)
        formatted_images.append(Image(id=image.id,
                                      name=getattr(image, 'name', None),
                                      size=getattr(image, 'size', 0),
                                      status=status,
                                      original_status=image.status,
                                      resource_type=const.RESOURCE_IMAGE,
                                      project_id=project_id,
                                      project_name=project_name,
                                      created_at=created_at))
    return formatted_images
Beispiel #39
0
 def to_message(self):
     msg = {
         'event_type': 'compute.instance.create.end.again',
         'payload': {
             'instance_type': self.flavor_name,
             'disk_gb': self.disk_gb,
             'instance_id': self.id,
             'display_name': self.name,
             'user_id': self.user_id,
             'tenant_id': self.project_id,
             'image_name': self.image_name,
             'image_meta': {
                 'base_image_ref': self.image_id
             }
         },
         'timestamp': utils.format_datetime(timeutils.strtime())
     }
     return msg
Beispiel #40
0
    def resize_resource(self, data):
        """Update the order when resize the resource"""

        action_time = \
            gringutils.format_datetime(timeutils.strtime(timeutils.utcnow()))
        remarks = '%s Has Been Resized' % data.resource_type.capitalize()

        self._validate_resize(data.as_dict())

        if data.resource_type == 'instance':
            self.master_api.instance_resized(request.context, self._id,
                                             action_time, data.new_flavor,
                                             data.old_flavor, data.service,
                                             data.region_id, remarks)
        else:
            self.master_api.resource_resized(request.context, self._id,
                                             action_time, data.quantity,
                                             remarks)
Beispiel #41
0
    def resize_resource(self, data):
        """Update the order when resize the resource"""

        action_time = \
            gringutils.format_datetime(timeutils.strtime(timeutils.utcnow()))
        remarks = '%s Has Been Resized' % data.resource_type.capitalize()

        self._validate_resize(data.as_dict())

        if data.resource_type == 'instance':
            self.master_api.instance_resized(request.context, self._id,
                                             action_time, data.new_flavor,
                                             data.old_flavor, data.service,
                                             data.region_id, remarks)
        else:
            self.master_api.resource_resized(request.context,
                                             self._id, action_time,
                                             data.quantity, remarks)
Beispiel #42
0
def router_list(project_id, region_name=None, project_name=None):
    client = get_neutronclient(region_name)
    if project_id:
        routers = client.list_routers(tenant_id=project_id).get('routers')
    else:
        routers = client.list_routers().get('routers')
    formatted_routers = []
    for router in routers:
        created_at = utils.format_datetime(router['created_at'])
        status = utils.transform_status(router['status'])
        formatted_routers.append(Router(id=router['id'],
                                        name=router['name'],
                                        project_id=router['tenant_id'],
                                        project_name=project_name,
                                        resource_type=const.RESOURCE_ROUTER,
                                        status=status,
                                        original_status=router['status'],
                                        created_at=created_at))
    return formatted_routers
Beispiel #43
0
 def post(self, data):
     conn = pecan.request.db_conn
     try:
         order = conn.create_order(request.context, **data.as_dict())
         if order.unit in ['month', 'year']:
             self.master_api.create_monthly_job(
                 request.context, order.order_id,
                 timeutils.isotime(order.cron_time))
         else:
             action_time = \
                 gringutils.format_datetime(
                     timeutils.strtime(timeutils.utcnow()))
             remarks = '%s Has Been Created.' % order.type.capitalize()
             self.master_api.resource_created(request.context,
                                              order.order_id, action_time,
                                              remarks)
     except Exception as e:
         LOG.exception('Fail to create order: %s, for reason %s' %
                       (data.as_dict(), e))
Beispiel #44
0
def router_list(project_id, region_name=None, project_name=None):
    client = get_neutronclient(region_name)
    if project_id:
        routers = client.list_routers(tenant_id=project_id).get('routers')
    else:
        routers = client.list_routers().get('routers')
    formatted_routers = []
    for router in routers:
        created_at = utils.format_datetime(router['created_at'])
        status = utils.transform_status(router['status'])
        formatted_routers.append(
            Router(id=router['id'],
                   name=router['name'],
                   project_id=router['tenant_id'],
                   project_name=project_name,
                   resource_type=const.RESOURCE_ROUTER,
                   status=status,
                   original_status=router['status'],
                   created_at=created_at))
    return formatted_routers
Beispiel #45
0
 def post(self, data):
     conn = pecan.request.db_conn
     try:
         order = conn.create_order(request.context, **data.as_dict())
         if order.unit in ['month', 'year']:
             self.master_api.create_monthly_job(
                 request.context, order.order_id,
                 timeutils.isotime(order.cron_time))
         else:
             action_time = \
                 gringutils.format_datetime(
                     timeutils.strtime(timeutils.utcnow()))
             remarks = '%s Has Been Created.' % order.type.capitalize()
             self.master_api.resource_created(request.context,
                                              order.order_id,
                                              action_time,
                                              remarks)
     except Exception as e:
         LOG.exception('Fail to create order: %s, for reason %s' %
                       (data.as_dict(), e))
Beispiel #46
0
def alarm_list(project_id, region_name=None, project_name=None):
    alarms = get_cmclient(region_name).alarms.list(q=[{
        'field': 'project_id',
        'value': project_id
    }])
    formatted_alarms = []
    for alarm in alarms:
        created_at = utils.format_datetime(alarm.created_at)
        status = utils.transform_status(str(alarm.enabled))
        formatted_alarms.append(
            Alarm(id=alarm.alarm_id,
                  name=alarm.name,
                  status=status,
                  original_status=str(alarm.enabled),
                  resource_type=const.RESOURCE_ALARM,
                  user_id=alarm.user_id,
                  project_id=project_id,
                  project_name=project_name,
                  created_at=created_at))
    return formatted_alarms
Beispiel #47
0
def share_list(project_id, region_name=None, detailed=True, project_name=None):
    """To see all shares in the cloud as admin.
    """
    m_client = get_manilaclient(region_name)
    search_opts = {'all_tenants': 1, 'project_id': project_id}
    shares = m_client.shares.list(detailed, search_opts=search_opts)
    formatted_shares = []
    for share in shares:
        created_at = utils.format_datetime(share.created_at)
        status = utils.transform_status(share.status)
        formatted_shares.append(
            Share(id=share.id,
                  name=share.name,
                  size=share.size,
                  volume_type=share.volume_type,
                  status=status,
                  original_status=share.status,
                  resource_type=const.RESOURCE_SHARE,
                  user_id=None,
                  project_id=project_id,
                  project_name=project_name,
                  created_at=created_at))
    return formatted_shares
Beispiel #48
0
def share_list(project_id, region_name=None, detailed=True, project_name=None):
    """To see all shares in the cloud as admin.
    """
    m_client = get_manilaclient(region_name)
    search_opts = {'all_tenants': 1,
                   'project_id': project_id}
    shares = m_client.shares.list(detailed, search_opts=search_opts)
    formatted_shares = []
    for share in shares:
        created_at = utils.format_datetime(share.created_at)
        status = utils.transform_status(share.status)
        formatted_shares.append(Share(id=share.id,
                                      name=share.name,
                                      size=share.size,
                                      volume_type=share.volume_type,
                                      status=status,
                                      original_status=share.status,
                                      resource_type=const.RESOURCE_SHARE,
                                      user_id = None,
                                      project_id = project_id,
                                      project_name=project_name,
                                      created_at=created_at))
    return formatted_shares
Beispiel #49
0
 def start_resource(self, data):
     action_time = \
         gringutils.format_datetime(timeutils.strtime(timeutils.utcnow()))
     remarks = '%s Has Been Started' % data.resource_type.capitalize()
     self.master_api.resource_started(request.context, self._id,
                                      action_time, remarks)
Beispiel #50
0
 def _check_resource_to_order(self, resource, resource_to_order,
                              bad_resources, try_to_fix):
     try:
         order = resource_to_order[resource.id]
     except KeyError:
         # Situation 1: There may exist resources that have no orders
         # NOTE(suo): The resource billed by month/year may also has no
         # order, but for now, we couldn't know which billing type it is
         # only from the GET resource method, on this occasion, we take
         # this resource as the hourly billing type, then create the order
         # in auto-fix process
         if resource.status == const.STATE_ERROR:
             bad_resources.append(resource)
             return
         if not resource.is_bill:
             return
         try_to_fix['1'].append(resource)
     else:
         # Situation 2: There may exist resource whose status doesn't match
         # with its order's
         if resource.status == const.STATE_ERROR:
             bad_resources.append(resource)
         elif order['unit'] in ['month', 'year']:
             # if the order is billed by month or year, we don't check
             # it for now, just pass, and set it to checked later
             pass
         elif (resource.resource_type == const.RESOURCE_LISTENER and
               resource.admin_state != order['status']):
             # for loadbalancer listener
             action_time = utils.format_datetime(timeutils.strtime())
             try_to_fix['2'].append(Situation2Item(order['order_id'],
                                                   resource.resource_type,
                                                   action_time,
                                                   resource.admin_state,
                                                   resource.project_id))
         elif (resource.resource_type != const.RESOURCE_LISTENER and
               resource.status != order['status']):
             action_time = utils.format_datetime(timeutils.strtime())
             try_to_fix['2'].append(Situation2Item(order['order_id'],
                                                   resource.resource_type,
                                                   action_time,
                                                   resource.status,
                                                   resource.project_id))
         # Situation 3: Resource's order has been created, but its bill not
         # be created by master
         elif (not order['cron_time'] and
               order['status'] != const.STATE_STOPPED):
             try_to_fix['3'].append(Situation3Item(order['order_id'],
                                                   resource.created_at,
                                                   resource.project_id))
         # Situation 5: The order's unit_price is different from the
         # resource's actual price
         else:
             unit_price = (
                 self.RESOURCE_CREATE_MAP[resource.resource_type].\
                 get_unit_price(resource, 'hour'))
             order_unit_price = utils._quantize_decimal(order['unit_price'])
             if unit_price is not None and unit_price != order_unit_price:
                 try_to_fix['5'].append(Situation5Item(order['order_id'],
                                                       resource,
                                                       unit_price,
                                                       resource.project_id))
         resource_to_order[resource.id]['checked'] = True