Search in sources :

Example 16 with AssignedGroup

use of cz.metacentrum.perun.core.api.AssignedGroup in project perun by CESNET.

the class ResourcesManagerBlImpl method copyResource.

@Override
public Resource copyResource(PerunSession sess, Resource templateResource, Resource destinationResource, boolean withGroups) throws ResourceExistsException {
    Resource newResource = new Resource();
    Vo destinationVo = this.getVo(sess, destinationResource);
    Facility destinationFacility = this.getFacility(sess, destinationResource);
    newResource.setName(destinationResource.getName());
    newResource = this.createResource(sess, newResource, destinationVo, destinationFacility);
    // resource attributes
    List<Attribute> templateResourceAttributes = perunBl.getAttributesManagerBl().getAttributes(sess, templateResource);
    // Remove all virt and core attributes before setting
    templateResourceAttributes.removeIf(resourceAttribute -> resourceAttribute.getNamespace().startsWith(AttributesManager.NS_RESOURCE_ATTR_VIRT) || resourceAttribute.getNamespace().startsWith(AttributesManager.NS_RESOURCE_ATTR_CORE));
    try {
        perunBl.getAttributesManagerBl().setAttributes(sess, newResource, templateResourceAttributes);
    } catch (WrongAttributeValueException | WrongAttributeAssignmentException | WrongReferenceAttributeValueException ex) {
        throw new ConsistencyErrorException("DB inconsistency while copying attributes from one resource to another. Cause:{}", ex);
    }
    // if withGroups is true we also copy groups and group-resource/member-resource attributes
    if (withGroups) {
        List<AssignedGroup> templateResourceGroups = perunBl.getResourcesManagerBl().getGroupAssignments(sess, templateResource, List.of());
        try {
            for (AssignedGroup assignedGroup : templateResourceGroups) {
                // assign only direct group-resource assignments
                if (assignedGroup.getSourceGroupId() == null) {
                    assignGroupToResource(sess, assignedGroup.getEnrichedGroup().getGroup(), newResource, false, assignedGroup.getStatus().equals(GroupResourceStatus.INACTIVE), assignedGroup.isAutoAssignSubgroups());
                }
                List<Attribute> templateGroupResourceAttributes = perunBl.getAttributesManagerBl().getAttributes(sess, templateResource, assignedGroup.getEnrichedGroup().getGroup());
                // Remove all virt attributes before setting
                templateGroupResourceAttributes.removeIf(groupResourceAttribute -> groupResourceAttribute.getNamespace().startsWith(AttributesManager.NS_GROUP_RESOURCE_ATTR_VIRT));
                perunBl.getAttributesManagerBl().setAttributes(sess, newResource, assignedGroup.getEnrichedGroup().getGroup(), templateGroupResourceAttributes);
            }
        } catch (GroupResourceMismatchException | WrongAttributeValueException | WrongAttributeAssignmentException | WrongReferenceAttributeValueException ex) {
            throw new ConsistencyErrorException("DB inconsistency while copying group-resource attributes. Cause:{}", ex);
        }
        List<Member> templateResourceMembers = perunBl.getResourcesManagerBl().getAssignedMembers(sess, templateResource);
        try {
            for (Member member : templateResourceMembers) {
                List<Attribute> templateMemberResourceAttributes = perunBl.getAttributesManagerBl().getAttributes(sess, member, templateResource);
                // Remove all virt attributes before setting
                templateMemberResourceAttributes.removeIf(memberResourceAttribute -> memberResourceAttribute.getNamespace().startsWith(AttributesManager.NS_MEMBER_RESOURCE_ATTR_VIRT));
                perunBl.getAttributesManagerBl().setAttributes(sess, member, newResource, templateMemberResourceAttributes);
            }
        } catch (MemberResourceMismatchException | WrongAttributeValueException | WrongAttributeAssignmentException | WrongReferenceAttributeValueException ex) {
            throw new ConsistencyErrorException("DB inconsistency while copying group-resource attributes. Cause:{}", ex);
        }
    }
    // services
    List<Service> services = getAssignedServices(sess, templateResource);
    for (Service service : services) {
        try {
            getResourcesManagerImpl().assignService(sess, newResource, service);
        } catch (ServiceAlreadyAssignedException ex) {
            throw new ConsistencyErrorException("Service was already assigned to this resource. {}", ex);
        }
    }
    // tags
    List<ResourceTag> templateResourceTags = getAllResourcesTagsForResource(sess, templateResource);
    for (ResourceTag resourceTag : templateResourceTags) {
        getResourcesManagerImpl().assignResourceTagToResource(sess, resourceTag, newResource);
    }
    return newResource;
}
Also used : ConsistencyErrorException(cz.metacentrum.perun.core.api.exceptions.ConsistencyErrorException) Attribute(cz.metacentrum.perun.core.api.Attribute) WrongAttributeAssignmentException(cz.metacentrum.perun.core.api.exceptions.WrongAttributeAssignmentException) BanSetForResource(cz.metacentrum.perun.audit.events.ResourceManagerEvents.BanSetForResource) AssignedResource(cz.metacentrum.perun.core.api.AssignedResource) BanUpdatedForResource(cz.metacentrum.perun.audit.events.ResourceManagerEvents.BanUpdatedForResource) BanRemovedForResource(cz.metacentrum.perun.audit.events.ResourceManagerEvents.BanRemovedForResource) Resource(cz.metacentrum.perun.core.api.Resource) ServiceRemovedFromResource(cz.metacentrum.perun.audit.events.ResourceManagerEvents.ServiceRemovedFromResource) GroupAssignedToResource(cz.metacentrum.perun.audit.events.ResourceManagerEvents.GroupAssignedToResource) ServiceAssignedToResource(cz.metacentrum.perun.audit.events.ResourceManagerEvents.ServiceAssignedToResource) GroupRemovedFromResource(cz.metacentrum.perun.audit.events.ResourceManagerEvents.GroupRemovedFromResource) BanOnResource(cz.metacentrum.perun.core.api.BanOnResource) RichResource(cz.metacentrum.perun.core.api.RichResource) EnrichedResource(cz.metacentrum.perun.core.api.EnrichedResource) Service(cz.metacentrum.perun.core.api.Service) ServiceAlreadyAssignedException(cz.metacentrum.perun.core.api.exceptions.ServiceAlreadyAssignedException) GroupResourceMismatchException(cz.metacentrum.perun.core.api.exceptions.GroupResourceMismatchException) ResourceTag(cz.metacentrum.perun.core.api.ResourceTag) MemberResourceMismatchException(cz.metacentrum.perun.core.api.exceptions.MemberResourceMismatchException) WrongReferenceAttributeValueException(cz.metacentrum.perun.core.api.exceptions.WrongReferenceAttributeValueException) Vo(cz.metacentrum.perun.core.api.Vo) Facility(cz.metacentrum.perun.core.api.Facility) WrongAttributeValueException(cz.metacentrum.perun.core.api.exceptions.WrongAttributeValueException) RichMember(cz.metacentrum.perun.core.api.RichMember) AssignedMember(cz.metacentrum.perun.core.api.AssignedMember) Member(cz.metacentrum.perun.core.api.Member) AssignedGroup(cz.metacentrum.perun.core.api.AssignedGroup)

Aggregations

AssignedGroup (cz.metacentrum.perun.core.api.AssignedGroup)16 AbstractPerunIntegrationTest (cz.metacentrum.perun.core.AbstractPerunIntegrationTest)10 EnrichedGroup (cz.metacentrum.perun.core.api.EnrichedGroup)10 Test (org.junit.Test)10 Group (cz.metacentrum.perun.core.api.Group)8 Resource (cz.metacentrum.perun.core.api.Resource)7 GroupResourceMismatchException (cz.metacentrum.perun.core.api.exceptions.GroupResourceMismatchException)6 WrongAttributeValueException (cz.metacentrum.perun.core.api.exceptions.WrongAttributeValueException)6 WrongReferenceAttributeValueException (cz.metacentrum.perun.core.api.exceptions.WrongReferenceAttributeValueException)6 BanOnResource (cz.metacentrum.perun.core.api.BanOnResource)5 GroupAlreadyRemovedFromResourceException (cz.metacentrum.perun.core.api.exceptions.GroupAlreadyRemovedFromResourceException)5 GroupNotDefinedOnResourceException (cz.metacentrum.perun.core.api.exceptions.GroupNotDefinedOnResourceException)5 PerunSession (cz.metacentrum.perun.core.api.PerunSession)4 GroupAlreadyAssignedException (cz.metacentrum.perun.core.api.exceptions.GroupAlreadyAssignedException)4 PerunBl (cz.metacentrum.perun.core.bl.PerunBl)4 List (java.util.List)4 Collectors (java.util.stream.Collectors)4 Logger (org.slf4j.Logger)4 LoggerFactory (org.slf4j.LoggerFactory)4 AssignedResource (cz.metacentrum.perun.core.api.AssignedResource)3