use of io.jenkins.plugins.casc.model.CNode in project configuration-as-code-plugin by jenkinsci.
the class BaseConfigurator method configure.
/**
* Run configuration process on the target instance
* @param config configuration to apply. Can be partial if {@link #instance(Mapping, ConfigurationContext)} did already used some entries
* @param instance target instance to configure
* @param dryrun only check configuration is valid regarding target component. Don't actually apply changes to jenkins controller instance
* @param context
* @throws ConfiguratorException something went wrong...
*/
protected void configure(Mapping config, T instance, boolean dryrun, ConfigurationContext context) throws ConfiguratorException {
final Set<Attribute<T, ?>> attributes = describe();
List<Attribute<T, ?>> sortedAttributes = attributes.stream().sorted(Configurator.extensionOrdinalSort()).collect(Collectors.toList());
for (Attribute<T, ?> attribute : sortedAttributes) {
final String name = attribute.getName();
CNode sub = removeIgnoreCase(config, name);
if (sub == null) {
for (String alias : attribute.aliases) {
sub = removeIgnoreCase(config, alias);
if (sub != null) {
context.warning(sub, "'" + alias + "' is an obsolete attribute name, please use '" + name + "'");
break;
}
}
}
if (sub != null) {
if (attribute.isDeprecated()) {
context.warning(config, "'" + attribute.getName() + "' is deprecated");
if (context.getDeprecated() == ConfigurationContext.Deprecation.reject) {
throw new ConfiguratorException("'" + attribute.getName() + "' is deprecated");
}
}
for (Class<? extends AccessRestriction> r : attribute.getRestrictions()) {
if (r == None.class)
continue;
if (r == Beta.class && context.getRestricted() == ConfigurationContext.Restriction.beta) {
continue;
}
context.warning(config, "'" + attribute.getName() + "' is restricted: " + r.getSimpleName());
if (context.getRestricted() == ConfigurationContext.Restriction.reject) {
throw new ConfiguratorException("'" + attribute.getName() + "' is restricted: " + r.getSimpleName());
}
}
final Class k = attribute.getType();
final Configurator configurator = context.lookupOrFail(k);
final Object valueToSet;
if (attribute.isMultiple()) {
List<Object> values = new ArrayList<>();
for (CNode o : sub.asSequence()) {
Object value = dryrun ? configurator.check(o, context) : configurator.configure(o, context);
values.add(value);
}
valueToSet = values;
} else {
valueToSet = dryrun ? configurator.check(sub, context) : configurator.configure(sub, context);
}
if (!dryrun) {
try {
// require type erasure to set Object vs ?
((Attribute) attribute).setValue(instance, valueToSet);
} catch (Exception ex) {
throw new ConfiguratorException(configurator, "Failed to set attribute " + attribute, ex);
}
}
}
}
handleUnknown(config, context);
}
use of io.jenkins.plugins.casc.model.CNode in project configuration-as-code-plugin by jenkinsci.
the class ConfigurationAsCodeTest method string_to_literal_in_export.
@Test
@ConfiguredWithCode("multi-line2.yml")
public void string_to_literal_in_export() throws Exception {
assertEquals("Welcome to our build server.\n\n" + "This Jenkins is 100% configured and managed 'as code'.\n", j.jenkins.getSystemMessage());
ConfiguratorRegistry registry = ConfiguratorRegistry.get();
ConfigurationContext context = new ConfigurationContext(registry);
CNode systemMessage = getJenkinsRoot(context).get("systemMessage");
String exported = toYamlString(systemMessage);
String expected = "|\n" + " Welcome to our build server.\n\n" + " This Jenkins is 100% configured and managed 'as code'.\n";
assertThat(exported, is(expected));
}
use of io.jenkins.plugins.casc.model.CNode in project configuration-as-code-plugin by jenkinsci.
the class ProxyConfiguratorTest method shouldSetProxyWithMinimumFields.
@Test
@ConfiguredWithCode("ProxyMinimal.yml")
public void shouldSetProxyWithMinimumFields() throws Exception {
ProxyConfiguration proxy = j.jenkins.proxy;
assertEquals(proxy.name, "proxyhost");
assertEquals(proxy.port, 80);
assertNull(proxy.getUserName());
assertNull(proxy.getTestUrl());
ConfiguratorRegistry registry = ConfiguratorRegistry.get();
ConfigurationContext context = new ConfigurationContext(registry);
final Configurator c = context.lookupOrFail(ProxyConfiguration.class);
final CNode node = c.describe(proxy, context);
assertNotNull(node);
Mapping mapping = node.asMapping();
assertEquals(2, node.asMapping().size());
assertEquals("proxyhost", mapping.getScalarValue("name"));
assertEquals("80", mapping.getScalarValue("port"));
}
use of io.jenkins.plugins.casc.model.CNode in project configuration-as-code-plugin by jenkinsci.
the class ProxyConfiguratorTest method describeMinimalProxyConfig.
@Test
@ConfiguredWithCode("ProxyMinimal.yml")
public void describeMinimalProxyConfig() throws Exception {
ConfiguratorRegistry registry = ConfiguratorRegistry.get();
ConfigurationContext context = new ConfigurationContext(registry);
final CNode configNode = getProxyNode(context);
final String yamlConfig = Util.toYamlString(configNode);
assertEquals(String.join("\n", "name: \"proxyhost\"", "port: 80", ""), yamlConfig);
}
use of io.jenkins.plugins.casc.model.CNode in project configuration-as-code-plugin by jenkinsci.
the class DataBoundConfiguratorTest method export_mapping_should_not_be_null.
@Test
@Issue("PR #838, Issue #222")
public void export_mapping_should_not_be_null() throws Exception {
j.createFreeStyleProject("testJob1");
ConfigurationAsCode casc = ConfigurationAsCode.get();
casc.configure(this.getClass().getResource("DataBoundDescriptorNonNull.yml").toString());
ConfiguratorRegistry registry = ConfiguratorRegistry.get();
ConfigurationContext context = new ConfigurationContext(registry);
final Mapping configNode = getJenkinsRoot(context);
final CNode viewsNode = configNode.get("views");
Mapping listView = viewsNode.asSequence().get(1).asMapping().get("list").asMapping();
Mapping otherListView = viewsNode.asSequence().get(2).asMapping().get("list").asMapping();
Sequence listViewColumns = listView.get("columns").asSequence();
Sequence otherListViewColumns = otherListView.get("columns").asSequence();
assertNotNull(listViewColumns);
assertEquals(6, listViewColumns.size());
assertNotNull(otherListViewColumns);
assertEquals(7, otherListViewColumns.size());
assertEquals("loggedInUsersCanDoAnything", configNode.getScalarValue("authorizationStrategy"));
assertEquals("plainText", configNode.getScalarValue("markupFormatter"));
}
Aggregations