Search in sources :

Example 6 with UpdateConsumerCheckIn

use of org.candlepin.auth.UpdateConsumerCheckIn in project candlepin by candlepin.

the class HypervisorResource method hypervisorUpdate.

/**
 * @deprecated Use the asynchronous method
 * @return HypervisorCheckInResult
 */
@ApiOperation(notes = "Updates the list of Hypervisor Guests Allows agents such as " + "virt-who to update its host list and associate the guests for each host. This is " + "typically used when a host is unable to register to candlepin via subscription" + " manager.  In situations where consumers already exist it is probably best not " + "to allow creation of new hypervisor consumers.  Most consumers do not have a" + " hypervisorId attribute, so that should be added manually when necessary by the " + "management environment. @deprecated Use the asynchronous method", value = "hypervisorUpdate")
@ApiResponses({ @ApiResponse(code = 202, message = "") })
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Deprecated
@Transactional
@UpdateConsumerCheckIn
@SuppressWarnings("checkstyle:indentation")
public HypervisorCheckInResult hypervisorUpdate(Map<String, List<GuestIdDTO>> hostGuestDTOMap, @Context Principal principal, @QueryParam("owner") @Verify(value = Owner.class, require = Access.READ_ONLY, subResource = SubResource.HYPERVISOR) String ownerKey, @ApiParam("specify whether or not to create missing hypervisors." + "Default is true.  If false is specified, hypervisorIds that are not found" + "will result in failed entries in the resulting HypervisorCheckInResult") @QueryParam("create_missing") @DefaultValue("true") boolean createMissing) {
    log.debug("Hypervisor check-in by principal: {}", principal);
    if (hostGuestDTOMap == null) {
        log.debug("Host/Guest mapping provided during hypervisor checkin was null.");
        throw new BadRequestException(i18n.tr("Host to guest mapping was not provided for hypervisor check-in."));
    }
    Owner owner = this.getOwner(ownerKey);
    if (owner.isAutobindDisabled()) {
        log.debug("Could not update host/guest mapping. Auto-attach is disabled for owner {}", owner.getKey());
        throw new BadRequestException(i18n.tr("Could not update host/guest mapping. Auto-attach is disabled for owner {0}.", owner.getKey()));
    }
    if (hostGuestDTOMap.remove("") != null) {
        log.warn("Ignoring empty hypervisor id");
    }
    // Maps virt hypervisor ID to registered consumer for that hypervisor, should one exist:
    VirtConsumerMap hypervisorConsumersMap = consumerCurator.getHostConsumersMap(owner, hostGuestDTOMap.keySet());
    int emptyGuestIdCount = 0;
    Set<String> allGuestIds = new HashSet<>();
    Collection<List<GuestIdDTO>> idsLists = hostGuestDTOMap.values();
    for (List<GuestIdDTO> guestIds : idsLists) {
        // See bzs 1332637, 1332635
        if (guestIds == null) {
            continue;
        }
        for (Iterator<GuestIdDTO> guestIdsItr = guestIds.iterator(); guestIdsItr.hasNext(); ) {
            String id = guestIdsItr.next().getGuestId();
            if (StringUtils.isEmpty(id)) {
                emptyGuestIdCount++;
                guestIdsItr.remove();
            } else {
                allGuestIds.add(id);
            }
        }
    }
    if (emptyGuestIdCount > 0) {
        log.warn("Ignoring {} empty/null guest id(s).", emptyGuestIdCount);
    }
    HypervisorCheckInResult result = new HypervisorCheckInResult();
    for (Entry<String, List<GuestIdDTO>> hostEntry : hostGuestDTOMap.entrySet()) {
        String hypervisorId = hostEntry.getKey();
        // See bzs 1332637, 1332635
        if (hostEntry.getValue() == null) {
            hostEntry.setValue(new ArrayList<>());
        }
        try {
            log.debug("Syncing virt host: {} ({} guest IDs)", hypervisorId, hostEntry.getValue().size());
            boolean hostConsumerCreated = false;
            boolean updatedType = false;
            // Attempt to find a consumer for the given hypervisorId
            Consumer consumer = null;
            if (hypervisorConsumersMap.get(hypervisorId) == null) {
                if (!createMissing) {
                    log.info("Unable to find hypervisor with id {} in org {}", hypervisorId, ownerKey);
                    result.failed(hypervisorId, i18n.tr("Unable to find hypervisor in org \"{0}\"", ownerKey));
                    continue;
                }
                log.debug("Registering new host consumer for hypervisor ID: {}", hypervisorId);
                consumer = createConsumerForHypervisorId(hypervisorId, owner, principal);
                hostConsumerCreated = true;
            } else {
                consumer = hypervisorConsumersMap.get(hypervisorId);
                if (!hypervisorType.getId().equals(consumer.getTypeId())) {
                    consumer.setType(hypervisorType);
                    updatedType = true;
                }
            }
            List<GuestId> guestIds = new ArrayList<>();
            guestIdResource.populateEntities(guestIds, hostEntry.getValue());
            boolean guestIdsUpdated = addGuestIds(consumer, guestIds);
            Date now = new Date();
            consumerCurator.updateLastCheckin(consumer, now);
            consumer.setLastCheckin(now);
            // Populate the result with the processed consumer.
            if (hostConsumerCreated) {
                result.created(consumer);
            } else if (guestIdsUpdated || updatedType) {
                result.updated(consumer);
            } else {
                result.unchanged(consumer);
            }
        } catch (Exception e) {
            log.error("Hypervisor checkin failed", e);
            result.failed(hypervisorId, e.getMessage());
        }
    }
    log.info("Summary of hypervisor checkin by principal \"{}\": {}", principal, result);
    return result;
}
Also used : GuestIdDTO(org.candlepin.dto.api.v1.GuestIdDTO) Owner(org.candlepin.model.Owner) ArrayList(java.util.ArrayList) Date(java.util.Date) NotFoundException(org.candlepin.common.exceptions.NotFoundException) BadRequestException(org.candlepin.common.exceptions.BadRequestException) Consumer(org.candlepin.model.Consumer) VirtConsumerMap(org.candlepin.model.VirtConsumerMap) GuestId(org.candlepin.model.GuestId) BadRequestException(org.candlepin.common.exceptions.BadRequestException) List(java.util.List) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) HypervisorCheckInResult(org.candlepin.resource.dto.HypervisorCheckInResult) UpdateConsumerCheckIn(org.candlepin.auth.UpdateConsumerCheckIn) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes) Produces(javax.ws.rs.Produces) ApiOperation(io.swagger.annotations.ApiOperation) ApiResponses(io.swagger.annotations.ApiResponses) Transactional(com.google.inject.persist.Transactional)

Aggregations

ApiOperation (io.swagger.annotations.ApiOperation)6 ApiResponses (io.swagger.annotations.ApiResponses)6 Produces (javax.ws.rs.Produces)6 UpdateConsumerCheckIn (org.candlepin.auth.UpdateConsumerCheckIn)6 Path (javax.ws.rs.Path)5 BadRequestException (org.candlepin.common.exceptions.BadRequestException)5 Consumer (org.candlepin.model.Consumer)5 Consumes (javax.ws.rs.Consumes)4 ConsumerType (org.candlepin.model.ConsumerType)4 DeletedConsumer (org.candlepin.model.DeletedConsumer)4 Transactional (com.google.inject.persist.Transactional)3 IOException (java.io.IOException)3 GeneralSecurityException (java.security.GeneralSecurityException)3 ArrayList (java.util.ArrayList)3 LinkedList (java.util.LinkedList)2 GET (javax.ws.rs.GET)2 POST (javax.ws.rs.POST)2 PUT (javax.ws.rs.PUT)2 NotFoundException (org.candlepin.common.exceptions.NotFoundException)2 ContentAccessCertificate (org.candlepin.model.ContentAccessCertificate)2