private boolean isKubernetesComposite(CompositeComponent component) { if (component.componentLinks == null || component.componentLinks.isEmpty()) { return false; } for (String link : component.componentLinks) { Class<? extends ResourceState> componentClass = CompositeComponentRegistry .metaByStateLink(link).stateClass; if (!BaseKubernetesState.class.isAssignableFrom(componentClass)) { return false; } } return true; }
private static boolean isKubernetesType(String descriptionLink) { ComponentMeta meta = CompositeComponentRegistry.metaByDescriptionLink(descriptionLink); ResourceType resourceType = ResourceType.fromName(meta.resourceType); switch (resourceType) { case KUBERNETES_GENERIC_TYPE: case KUBERNETES_DEPLOYMENT_TYPE: case KUBERNETES_POD_TYPE: case KUBERNETES_REPLICATION_CONTROLLER_TYPE: case KUBERNETES_SERVICE_TYPE: return true; default: return false; } } }
private Class<? extends ResourceState> getStateClass(String resourceType) { ComponentMeta meta = CompositeComponentRegistry.metaByType(resourceType); if (ComputeState.class.isAssignableFrom(meta.stateClass)) { return ComputeState.class; } return meta.stateClass; }
/** * Retrieve factory link for a Component by component's description link. */ public static String descriptionFactoryLinkByDescriptionLink(String descriptionLink) { return getEntry(descriptionFactoryPrefix(descriptionLink)).descriptionFactoryLink; }
/** * Register new component meta data. */ public static void registerComponent(String resourceType, String descriptionFactoryLink, Class<? extends ResourceState> descriptionClass, String stateFactoryLink, Class<? extends ResourceState> stateClass) { registerComponent(resourceType, descriptionFactoryLink, descriptionClass, stateFactoryLink, stateClass, stateClass); }
private NestedState createComponentNestedState(ComponentTemplate<?> component) { NestedState nestedState = new NestedState(); nestedState.object = (ServiceDocument) component.data; nestedState.children = component.children; ResourceType resourceType = ResourceType.fromContentType(component.type); String factoryLink = CompositeComponentRegistry .descriptionFactoryLinkByType(resourceType.getName()); nestedState.factoryLink = factoryLink; return nestedState; }
private Operation createCloneOperation(String resourceType, ServiceDocument component, String projectLink) { if (component instanceof ResourceState) { String factoryLink = CompositeComponentRegistry .descriptionFactoryLinkByDescriptionLink(component.documentSelfLink); if (factoryLink == null) { throw new LocalizableValidationException( "Cannot clone unsupported type " + resourceType, "compute.clone.unsupported.type", resourceType); } ResourceState cloned = Utils.clone((ResourceState) component); if (cloned.customProperties == null) { cloned.customProperties = new HashMap<>(); } cloned.customProperties.put(CloneableResource.PARENT_RESOURCE_LINK_PROPERTY_NAME, cloned.documentSelfLink); cloned.documentSelfLink = null; Operation post = Operation.createPost(this, factoryLink) .setBody(cloned); if (projectLink != null && projectLink.isEmpty()) { post.addRequestHeader(OperationUtil.PROJECT_ADMIRAL_HEADER, projectLink); } return post; } throw new LocalizableValidationException("Cannot clone unsupported type " + resourceType, "compute.clone.unsupported.type", resourceType); }
CompositeComponentRegistry.registerComponent(ResourceType.CONTAINER_TYPE.getName(), ContainerDescriptionService.FACTORY_LINK, ContainerDescription.class, ContainerFactoryService.SELF_LINK, ContainerState.class); CompositeComponentRegistry.registerComponent(ResourceType.NETWORK_TYPE.getName(), ContainerNetworkDescriptionService.FACTORY_LINK, ContainerNetworkDescription.class, ContainerNetworkService.FACTORY_LINK, ContainerNetworkState.class); CompositeComponentRegistry.registerComponent(ResourceType.COMPUTE_TYPE.getName(), ComputeDescriptionService.FACTORY_LINK, TemplateComputeDescription.class, CompositeComponentRegistry.registerComponent(ResourceType.VOLUME_TYPE.getName(), ContainerVolumeDescriptionService.FACTORY_LINK, ContainerVolumeDescription.class, ContainerVolumeService.FACTORY_LINK, ContainerVolumeState.class); CompositeComponentRegistry.registerComponent(ResourceType.CLOSURE_TYPE.getName(), ClosureDescriptionFactoryService.FACTORY_LINK, ClosureDescription.class, ClosureFactoryService.FACTORY_LINK, Closure.class); CompositeComponentRegistry.registerComponent(ResourceType.KUBERNETES_GENERIC_TYPE.getName(), KubernetesDescriptionService.FACTORY_LINK, KubernetesDescription.class, GenericKubernetesEntityFactoryService.SELF_LINK, GenericKubernetesEntityState.class); CompositeComponentRegistry.registerComponent(ResourceType.KUBERNETES_POD_TYPE.getName(), KubernetesDescriptionService.FACTORY_LINK, KubernetesDescription.class, PodFactoryService.SELF_LINK, PodState.class); .registerComponent(ResourceType.KUBERNETES_DEPLOYMENT_TYPE.getName(),
/** * Retrieve meta data for a Component by component's description link. */ public static ComponentMeta metaByDescriptionLink(String descriptionLink) { return getEntry(descriptionFactoryPrefix(descriptionLink)).componentMeta; }
public static <T extends BaseKubernetesState> Class<T> getStateTypeFromSelfLink( String selfLink) { Class<? extends ResourceState> resourceStateClass = CompositeComponentRegistry .metaByStateLink(selfLink).stateClass; return fromResourceStateToBaseKubernetesState(resourceStateClass); }
@Override public boolean isActive() { return compositeDescription.componentDescriptions.stream().map((cd) -> { return Utils.fromJson(cd.componentJson, CompositeComponentRegistry.metaByType(cd.type).descriptionClass); }).filter((cd) -> { return cd instanceof ContainerDescription && ((ContainerDescription) cd).portBindings != null; }).count() > 1; }
.stream() .map(link -> { ComponentMeta meta = metaByDescriptionLink(link); return NestedState.get(service, link, meta.descriptionClass); }).collect(Collectors.toList()); NestedState nestedState = nestedStates.get(i); ComponentMeta meta = metaByDescriptionLink(link);
@BeforeClass public static void beforeClass() { CompositeComponentRegistry.registerComponent(ResourceType.CONTAINER_TYPE.getName(), ContainerDescriptionService.FACTORY_LINK, ContainerDescription.class, ContainerFactoryService.SELF_LINK, ContainerState.class); }
private static ResourceState extractState(Operation o) { String path = o.getUri().getPath(); ComponentMeta meta = CompositeComponentRegistry.metaByStateLink(path); if (meta.stateClass == null) { Utils.log(CompositeComponentInterceptor.class, CompositeComponentInterceptor.class.getSimpleName(), Level.WARNING, "Cannot find meta for path = %s", path); } ResourceState state = o.getBody(meta.stateClass); return state; } }
@Override public boolean isActive() { return compositeDescription.componentDescriptions.stream().map((cd) -> { return Utils.fromJson(cd.componentJson, CompositeComponentRegistry.metaByType(cd.type).descriptionClass); }).filter((item) -> { return item instanceof ContainerDescription && ((ContainerDescription) item).networks != null && !((ContainerDescription) item).networks.isEmpty(); }).count() > 1; }
private void getDescription(PlacementHostSelectionTaskState state, Consumer<ReservationComponentDescription> callbackFunction) { if (description != null) { callbackFunction.accept(description); return; } sendRequest(Operation.createGet(this, state.resourceDescriptionLink) .setCompletion((o, e) -> { if (e != null) { failTask("Failure retrieving description state", e); return; } ReservationComponentDescription cd = new ReservationComponentDescription(); if (state.resourceDescriptionLink .startsWith(CompositeDescriptionFactoryService.SELF_LINK)) { cd.updateServiceDocument(o.getBody(CompositeDescription.class)); } else { ComponentMeta metaByDescriptionLink = CompositeComponentRegistry .metaByDescriptionLink(state.resourceDescriptionLink); cd.updateServiceDocument(o.getBody(metaByDescriptionLink.descriptionClass)); } this.description = cd; callbackFunction.accept(cd); })); }
ComponentMeta metaByStateLink = CompositeComponentRegistry.metaByStateLink(link); rt = ResourceType.fromName(metaByStateLink.resourceType);
public ServiceDocument getServiceDocument() { if (this.componentJson == null) { return null; } if (this.component == null) { this.component = Utils.fromJson(componentJson, CompositeComponentRegistry.metaByType(this.type).descriptionClass); } return component; }
private void getContainerDescription(String resourceDescriptionLink, Consumer<ReservationComponentDescription> callbackFunction) { if (description != null) { callbackFunction.accept(description); return; } sendRequest(Operation.createGet(this, resourceDescriptionLink) .setCompletion((o, e) -> { if (e != null) { failTask("Failure retrieving description state", e); return; } ReservationComponentDescription cd = new ReservationComponentDescription(); if (resourceDescriptionLink .startsWith(CompositeDescriptionFactoryService.SELF_LINK)) { cd.updateServiceDocument(o.getBody(CompositeDescription.class)); } else { ComponentMeta metaByDescriptionLink = CompositeComponentRegistry .metaByDescriptionLink(resourceDescriptionLink); cd.updateServiceDocument(o.getBody(metaByDescriptionLink.descriptionClass)); } this.description = cd; callbackFunction.accept(cd); })); }
ComponentMeta meta = CompositeComponentRegistry.metaByStateLink(link); if (meta == null) { logWarning("Unexpected result type: %s", link);