package io.cattle.platform.agent.instance.factory.impl;
import io.cattle.platform.agent.instance.factory.AgentInstanceBuilder;
import io.cattle.platform.archaius.util.ArchaiusUtil;
import io.cattle.platform.core.constants.InstanceConstants;
import io.cattle.platform.core.model.Instance;
import io.cattle.platform.core.util.SystemLabels;
import io.cattle.platform.object.util.DataAccessor;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.netflix.config.DynamicStringProperty;
public class AgentInstanceBuilderImpl implements AgentInstanceBuilder {
private static final DynamicStringProperty DEFAULT_IMAGE_UUID = ArchaiusUtil.getString("agent.instance.image.uuid");
private static final DynamicStringProperty DEFAULT_NAME = ArchaiusUtil.getString("agent.instance.name");
String instanceKind = InstanceConstants.KIND_CONTAINER;
Long vnetId;
Long accountId;
Long zoneId;
Long resourceAccountId;
String imageUuid;
String name = DEFAULT_NAME.get();
boolean accountOwned = true;
boolean managedConfig = false;
boolean privileged = false;
AgentInstanceFactoryImpl factory;
String uri;
Map<String, Object> params = new HashMap<>();
Set<String> requestedRoles;
public AgentInstanceBuilderImpl(AgentInstanceFactoryImpl factory) {
super();
this.factory = factory;
}
public AgentInstanceBuilderImpl(AgentInstanceFactoryImpl factory, Instance instance, Set<String> roles) {
this(factory);
this.accountId = instance.getAccountId();
this.zoneId = instance.getZoneId();
String uriPrefix = "event";
Map<String, Object> labels = DataAccessor.fieldMap(instance, InstanceConstants.FIELD_LABELS);
Object prefix = labels.get(SystemLabels.LABEL_AGENT_URI_PREFIX);
if (prefix != null) {
uriPrefix = prefix.toString();
}
this.uri = uriPrefix + ":///instanceId=" + instance.getId();
this.resourceAccountId = instance.getAccountId();
this.requestedRoles = roles;
}
@Override
public AgentInstanceBuilder withImageUuid(String uuid) {
this.imageUuid = uuid;
return this;
}
@Override
public AgentInstanceBuilder withInstanceKind(String kind) {
this.instanceKind = kind;
return this;
}
@Override
public AgentInstanceBuilder withName(String name) {
this.name = name;
return this;
}
@Override
public Instance build() {
return factory.build(this);
}
public Long getVnetId() {
return vnetId;
}
public String getImageUuid() {
return imageUuid == null ? DEFAULT_IMAGE_UUID.get() : imageUuid;
}
@Override
public AgentInstanceBuilder withInstance(Instance instance) {
withAccountId(instance.getAccountId());
withZoneId(instance.getZoneId());
return this;
}
@Override
public AgentInstanceBuilder withAccountId(Long accountId) {
this.accountId = accountId;
return this;
}
@Override
public AgentInstanceBuilder withZoneId(Long zoneId) {
this.zoneId = zoneId;
return this;
}
@Override
public AgentInstanceBuilder withAccountOwned(boolean accountOwned) {
this.accountOwned = accountOwned;
return this;
}
@Override
public AgentInstanceBuilder withPrivileged(boolean privileged) {
this.privileged = privileged;
return this;
}
public Long getAccountId() {
return accountId;
}
public Long getZoneId() {
return zoneId;
}
public boolean isAccountOwned() {
return accountOwned;
}
public AgentInstanceFactoryImpl getFactory() {
return factory;
}
public String getInstanceKind() {
return instanceKind;
}
public boolean isManagedConfig() {
return managedConfig;
}
public boolean isPrivileged() {
return privileged;
}
public void setPrivileged(boolean privileged) {
this.privileged = privileged;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public AgentInstanceBuilder withUri(String uri) {
this.uri = uri;
return this;
}
public String getUri() {
return uri;
}
@Override
public AgentInstanceBuilder withParameters(Map<String, Object> params) {
this.params = params;
return this;
}
public Map<String, Object> getParams() {
return params;
}
public Set<String> getRequestedRoles() {
return requestedRoles;
}
public Long getResourceAccountId() {
return resourceAccountId;
}
public void setResourceAccountId(Long resourceAccountId) {
this.resourceAccountId = resourceAccountId;
}
}