コード例 #1
0
def create_blazar_client(config, session):
    """Check the reservation, creates a new one if nescessary."""
    return blazar_client.Client(
        session=session,
        service_type="reservation",
        region_name=os.environ["OS_REGION_NAME"],
    )
コード例 #2
0
def blazarclient(request):
    try:
        api_url = base.url_for(request, 'reservation')
    except exceptions.ServiceCatalogException:
        LOG.debug('No Reservation service is configured.')
        return None

    LOG.debug('blazarclient connection created using the token "%s" and url'
              '"%s"' % (request.user.token.id, api_url))
    return blazar_client.Client(blazar_url=api_url,
                                auth_token=request.user.token.id)
コード例 #3
0
ファイル: blazar.py プロジェクト: wxy8961230/heat
    def _create(self, version=None):
        interface = self._get_client_option(CLIENT_NAME, 'endpoint_type')
        args = {
            'session': self.context.keystone_session,
            'service_type': self.RESERVATION,
            'interface': interface,
            'region_name': self._get_region_name(),
        }

        client = blazar_client.Client(**args)
        return client
コード例 #4
0
ファイル: tasks.py プロジェクト: ChameleonCloud/portal
def get_lease_info(sess, user_id, project_id):
    lease_list = []
    blazar = blazar_client.Client("1",
                                  service_type="reservation",
                                  interface="publicURL",
                                  session=sess)
    ironic = ironic_client.Client("1", session=sess)
    leases = blazar.lease.list()
    for lease in leases:
        if lease.get("user_id") != user_id or lease.get(
                "project_id") != project_id:
            continue

        # Ignore if more than 3 days out of date
        end_date = parser.parse(lease.get("end_date"))
        date_diff = datetime.utcnow() - end_date
        if date_diff.days > 3:
            continue

        lease_dict = {}
        lease_dict["name"] = lease.get("name")
        lease_dict["status"] = lease.get("status")
        lease_dict["start_date"] = str(parser.parse(lease.get("start_date")))
        lease_dict["end_date"] = str(end_date)
        lease_dict["id"] = lease.get("id")

        lease_dict["hosts"] = []
        resource_map = {r["id"]: r for r in blazar.host.list()}
        for blazar_host in blazar.host.list_allocations():
            if any(res["lease_id"] == lease_dict["id"]
                   for res in blazar_host["reservations"]):
                resource_host = resource_map[blazar_host["resource_id"]]
                host = {
                    "node_name": resource_host["node_name"],
                    "uid": resource_host["uid"],
                    "node_type": resource_host["node_type"],
                }
                node = ironic.node.get(resource_host["uid"])
                host["provision_state"] = node.provision_state
                host["instance_uuid"] = node.instance_uuid
                host["last_error"] = node.last_error
                lease_dict["hosts"].append(host)

        lease_dict["networks"] = []
        resource_map = {r["id"]: r for r in blazar.network.list()}
        for network in blazar.network.list_allocations():
            if any(res["lease_id"] == lease_dict["id"]
                   for res in network["reservations"]):
                lease_dict["networks"].append(
                    resource_map[network["resource_id"]])
        lease_list.append(lease_dict)
    return lease_list
コード例 #5
0
 def blazarclient(cls):
     data = cls.get_credentials()
     domain_name = data.pop('domain_name')
     data['user_domain_name'] = domain_name
     data['project_domain_name'] = domain_name
     auth_ses = clients.OpenstackClients(auth_attr=data).keystone_session
     args = {
         'session': auth_ses,
         'service_type': 'reservation',
         'interface': 'public',
         'region_name': 'RegionOne',
     }
     client = blazar_client.Client(**args)
     return client
コード例 #6
0
 def authenticate_user(self):
     """Authenticate user and set client by using passed params."""
     auth = loading.load_auth_from_argparse_arguments(self.options)
     sess = loading.load_session_from_argparse_arguments(
         self.options, auth=auth)
     self.client = blazar_client.Client(
         self.options.os_reservation_api_version,
         session=sess,
         service_type=(self.options.service_type or
                       self.options.os_service_type),
         interface=self.options.endpoint_type or self.options.os_interface,
         region_name=self.options.os_region_name,
     )
     return
コード例 #7
0
ファイル: views.py プロジェクト: msherman64/portal
def get_lease_info(psess):
    lease_list = []
    blazar = blazar_client.Client('1',
                                  service_type='reservation',
                                  interface='publicURL',
                                  session=psess)
    leases = blazar.lease.list()
    for lease in leases:
        lease_dict = {}
        lease_dict['name'] = lease.get('name')
        lease_dict['status'] = lease.get('status')
        lease_dict['start_date'] = str(parser.parse(lease.get('start_date')))
        lease_dict['end_date'] = str(parser.parse(lease.get('end_date')))
        lease_dict['id'] = lease.get('id')
        lease_list.append(lease_dict)
    return lease_list
コード例 #8
0
def reserve(sess, node, start_time, requested_hours, reason, operator, dryrun):
    end_time = start_time + datetime.timedelta(hours=requested_hours)

    start_time_str_in_ct = start_time.replace(
        tzinfo=tz.gettz('UTC')).astimezone(
            tz.gettz('America/Chicago')).strftime(DATETIME_STR_FORMAT)
    end_time_str_in_ct = end_time.replace(tzinfo=tz.gettz('UTC')).astimezone(
        tz.gettz('America/Chicago')).strftime(DATETIME_STR_FORMAT)

    print((
        ("Creating maintenance reservation for node {node_name} "
         "(id: {node_uuid}), starting {start} and ending {end} in central time"
         ).format(node_name=node.name,
                  node_uuid=node.uuid,
                  start=start_time_str_in_ct,
                  end=end_time_str_in_ct)))

    if not dryrun:
        blazar = blazar_client.Client(1,
                                      session=sess,
                                      service_type='reservation')
        resource_properties = '["=", "$uid", "{node_uuid}"]'.format(
            node_uuid=node.uuid)
        phys_res = {
            'min': "1",
            'max': "1",
            'hypervisor_properties': "",
            'resource_properties': resource_properties,
            'resource_type': 'physical:host'
        }
        lease_name = MAINT_LEASE_NAME.format(
            node_name=node.name.replace(' ', '_'),
            operator=operator.replace(' ', '_'),
            reason=reason.replace(' ', '_'))
        lease = blazar.lease.create(
            name=lease_name,
            start=start_time.strftime('%Y-%m-%d %H:%M'),
            end=end_time.strftime('%Y-%m-%d %H:%M'),
            reservations=[phys_res],
            events=[])
        print(("Lease {name} (id: {id}) created successfully!".format(
            name=lease['name'], id=lease['id'])))

    return start_time_str_in_ct, end_time_str_in_ct
コード例 #9
0
def create_blazar_client(config):
    """Check the reservation, creates a new one if nescessary."""

    kclient = keystone.Client(auth_url=os.environ["OS_AUTH_URL"],
                              username=os.environ["OS_USERNAME"],
                              password=os.environ["OS_PASSWORD"],
                              tenant_id=os.environ["OS_TENANT_ID"])

    auth = kclient.authenticate()
    if auth:
        blazar_url = kclient.service_catalog.url_for(
            service_type='reservation')
    else:
        raise Exception("User *%s* is not authorized." %
                        os.environ["OS_USERNAME"])

    # let the version by default
    return blazar_client.Client(blazar_url=blazar_url,
                                auth_token=kclient.auth_token)
コード例 #10
0
    def authenticate_user(self):
        """Authenticate user and set client by using passed params."""

        if self.options.os_token:
            auth = identity.Token(
                auth_url=self.options.os_auth_url,
                token=self.options.os_token,
                tenant_id=self.options.os_tenant_id,
                tenant_name=self.options.os_tenant_name,
                project_id=self.options.os_project_id,
                project_name=self.options.os_project_name,
                project_domain_id=self.options.os_project_domain_id,
                project_domain_name=self.options.os_project_domain_name
            )
        else:
            auth = identity.Password(
                auth_url=self.options.os_auth_url,
                username=self.options.os_username,
                tenant_id=self.options.os_tenant_id,
                tenant_name=self.options.os_tenant_name,
                password=self.options.os_password,
                project_id=self.options.os_project_id,
                project_name=self.options.os_project_name,
                project_domain_id=self.options.os_project_domain_id,
                project_domain_name=self.options.os_project_domain_name,
                user_domain_id=self.options.os_user_domain_id,
                user_domain_name=self.options.os_user_domain_name
            )

        sess = session.Session(
            auth=auth,
            verify=(self.options.os_cacert or not self.options.insecure)
        )

        self.client = blazar_client.Client(
            self.options.os_reservation_api_version,
            session=sess,
            service_type=self.options.service_type,
            interface=self.options.endpoint_type,
            region_name=self.options.os_region_name,
        )
        return