Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WFCORE-3017] removing runtime-only operations from profile resources #2589

Merged
merged 3 commits into from Jun 28, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -18,6 +18,7 @@
package org.wildfly.extension.elytron;

import static org.wildfly.common.Assert.checkNotNullParam;
import static org.wildfly.extension.elytron.ElytronExtension.isServerOrHostController;

import java.util.function.Function;

Expand Down Expand Up @@ -55,7 +56,9 @@ static ResourceDefinition wrap(ResourceDefinition delegate, Function<OperationCo
public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
super.registerAttributes(resourceRegistration);

resourceRegistration.registerReadOnlyAttribute(AVAILABLE_MECHANISMS, new AvailableMechanismsHandler());
if (isServerOrHostController(resourceRegistration)) {
resourceRegistration.registerReadOnlyAttribute(AVAILABLE_MECHANISMS, new AvailableMechanismsHandler());
}
}

private class AvailableMechanismsHandler extends ElytronRuntimeOnlyHandler {
Expand Down
Expand Up @@ -23,6 +23,7 @@
import static org.wildfly.extension.elytron.Capabilities.PROVIDERS_CAPABILITY;
import static org.wildfly.extension.elytron.ElytronDefinition.commonDependencies;
import static org.wildfly.extension.elytron.ElytronExtension.asStringIfDefined;
import static org.wildfly.extension.elytron.ElytronExtension.isServerOrHostController;
import static org.wildfly.extension.elytron.FileAttributeDefinitions.pathName;
import static org.wildfly.extension.elytron.ServiceStateDefinition.STATE;
import static org.wildfly.extension.elytron.ServiceStateDefinition.populateResponse;
Expand All @@ -39,7 +40,6 @@

import org.jboss.as.controller.AbstractWriteAttributeHandler;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.ModelOnlyWriteAttributeHandler;
import org.jboss.as.controller.ObjectTypeAttributeDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
Expand Down Expand Up @@ -155,11 +155,10 @@ final class CredentialStoreResourceDefinition extends SimpleResourceDefinition {
.build();

// Resource Resolver
static final StandardResourceDescriptionResolver RESOURCE_RESOLVER = ElytronExtension.getResourceDescriptionResolver(ElytronDescriptionConstants.CREDENTIAL_STORE);
private static final StandardResourceDescriptionResolver RESOURCE_RESOLVER = ElytronExtension.getResourceDescriptionResolver(ElytronDescriptionConstants.CREDENTIAL_STORE);

// Operations parameters
static final SimpleAttributeDefinition ALIAS = new SimpleAttributeDefinitionBuilder(ElytronDescriptionConstants.ALIAS, ModelType.STRING, false)
.setStorageRuntime()
.setMinSize(1)
.build();

Expand All @@ -173,37 +172,35 @@ final class CredentialStoreResourceDefinition extends SimpleResourceDefinition {
List<String> entryTypes = Stream.of(SUPPORTED_CREDENTIAL_TYPES).map(Class::getCanonicalName)
.collect(Collectors.toList());
ENTRY_TYPE = new SimpleAttributeDefinitionBuilder(ElytronDescriptionConstants.ENTRY_TYPE, ModelType.STRING, true)
.setStorageRuntime()
.setAllowedValues(entryTypes.toArray(new String[entryTypes.size()]))
.build();
}

static final SimpleAttributeDefinition SECRET_VALUE = new SimpleAttributeDefinitionBuilder(ElytronDescriptionConstants.SECRET_VALUE, ModelType.STRING, true)
.setStorageRuntime()
.setMinSize(0)
.build();

// Operations
static final SimpleOperationDefinition RELOAD = new SimpleOperationDefinitionBuilder(ElytronDescriptionConstants.RELOAD, RESOURCE_RESOLVER)
private static final SimpleOperationDefinition RELOAD = new SimpleOperationDefinitionBuilder(ElytronDescriptionConstants.RELOAD, RESOURCE_RESOLVER)
.setRuntimeOnly()
.build();

static final SimpleOperationDefinition READ_ALIASES = new SimpleOperationDefinitionBuilder(ElytronDescriptionConstants.READ_ALIASES, RESOURCE_RESOLVER)
private static final SimpleOperationDefinition READ_ALIASES = new SimpleOperationDefinitionBuilder(ElytronDescriptionConstants.READ_ALIASES, RESOURCE_RESOLVER)
.setRuntimeOnly()
.setReadOnly()
.build();

static final SimpleOperationDefinition ADD_ALIAS = new SimpleOperationDefinitionBuilder(ElytronDescriptionConstants.ADD_ALIAS, RESOURCE_RESOLVER)
private static final SimpleOperationDefinition ADD_ALIAS = new SimpleOperationDefinitionBuilder(ElytronDescriptionConstants.ADD_ALIAS, RESOURCE_RESOLVER)
.setParameters(ALIAS, ENTRY_TYPE, SECRET_VALUE)
.setRuntimeOnly()
.build();

static final SimpleOperationDefinition REMOVE_ALIAS = new SimpleOperationDefinitionBuilder(ElytronDescriptionConstants.REMOVE_ALIAS, RESOURCE_RESOLVER)
private static final SimpleOperationDefinition REMOVE_ALIAS = new SimpleOperationDefinitionBuilder(ElytronDescriptionConstants.REMOVE_ALIAS, RESOURCE_RESOLVER)
.setParameters(ALIAS)
.setRuntimeOnly()
.build();

static final SimpleOperationDefinition SET_SECRET = new SimpleOperationDefinitionBuilder(ElytronDescriptionConstants.SET_SECRET, RESOURCE_RESOLVER)
private static final SimpleOperationDefinition SET_SECRET = new SimpleOperationDefinitionBuilder(ElytronDescriptionConstants.SET_SECRET, RESOURCE_RESOLVER)
.setParameters(ALIAS, ENTRY_TYPE, SECRET_VALUE)
.setRuntimeOnly()
.build();
Expand All @@ -230,18 +227,19 @@ public void registerAttributes(ManagementResourceRegistration resourceRegistrati
for (AttributeDefinition current : CONFIG_ATTRIBUTES) {
resourceRegistration.registerReadWriteAttribute(current, null, write);
}
if (isServerOrHostController(resourceRegistration)) {
resourceRegistration.registerReadOnlyAttribute(STATE, new ElytronRuntimeOnlyHandler() {

resourceRegistration.registerReadOnlyAttribute(STATE, new ElytronRuntimeOnlyHandler() {
@Override
protected void executeRuntimeStep(OperationContext context, ModelNode operation) throws OperationFailedException {
ServiceName credentialStoreClientServiceName = CREDENTIAL_STORE_UTIL.serviceName(operation);
ServiceController<?> serviceController = context.getServiceRegistry(false).getRequiredService(credentialStoreClientServiceName);

@Override
protected void executeRuntimeStep(OperationContext context, ModelNode operation) throws OperationFailedException {
ServiceName credentialStoreClientServiceName = CREDENTIAL_STORE_UTIL.serviceName(operation);
ServiceController<?> serviceController = context.getServiceRegistry(false).getRequiredService(credentialStoreClientServiceName);

populateResponse(context.getResult(), serviceController);
}
populateResponse(context.getResult(), serviceController);
}

});
});
}

}

Expand All @@ -250,9 +248,11 @@ public void registerOperations(ManagementResourceRegistration resourceRegistrati
super.registerOperations(resourceRegistration);
resourceRegistration.registerOperationHandler(RELOAD, CredentialStoreHandler.INSTANCE);
resourceRegistration.registerOperationHandler(READ_ALIASES, CredentialStoreReadAliasesHandler.INSTANCE);
resourceRegistration.registerOperationHandler(ADD_ALIAS, CredentialStoreHandler.INSTANCE);
resourceRegistration.registerOperationHandler(REMOVE_ALIAS, CredentialStoreHandler.INSTANCE);
resourceRegistration.registerOperationHandler(SET_SECRET, CredentialStoreHandler.INSTANCE);
if (isServerOrHostController(resourceRegistration)) {
resourceRegistration.registerOperationHandler(ADD_ALIAS, CredentialStoreHandler.INSTANCE);
resourceRegistration.registerOperationHandler(REMOVE_ALIAS, CredentialStoreHandler.INSTANCE);
resourceRegistration.registerOperationHandler(SET_SECRET, CredentialStoreHandler.INSTANCE);
}
}

private static class CredentialStoreAddHandler extends BaseAddHandler {
Expand Down Expand Up @@ -317,14 +317,6 @@ protected void performRuntime(OperationContext context, ModelNode operation, Res
}
}

private static class WriteAttributeHandler extends ModelOnlyWriteAttributeHandler {

WriteAttributeHandler() {
super(CONFIG_ATTRIBUTES);
}

}

/*
* Runtime Attribute and Operation Handlers
*/
Expand Down
Expand Up @@ -32,9 +32,11 @@
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.StringListAttributeDefinition;
import org.jboss.as.controller.SubsystemRegistration;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.descriptions.StandardResourceDescriptionResolver;
import org.jboss.as.controller.operations.common.GenericSubsystemDescribeHandler;
import org.jboss.as.controller.parsing.ExtensionParsingContext;
import org.jboss.as.controller.registry.ImmutableManagementResourceRegistration;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.server.deployment.AttachmentKey;
import org.jboss.dmr.ModelNode;
Expand Down Expand Up @@ -92,6 +94,14 @@ static StandardResourceDescriptionResolver getResourceDescriptionResolver(final
return new StandardResourceDescriptionResolver(sb.toString(), RESOURCE_NAME, ElytronExtension.class.getClassLoader(), true, false);
}

/**
* Gets whether the given {@code resourceRegistration} is for a server, or if not,
* is not for a resource in the {@code profile} resource tree.
*/
static boolean isServerOrHostController(ImmutableManagementResourceRegistration resourceRegistration) {
return resourceRegistration.getProcessType().isServer() || !ModelDescriptionConstants.PROFILE.equals(resourceRegistration.getPathAddress().getElement(0).getKey());
}

@Override
public void initializeParsers(ExtensionParsingContext context) {
context.setSubsystemXmlMapping(SUBSYSTEM_NAME, NAMESPACE, parser);
Expand Down
Expand Up @@ -22,6 +22,7 @@
import static org.wildfly.extension.elytron.Capabilities.KEY_STORE_RUNTIME_CAPABILITY;
import static org.wildfly.extension.elytron.ElytronDefinition.commonDependencies;
import static org.wildfly.extension.elytron.ElytronExtension.asStringIfDefined;
import static org.wildfly.extension.elytron.ElytronExtension.isServerOrHostController;
import static org.wildfly.extension.elytron.ServiceStateDefinition.STATE;
import static org.wildfly.extension.elytron.ServiceStateDefinition.populateResponse;

Expand Down Expand Up @@ -72,7 +73,7 @@ class FilteringKeyStoreDefinition extends SimpleResourceDefinition {
.setRestartAllServices()
.build();

static final StandardResourceDescriptionResolver RESOURCE_RESOLVER = ElytronExtension.getResourceDescriptionResolver(ElytronDescriptionConstants.FILTERING_KEY_STORE);
private static final StandardResourceDescriptionResolver RESOURCE_RESOLVER = ElytronExtension.getResourceDescriptionResolver(ElytronDescriptionConstants.FILTERING_KEY_STORE);

private static final AttributeDefinition[] CONFIG_ATTRIBUTES = new AttributeDefinition[] { KEY_STORE, ALIAS_FILTER };

Expand All @@ -95,17 +96,19 @@ public void registerAttributes(ManagementResourceRegistration resourceRegistrati
resourceRegistration.registerReadWriteAttribute(current, null, WRITE);
}

resourceRegistration.registerReadOnlyAttribute(STATE, new ElytronRuntimeOnlyHandler() {
if (isServerOrHostController(resourceRegistration)) {
resourceRegistration.registerReadOnlyAttribute(STATE, new ElytronRuntimeOnlyHandler() {

@Override
protected void executeRuntimeStep(OperationContext context, ModelNode operation) throws OperationFailedException {
ServiceName keyStoreName = FILTERING_KEY_STORE_UTIL.serviceName(operation);
ServiceController<?> serviceController = context.getServiceRegistry(false).getRequiredService(keyStoreName);
@Override
protected void executeRuntimeStep(OperationContext context, ModelNode operation) throws OperationFailedException {
ServiceName keyStoreName = FILTERING_KEY_STORE_UTIL.serviceName(operation);
ServiceController<?> serviceController = context.getServiceRegistry(false).getRequiredService(keyStoreName);

populateResponse(context.getResult(), serviceController);
}
populateResponse(context.getResult(), serviceController);
}

});
});
}
}

private static class KeyStoreAddHandler extends BaseAddHandler {
Expand Down