Skip to content

Commit

Permalink
[JENKINS-59696] Use single class for Agent config components
Browse files Browse the repository at this point in the history
  • Loading branch information
Dohbedoh committed Oct 28, 2019
1 parent e7bbe01 commit fdb398c
Showing 1 changed file with 31 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@
*/
package com.cloudbees.jenkins.support.configfiles;

import com.cloudbees.jenkins.support.api.Component;
import com.cloudbees.jenkins.support.api.Container;
import com.cloudbees.jenkins.support.api.ObjectComponent;
import com.cloudbees.jenkins.support.api.ObjectComponentDescriptor;
import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.Extension;
import hudson.model.AbstractModelObject;
import hudson.model.Computer;
import hudson.security.Permission;
import jenkins.model.Jenkins;
Expand All @@ -38,6 +38,7 @@
import java.io.File;
import java.text.MessageFormat;
import java.util.Collections;
import java.util.Objects;
import java.util.Set;

/**
Expand All @@ -47,7 +48,7 @@
* Unselected by default.
*/
@Extension
public class AgentsConfigFile extends Component {
public class AgentsConfigFile extends ObjectComponent<Computer> {

@DataBoundConstructor
public AgentsConfigFile() {
Expand All @@ -59,6 +60,11 @@ public boolean isSelectedByDefault() {
return false;
}

@Override
public boolean isSelectedByDefault(Computer item) {
return true;
}

@NonNull
@Override
public Set<Permission> getRequiredPermissions() {
Expand All @@ -73,71 +79,47 @@ public String getDisplayName() {

@Override
public void addContents(@NonNull Container container) {
Jenkins.get().getNodes().forEach(node -> addContentForNode(container, node.toComputer()));
Jenkins.get().getNodes().forEach(node -> addContents(container, Objects.requireNonNull(node.toComputer())));
}

static void addContentForNode(@NonNull Container container, Computer item) {
@Override
public void addContents(@NonNull Container container, Computer item) {
if (item.getNode() == null) {
return;
}
File agentDir = new File(Jenkins.get().getRootDir(), MessageFormat.format("nodes/{0}", item.getName()));
File config = new File(agentDir, "config.xml");
container.add(new XmlRedactedSecretFileContent("nodes/slave/" + agentDir.getName() + "/config.xml", config));
}

@Extension
public static class AgentConfigFile extends ObjectComponent<Computer> {

@DataBoundConstructor
public AgentConfigFile() {
super();
}

@Override
public boolean isSelectedByDefault() {
return true;
}
@Override
public <C extends AbstractModelObject> boolean isApplicable(Class<C> clazz) {
return Jenkins.class.isAssignableFrom(clazz) || Computer.class.isAssignableFrom(clazz);
}

@NonNull
@Override
public Set<Permission> getRequiredPermissions() {
return Collections.singleton(Jenkins.ADMINISTER);
}
@Override
public boolean isApplicable(Computer item) {
return item != Jenkins.get().toComputer();
}

@Override
public DescriptorImpl getDescriptor() {
return Jenkins.get().getDescriptorByType(DescriptorImpl.class);
}

@Extension
@Symbol("agentsConfigFileComponent")
public static class DescriptorImpl extends ObjectComponentDescriptor<Computer> {

/**
* {@inheritDoc}
*/
@NonNull
@Override
public String getDisplayName() {
return "Agent Configuration File";
}

@Override
public void addContents(@NonNull Container container, @NonNull Computer item) {
addContentForNode(container, item);
}

@Override
public boolean isApplicable(Computer item) {
return item != Jenkins.get().toComputer();
}

@Override
public DescriptorImpl getDescriptor() {
return Jenkins.get().getDescriptorByType(DescriptorImpl.class);
}

@Extension
@Symbol("agentsConfigFileComponent")
public static class DescriptorImpl extends ObjectComponentDescriptor<Computer> {

/**
* {@inheritDoc}
*/
@NonNull
@Override
public String getDisplayName() {
return "Agent Configuration File";
}

}
}
}

0 comments on commit fdb398c

Please sign in to comment.