@Override public void convert(PathAddress address, String name, ModelNode value, ModelNode model, TransformationContext context) { if (value.isDefined()) { PathAddress rootAddress = address.subAddress(0, address.size() - 4); PathAddress subsystemAddress = rootAddress.append(PathElement.pathElement(ModelDescriptionConstants.SUBSYSTEM, "datasources")); Resource subsystem = context.readResourceFromRoot(subsystemAddress); String poolName = value.asString(); for (String type : Arrays.asList("data-source", "xa-data-source")) { if (subsystem.hasChildren(type)) { for (Resource.ResourceEntry entry : subsystem.getChildren(type)) { if (entry.getName().equals(poolName)) { value.set(entry.getModel().get("jndi-name")); return; } } } } } } };
@Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { Resource existing = context.readResource(PathAddress.EMPTY_ADDRESS); OperationStepHandler addHandler = context.getResourceRegistration().getSubModel(PathAddress.EMPTY_ADDRESS.append(newKeyName)).getOperationHandler(PathAddress.EMPTY_ADDRESS, "add"); ModelNode value = operation.get(VALUE); if (value.isDefined()) { List<ModelNode> modules = new ArrayList<ModelNode>(value.asList()); Collections.reverse(modules); //need to reverse it to make sure they are added in proper order for (ModelNode module : modules) { ModelNode addModuleOp = module.clone(); String code = addModuleOp.get(Constants.CODE).asString(); PathElement relativePath = PathElement.pathElement(newKeyName, code); PathAddress address = PathAddress.pathAddress(operation.get(OP_ADDR)).append(relativePath); addModuleOp.get(OP_ADDR).set(address.toModelNode()); addModuleOp.get(OP).set(ADD); context.addStep(new ModelNode(), addModuleOp, addHandler, OperationContext.Stage.MODEL, true); } } //remove on the end to make sure it is executed first for (Resource.ResourceEntry entry : existing.getChildren(newKeyName)) { PathAddress address = PathAddress.pathAddress(operation.get(OP_ADDR)).append(entry.getPathElement()); ModelNode removeModuleOp = Util.createRemoveOperation(address); context.addStep(new ModelNode(), removeModuleOp, new SecurityDomainReloadRemoveHandler(), OperationContext.Stage.MODEL, true); } } }
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { ModelNode correctedOperation = operation.clone(); for (AttributeDefinition def : DeploymentAttributes.FULL_REPLACE_DEPLOYMENT_ATTRIBUTES.values()) { def.validateAndSet(operation, correctedOperation); final String name = DeploymentAttributes.NAME.resolveModelAttribute(context, correctedOperation).asString(); final PathElement deploymentPath = PathElement.pathElement(DEPLOYMENT, name); final PathAddress address = PathAddress.pathAddress(deploymentPath); String runtimeName = correctedOperation.hasDefined(RUNTIME_NAME) ? DeploymentAttributes.RUNTIME_NAME.resolveModelAttribute(context, correctedOperation).asString() : name; final ModelNode deploymentModel = context.readResourceForUpdate(PathAddress.pathAddress(deploymentPath)).getModel(); final Resource root = context.readResourceForUpdate(PathAddress.EMPTY_ADDRESS); if (root.hasChild(PathElement.pathElement(SERVER_GROUP))) { ModelNode enabled = correctedOperation.get(ENABLED.getName()); for (final Resource.ResourceEntry serverGroupResource : root.getChildren(SERVER_GROUP)) { Resource deploymentResource = serverGroupResource.getChild(deploymentPath); if (deploymentResource != null) { ModelNode groupDeploymentModel = deploymentResource.getModel(); context.completeStep(new OperationContext.ResultHandler() { @Override public void handleResult(ResultAction resultAction, OperationContext context, ModelNode operation) {
protected void checkCanRemove(OperationContext context, ModelNode operation) throws OperationFailedException { final String deploymentName = PathAddress.pathAddress(operation.require(OP_ADDR)).getLastElement().getValue(); final Resource root = context.readResourceFromRoot(PathAddress.EMPTY_ADDRESS); if(root.hasChild(PathElement.pathElement(SERVER_GROUP))) { final List<String> badGroups = new ArrayList<String>(); for(final Resource.ResourceEntry entry : root.getChildren(SERVER_GROUP)) { if(entry.hasChild(PathElement.pathElement(DEPLOYMENT, deploymentName))) { badGroups.add(entry.getName()); } } if (badGroups.size() > 0) { throw new OperationFailedException(new ModelNode().set(MESSAGES.cannotRemoveDeploymentInUse(deploymentName, badGroups))); } } }
final String name = DeploymentAttributes.FULL_REPLACE_DEPLOYMENT_ATTRIBUTES.get(NAME).resolveModelAttribute(context, operation).asString(); String runtimeName = operation.hasDefined(RUNTIME_NAME) ? DeploymentAttributes.FULL_REPLACE_DEPLOYMENT_ATTRIBUTES.get(RUNTIME_NAME).resolveModelAttribute(context, operation).asString() : name; byte[] hash; final Resource root = context.readResource(PathAddress.EMPTY_ADDRESS); final PathElement deploymentPath = PathElement.pathElement(DEPLOYMENT, name); final Resource replaceNode = root.getChild(deploymentPath); if (replaceNode == null) { throw createFailureException(MESSAGES.noDeploymentContentWithName(name)); final Resource deployment = context.readResourceForUpdate(PathAddress.EMPTY_ADDRESS.append(PathElement.pathElement(DEPLOYMENT, name))); final ModelNode deployNode = deployment.getModel(); final byte[] originalHash = deployNode.get(CONTENT).get(0).hasDefined(HASH) ? deployNode.get(CONTENT).get(0).get(HASH).asBytes() : null; deployNode.get(NAME).set(name); deployNode.get(CONTENT).set(content); if (root.hasChild(PathElement.pathElement(SERVER_GROUP))) { for (final Resource.ResourceEntry serverGroupResource : root.getChildren(SERVER_GROUP)) { Resource deploymentResource = serverGroupResource.getChild(deploymentPath); if (deploymentResource != null) { deploymentResource.getModel().get(RUNTIME_NAME).set(runtimeName); removeContentAdditions(replaceNode.getModel().require(CONTENT)); context.completeStep(new OperationContext.ResultHandler() { @Override public void handleResult(ResultAction resultAction, OperationContext context, ModelNode operation) {
static void describe(final PathAddress base, final Resource resource, List<ModelNode> nodes) { if(resource.isProxy() || resource.isRuntime()) { return; // ignore runtime and proxies } else if (base.size() >= 1 && base.getElement(0).getKey().equals(ModelDescriptionConstants.HOST)) { return; // ignore hosts } final ModelNode description = new ModelNode(); description.get("domain-resource-address").set(base.toModelNode()); description.get("domain-resource-model").set(resource.getModel()); nodes.add(description); for(final String childType : resource.getChildTypes()) { for(final Resource.ResourceEntry entry : resource.getChildren(childType)) { describe(base.append(entry.getPathElement()), entry, nodes); } } }
handler.setFacility(SyslogAuditLogHandler.Facility.valueOf(FACILITY.resolveModelAttribute(context, handlerModel).asString())); final Set<ResourceEntry> protocols = handlerResource.getChildren(PROTOCOL); if (protocols.isEmpty()) { final SyslogAuditLogHandler.Transport transport = SyslogAuditLogHandler.Transport.valueOf(protocol.getPathElement().getValue().toUpperCase(Locale.ENGLISH)); handler.setTransport(transport); try { handler.setSyslogServerAddress( InetAddress.getByName( SyslogAuditLogProtocolResourceDefinition.HOST.resolveModelAttribute(context, protocol.getModel()).asString())); } catch (UnknownHostException e) { throw new OperationFailedException(e); handler.setPort(SyslogAuditLogProtocolResourceDefinition.PORT.resolveModelAttribute(context, protocol.getModel()).asInt()); if (transport != SyslogAuditLogHandler.Transport.UDP) { handler.setMessageTransfer( SyslogAuditLogHandler.MessageTransfer.valueOf( SyslogAuditLogProtocolResourceDefinition.Tcp.MESSAGE_TRANSFER.resolveModelAttribute(context, protocol.getModel()).asString())); handler.setReconnectTimeout(SyslogAuditLogProtocolResourceDefinition.Tcp.RECONNECT_TIMEOUT.resolveModelAttribute(context, protocol.getModel()).asInt()); final Set<ResourceEntry> tlsStores = protocol.getChildren(AUTHENTICATION); for (ResourceEntry storeEntry : tlsStores) { final ModelNode storeModel = storeEntry.getModel(); String type = storeEntry.getPathElement().getValue(); if (type.equals(CLIENT_CERT_STORE)) { handler.setTlsClientCertStorePassword(
@Override public AttributeValueTranslator getWriteTranslator() { return (context, value) -> { String jndiName = value.asString(); PathAddress address = context.getCurrentAddress(); PathAddress rootAddress = address.subAddress(0, address.size() - 4); PathAddress subsystemAddress = rootAddress.append(PathElement.pathElement(ModelDescriptionConstants.SUBSYSTEM, "datasources")); Resource subsystem = context.readResourceFromRoot(subsystemAddress); for (String type : Arrays.asList("data-source", "xa-data-source")) { if (subsystem.hasChildren(type)) { for (Resource.ResourceEntry entry : subsystem.getChildren(type)) { ModelNode model = entry.getModel(); if (model.get("jndi-name").asString().equals(jndiName)) { return new ModelNode(entry.getName()); } } } } throw InfinispanLogger.ROOT_LOGGER.dataSourceJndiNameNotFound(jndiName); }; } };
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { validator.validate(operation); String name = operation.require(NAME).asString(); String runtimeName = operation.hasDefined(RUNTIME_NAME) ? operation.get(RUNTIME_NAME).asString() : name; byte[] hash; final Resource root = context.readResource(PathAddress.EMPTY_ADDRESS); final PathElement deploymentPath = PathElement.pathElement(DEPLOYMENT, name); final Resource replaceNode = root.getChild(deploymentPath); if (replaceNode == null) { throw createFailureException("No deployment with name %s found", name); final Resource deployment = context.readResourceForUpdate(PathAddress.EMPTY_ADDRESS.append(PathElement.pathElement(DEPLOYMENT, name))); ModelNode deployNode = deployment.getModel(); deployNode.get(NAME).set(name); deployNode.get(RUNTIME_NAME).set(runtimeName); deployNode.get(CONTENT).set(content); if(root.hasChild(PathElement.pathElement(SERVER_GROUP))) { for(final Resource.ResourceEntry serverGroupResource : root.getChildren(SERVER_GROUP)) { Resource deploymentResource = serverGroupResource.getChild(deploymentPath); if(deploymentResource != null) { deploymentResource.getModel().get(RUNTIME_NAME).set(runtimeName); removeContentAdditions(replaceNode.getModel().require(CONTENT)); context.completeStep();
public static void addServerGroupsToModel(Resource hostModel, ModelNode model) { ModelNode initialServerGroups = new ModelNode(); initialServerGroups.setEmptyObject(); for (ResourceEntry entry : hostModel.getChildren(SERVER_CONFIG)) { ModelNode serverNode = new ModelNode(); serverNode.get(GROUP).set(entry.getModel().get(GROUP)); if (entry.getModel().hasDefined(SOCKET_BINDING_GROUP)) { serverNode.get(SOCKET_BINDING_GROUP).set(entry.getModel().get(SOCKET_BINDING_GROUP).asString()); } initialServerGroups.get(entry.getName()).set(serverNode); } model.get(ModelDescriptionConstants.INITIAL_SERVER_GROUPS).set(initialServerGroups); }
static ExpressionResolver create(final OperationContext context, final TransformationTarget.TransformationTargetType type) { switch (type) { // TODO differentiate between the different types case DOMAIN: case HOST: case SERVER: } final Map<String, String> environment = Collections.emptyMap(); final Map<String, String> properties = new HashMap<String, String>(); final PathElement systemProperty = PathElement.pathElement(SYSTEM_PROPERTY); final PathAddress address = PathAddress.EMPTY_ADDRESS.append(systemProperty); if(context.getRootResourceRegistration().getChildNames(address).contains(SYSTEM_PROPERTY)) { final Resource resource = context.readResourceFromRoot(PathAddress.pathAddress(systemProperty)); for(Resource.ResourceEntry entry : resource.getChildren(SYSTEM_PROPERTY)) { final ModelNode model = entry.getModel(); properties.put(entry.getPathElement().getValue(), model.get(VALUE).asString()); } } return new TransformerExpressionResolver(properties, environment); }
private static Set<String> getIncludes(Resource.ResourceEntry resource) { Set<String> result; ModelNode model = resource.getModel(); if (model.hasDefined(INCLUDES)) { result = new HashSet<>(); for (ModelNode node : model.get(INCLUDES).asList()) { result.add(node.asString()); } } else { result = Collections.emptySet(); } return result; }
static void validateRuntimeNames(String deploymentName, OperationContext context, PathAddress address) throws OperationFailedException { ModelNode deployment = context.readResource(PathAddress.EMPTY_ADDRESS).getModel(); if (ENABLED.resolveModelAttribute(context, deployment).asBoolean()) { Resource root = context.readResourceFromRoot(PathAddress.EMPTY_ADDRESS); ModelNode domainDeployment = root.getChild(PathElement.pathElement(DEPLOYMENT, deploymentName)).getModel(); String runtimeName = getRuntimeName(deploymentName, deployment, domainDeployment); PathAddress sgAddress = address.subAddress(0, address.size() - 1); Resource serverGroup = root.navigate(sgAddress); for (Resource.ResourceEntry re : serverGroup.getChildren(DEPLOYMENT)) { String reName = re.getName(); if (!deploymentName.equals(reName)) { ModelNode otherDepl = re.getModel(); if (ENABLED.resolveModelAttribute(context, otherDepl).asBoolean()) { domainDeployment = root.getChild(PathElement.pathElement(DEPLOYMENT, reName)).getModel(); String otherRuntimeName = getRuntimeName(reName, otherDepl, domainDeployment); if (runtimeName.equals(otherRuntimeName)) { throw DomainControllerLogger.ROOT_LOGGER.runtimeNameMustBeUnique(reName, runtimeName, sgAddress.getLastElement().getValue()); } } } } } }
static ModelNode readModel(final PathAddress address, final Resource resource, final int level, final ResourceFilter filter) { final ModelNode model = resource.getModel().clone(); final boolean recursive = level == -1 ? true : level > 0; if(recursive) { final int newLevel = level == -1 ? -1 : level - 1; for(final String childType : resource.getChildTypes()) { model.get(childType).setEmptyObject(); for(final ResourceEntry entry : resource.getChildren(childType)) { if(filter.accepts(address.append(entry.getPathElement()), resource)) { model.get(childType, entry.getName()).set(readModel(entry, newLevel)); } } } } return model; }
@Override protected void describe(OrderedChildTypesAttachment orderedChildTypesAttachment, Resource resource, ModelNode addressModel, ModelNode result, ImmutableManagementResourceRegistration registration) { if (resource == null || registration.isRemote() || registration.isRuntimeOnly() || resource.isProxy() || resource.isRuntime() || registration.isAlias()) return; result.add(createAddOperation(orderedChildTypesAttachment, addressModel, resource, registration.getChildAddresses(PathAddress.EMPTY_ADDRESS))); PathAddress address = PathAddress.pathAddress(addressModel); for (String type : resource.getChildTypes()) { for (Resource.ResourceEntry entry : resource.getChildren(type)) { PathElement path = entry.getPathElement(); ImmutableManagementResourceRegistration childRegistration = Optional.ofNullable(registration.getSubModel(PathAddress.pathAddress(path))).orElse(registration.getSubModel(PathAddress.pathAddress(PathElement.pathElement(path.getKey())))); PathAddress childAddress = address.append(path); this.describe(orderedChildTypesAttachment, entry, childAddress.toModelNode(), result, childRegistration); } } }
@Override protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { // Cache the TransactionManager service name for use by our runtime services ConnectorServices.registerCapabilityServiceName(LOCAL_TRANSACTION_PROVIDER_CAPABILITY, context.getCapabilityServiceName(LOCAL_TRANSACTION_PROVIDER_CAPABILITY, null)); final Resource subsystemResource = context.readResourceFromRoot(PathAddress.pathAddress(ResourceAdaptersExtension.SUBSYSTEM_PATH)); ResourceAdaptersSubsystemService service = new ResourceAdaptersSubsystemService(); CopyOnWriteArrayListMultiMap<String, ServiceName> value = service.getValue(); for (Resource.ResourceEntry re : subsystemResource.getChildren(RESOURCEADAPTER_NAME)) { value.putIfAbsent(re.getModel().get(ARCHIVE.getName()).asString(), ConnectorServices.RA_SERVICE.append(re.getName())); } final ServiceBuilder<?> builder = context.getServiceTarget().addService(ConnectorServices.RESOURCEADAPTERS_SUBSYSTEM_SERVICE, service); builder.setInitialMode(ServiceController.Mode.ACTIVE).install(); } }
@Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { final PathAddress address = context.getCurrentAddress(); final String connectorName = address.getLastElement().getValue(); PathAddress parentAddress = address.getParent(); Resource parent = context.readResourceFromRoot(parentAddress, false); Resource resource = context.readResourceFromRoot(address, false); ModelNode resourceRef = resource.getModel().get(CommonAttributes.CONNECTOR_REF); boolean listenerAlreadyExists = false; for(Resource.ResourceEntry child: parent.getChildren(CommonAttributes.HTTP_CONNECTOR)) { if(!connectorName.equals(child.getName())) { Resource childResource = context.readResourceFromRoot(PathAddress.pathAddress(parentAddress, child.getPathElement()), false); if(childResource.getModel().get(CommonAttributes.CONNECTOR_REF).equals(resourceRef)) { listenerAlreadyExists = true; break; } } } if(listenerAlreadyExists) { throw ControllerLogger.ROOT_LOGGER.alreadyDefinedAttribute(CommonAttributes.HTTP_CONNECTOR, resourceRef.asString(), CommonAttributes.CONNECTOR_REF); } }
@Override public void installServices(OperationContext context, ModelNode model) throws OperationFailedException { if (!context.isBooting()) return; Resource subsystemResource = context.readResource(PathAddress.EMPTY_ADDRESS); if (subsystemResource.hasChildren(ProxyConfigurationResourceDefinition.WILDCARD_PATH.getKey())) { Set<String> adapterNames = new HashSet<>(); Set<LoadMetric> enabledMetrics = new HashSet<>(); for (Resource.ResourceEntry proxyResource : subsystemResource.getChildren(ProxyConfigurationResourceDefinition.WILDCARD_PATH.getKey())) { String proxyName = proxyResource.getName(); PathAddress proxyAddress = context.getCurrentAddress().append(ProxyConfigurationResourceDefinition.pathElement(proxyName)); adapterNames.add(proxyName); ModelNode proxyModel = Resource.Tools.readModel(proxyResource); enabledMetrics.addAll(metrics); String listenerName = LISTENER.resolveModelAttribute(context, proxyModel).asString(); int statusInterval = STATUS_INTERVAL.resolveModelAttribute(context, proxyModel).asInt();
@Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { String socketBindingGroupName = PathAddress.pathAddress(operation.get(OP_ADDR)).getLastElement().getValue(); for (ResourceEntry entry : context.readResourceFromRoot(PathAddress.EMPTY_ADDRESS).getChildren(SERVER_GROUP)) { if (entry.getModel().get(SOCKET_BINDING_GROUP).asString().equals(socketBindingGroupName)) { serverGroups.add(entry.getName()); for (ResourceEntry entry : context.readResourceFromRoot(PathAddress.EMPTY_ADDRESS).getChildren(HOST).iterator().next().getChildren(SERVER_CONFIG)) { ModelNode configModel = entry.getModel(); if (configModel.hasDefined(SOCKET_BINDING_GROUP)) { if (configModel.get(SOCKET_BINDING_GROUP).asString().equals(socketBindingGroupName)) { if (isRunningServer(entry.getName())) { runningServers.add(entry.getName()); if (serverGroups.contains(configModel.get(GROUP).asString())) { if (isRunningServer(entry.getName())) { runningServers.add(entry.getName()); throw new OperationFailedException("Could not remove socket-binding-group since the following servers are running: " + runningServers); context.stepCompleted();
private void transformModulesToAttributes(final PathAddress address, final String newName, final String oldName, final TransformationContext context, final ModelNode model) { ModelNode modules = model.get(oldName).setEmptyList(); for (Resource.ResourceEntry entry : context.readResourceFromRoot(address).getChildren(newName)) { Resource moduleResource = context.readResourceFromRoot(address.append(entry.getPathElement())); modules.add(moduleResource.getModel()); } } }