Search in sources :

Example 31 with CNode

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);
}
Also used : DescribableAttribute(io.jenkins.plugins.casc.impl.attributes.DescribableAttribute) PersistedListAttribute(io.jenkins.plugins.casc.impl.attributes.PersistedListAttribute) DescribableListAttribute(io.jenkins.plugins.casc.impl.attributes.DescribableListAttribute) ArrayList(java.util.ArrayList) IOException(java.io.IOException) Beta(org.kohsuke.accmod.restrictions.Beta) CNode(io.jenkins.plugins.casc.model.CNode)

Example 32 with CNode

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));
}
Also used : CNode(io.jenkins.plugins.casc.model.CNode) Util.toYamlString(io.jenkins.plugins.casc.misc.Util.toYamlString) Test(org.junit.Test) ConfiguredWithCode(io.jenkins.plugins.casc.misc.ConfiguredWithCode)

Example 33 with CNode

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"));
}
Also used : CNode(io.jenkins.plugins.casc.model.CNode) ConfiguratorRegistry(io.jenkins.plugins.casc.ConfiguratorRegistry) ConfigurationContext(io.jenkins.plugins.casc.ConfigurationContext) ProxyConfiguration(hudson.ProxyConfiguration) Configurator(io.jenkins.plugins.casc.Configurator) Mapping(io.jenkins.plugins.casc.model.Mapping) Test(org.junit.Test) ConfiguredWithCode(io.jenkins.plugins.casc.misc.ConfiguredWithCode)

Example 34 with CNode

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);
}
Also used : CNode(io.jenkins.plugins.casc.model.CNode) ConfiguratorRegistry(io.jenkins.plugins.casc.ConfiguratorRegistry) ConfigurationContext(io.jenkins.plugins.casc.ConfigurationContext) Test(org.junit.Test) ConfiguredWithCode(io.jenkins.plugins.casc.misc.ConfiguredWithCode)

Example 35 with CNode

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"));
}
Also used : CNode(io.jenkins.plugins.casc.model.CNode) ConfiguratorRegistry(io.jenkins.plugins.casc.ConfiguratorRegistry) ConfigurationContext(io.jenkins.plugins.casc.ConfigurationContext) ConfigurationAsCode(io.jenkins.plugins.casc.ConfigurationAsCode) Mapping(io.jenkins.plugins.casc.model.Mapping) Sequence(io.jenkins.plugins.casc.model.Sequence) Issue(org.jvnet.hudson.test.Issue) Test(org.junit.Test)

Aggregations

CNode (io.jenkins.plugins.casc.model.CNode)36 Test (org.junit.Test)30 ConfiguredWithCode (io.jenkins.plugins.casc.misc.ConfiguredWithCode)16 Util.toYamlString (io.jenkins.plugins.casc.misc.Util.toYamlString)15 ConfigurationContext (io.jenkins.plugins.casc.ConfigurationContext)13 ConfiguratorRegistry (io.jenkins.plugins.casc.ConfiguratorRegistry)13 Mapping (io.jenkins.plugins.casc.model.Mapping)12 Configurator (io.jenkins.plugins.casc.Configurator)9 Issue (org.jvnet.hudson.test.Issue)6 Node (org.yaml.snakeyaml.nodes.Node)5 IOException (java.io.IOException)4 ArrayList (java.util.ArrayList)4 ConfiguredWithReadme (io.jenkins.plugins.casc.misc.ConfiguredWithReadme)3 StringWriter (java.io.StringWriter)3 Jenkins (jenkins.model.Jenkins)3 YAMLException (org.yaml.snakeyaml.error.YAMLException)3 CredentialsRootConfigurator (com.cloudbees.plugins.credentials.casc.CredentialsRootConfigurator)2 ProxyConfiguration (hudson.ProxyConfiguration)2 Secret (hudson.util.Secret)2 ConfigurationAsCode (io.jenkins.plugins.casc.ConfigurationAsCode)2