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

Project plugins ui wip #4604

Merged
merged 17 commits into from Mar 9, 2019
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 @@ -39,7 +39,8 @@ public class FrameworkProject extends FrameworkResource implements IRundeckProje
public static final String PROP_FILENAME = "project.properties";
public static final String ETC_DIR_NAME = "etc";
public static final String NODES_XML = "resources.xml";
public static final String RESOURCES_SOURCE_PROP_PREFIX = "resources.source";
public static final String RESOURCES_SOURCE_PROP_PREFIX = ProjectNodeSupport.RESOURCES_SOURCE_PROP_PREFIX;

public static final String PROJECT_RESOURCES_MERGE_NODE_ATTRIBUTES = "project.resources.mergeNodeAttributes";

/**
Expand Down
Expand Up @@ -16,6 +16,7 @@

package com.dtolabs.rundeck.core.common;

import com.dtolabs.rundeck.core.plugins.PluginConfiguration;
import com.dtolabs.rundeck.core.resources.ResourceModelSource;
import com.dtolabs.rundeck.core.resources.WriteableModelSource;

Expand Down Expand Up @@ -97,9 +98,18 @@ static interface WriteableProjectNodes {
* <ul>
* <li>type - provider type name</li>
* <li>props - configuration properties</li>
* </ul>
* </ul>@deprecated use {@link #listResourceModelPluginConfigurations()}
*/
@Deprecated
List<Map<String, Object>> listResourceModelConfigurations();

List<PluginConfiguration> listResourceModelPluginConfigurations();

List<PluginConfiguration> listNodeEnhancerConfigurations();

List<PluginConfiguration> listPluginConfigurations(
final String keyprefix,
final String serviceName
);

}
Expand Up @@ -24,6 +24,7 @@
import com.dtolabs.rundeck.core.resources.*;
import com.dtolabs.rundeck.core.resources.format.*;
import com.dtolabs.rundeck.core.utils.TextUtils;
import com.dtolabs.rundeck.plugins.ServiceNameConstants;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Delegate;
Expand All @@ -46,6 +47,7 @@ public class ProjectNodeSupport implements IProjectNodes, Closeable {
public static final String PROJECT_RESOURCES_FILE_PROPERTY = "project.resources.file";
public static final String PROJECT_RESOURCES_FILEFORMAT_PROPERTY = "project.resources.file.format";
public static final String RESOURCES_SOURCE_PROP_PREFIX = "resources.source";
public static final String NODE_ENHANCER_PROP_PREFIX = "nodes.plugin";
public static final String PROJECT_RESOURCES_MERGE_NODE_ATTRIBUTES = "project.resources.mergeNodeAttributes";
public static final String PROJECT_RESOURCES_ALLOWED_URL_PREFIX = "project.resources.allowedURL.";
public static final String FRAMEWORK_RESOURCES_ALLOWED_URL_PREFIX = "framework.resources.allowedURL.";
Expand Down Expand Up @@ -539,6 +541,34 @@ public synchronized List<Map<String, Object>> listResourceModelConfigurations(){
return listResourceModelConfigurations(properties);
}

/**
* list the configurations of resource model providers.
*
* @return a list of PluginConfiguration
*/
@Override
public synchronized List<PluginConfiguration> listResourceModelPluginConfigurations() {
return listPluginConfigurations(
projectConfig.getProjectProperties(),
RESOURCES_SOURCE_PROP_PREFIX,
ServiceNameConstants.ResourceModelSource
);
}

/**
* list the configurations of node enhancer providers.
*
* @return a list of PluginConfiguration
*/
@Override
public synchronized List<PluginConfiguration> listNodeEnhancerConfigurations() {
return listPluginConfigurations(
projectConfig.getProjectProperties(),
NODE_ENHANCER_PROP_PREFIX,
ServiceNameConstants.NodeEnhancer
);
}


/**
* @return Properties form for the serialized list of model source configurations
Expand All @@ -561,6 +591,26 @@ public static Properties serializeResourceModelConfigurations(final List<Map<Str
return projProps;
}

/**
* @return Properties form for the serialized list of indexed plugin configurations with a prefix
*/
public static Properties serializePluginConfigurations(String prefix, final List<PluginConfiguration> configs) {
Properties projProps = new Properties();
int count = 1;
for (PluginConfiguration config : configs) {

String propPrefix = prefix + "." + count + ".";
projProps.setProperty(propPrefix + "type", config.getProvider());
Map<String, Object> configuration = config.getConfiguration();
for (String k : configuration.keySet()) {
Object v = configuration.get(k);
projProps.setProperty(propPrefix + "config." + k, v.toString());
}
count++;
}
return projProps;
}

/**
* Return a list of resource model configuration
* @param props properties
Expand Down Expand Up @@ -598,12 +648,24 @@ public static List<Map<String, Object>> listResourceModelConfigurations(final Pr
* Return a list of resource model configuration
*
* @param serviceName
* @param keyprefix prefix for properties
* @return List of Maps, each map containing "type": String, "props":Properties
*/
public List<PluginConfiguration> listPluginConfigurations(final String keyprefix, final String serviceName)
{
return listPluginConfigurations(projectConfig.getProjectProperties(), keyprefix, serviceName);
}

/**
* Return a list of resource model configuration
*
* @param serviceName service name
* @param props properties
* @param prefix
* @param keyprefix prefix for properties
* @return List of Maps, each map containing "type": String, "props":Properties
*/
public static List<PluginConfiguration> listPluginConfigurations(
final Map<String,String> props,
final Map<String, String> props,
final String keyprefix,
final String serviceName
)
Expand All @@ -623,9 +685,6 @@ public static List<PluginConfiguration> listPluginConfigurations(
configProps.put(key.substring(len), props.get(key));
}
}
final HashMap<String, Object> map = new HashMap<>();
map.put("type", providerType);
map.put("props", configProps);
list.add(new SimplePluginConfiguration(serviceName, providerType, configProps));
} else {
done = true;
Expand Down
Expand Up @@ -16,6 +16,8 @@

package com.dtolabs.rundeck.core.common

import com.dtolabs.rundeck.core.plugins.PluginConfiguration
import com.dtolabs.rundeck.core.plugins.SimplePluginConfiguration
import com.dtolabs.rundeck.core.resources.ResourceModelSourceService
import com.dtolabs.rundeck.core.resources.format.ResourceFormatGeneratorService
import com.dtolabs.rundeck.core.tools.AbstractBaseTest
Expand Down Expand Up @@ -123,4 +125,47 @@ class ProjectNodeSupportSpec extends Specification {
result2.nodeNames != null
result2.nodeNames.size() == 1
}

def "serialize plugin config"() {
given:
def prefix = "test1.abc"
List<PluginConfiguration> configs = [
new SimplePluginConfiguration.SimplePluginConfigurationBuilder()
.service('AService')
.provider('provider1')
.configuration(
[
a: 'b',
c: 'd'
]
).build(),

new SimplePluginConfiguration.SimplePluginConfigurationBuilder()
.service('AService')
.provider('provider2')
.configuration(
[
x: 'y',
z: 'w'
]
).build(),

]
when:
def result = ProjectNodeSupport.serializePluginConfigurations(prefix, configs)
then:
result
result.size() == 6
result == [
(prefix + '.1.type'): 'provider1',
(prefix + '.1.config.a'): 'b',
(prefix + '.1.config.c'): 'd',
(prefix + '.2.type'): 'provider2',
(prefix + '.2.config.x'): 'y',
(prefix + '.2.config.z'): 'w',

]


}
}