package com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker;
import java.util.Set;
import com.sequenceiq.cloudbreak.orchestrator.model.Node;
import com.sequenceiq.cloudbreak.orchestrator.salt.client.SaltConnector;
import com.sequenceiq.cloudbreak.orchestrator.salt.client.target.Compound;
import com.sequenceiq.cloudbreak.orchestrator.salt.domain.ApplyResponse;
import com.sequenceiq.cloudbreak.orchestrator.salt.poller.BaseSaltJobRunner;
import com.sequenceiq.cloudbreak.orchestrator.salt.states.SaltStates;
public abstract class ModifyGrainBase extends BaseSaltJobRunner {
private String key;
private String value;
private Compound.CompoundType compoundType;
private boolean addGrain;
public ModifyGrainBase(Set<String> target, Set<Node> allNode, String key, String value, Compound.CompoundType type, boolean addGrain) {
super(target, allNode);
this.key = key;
this.value = value;
this.compoundType = type;
this.addGrain = addGrain;
}
@Override
public String submit(SaltConnector saltConnector) {
ApplyResponse response;
if (addGrain) {
response = SaltStates.addGrain(saltConnector, new Compound(getTarget(), compoundType), key, value);
} else {
response = SaltStates.removeGrain(saltConnector, new Compound(getTarget(), compoundType), key, value);
}
Set<String> missingIps = collectMissingNodes(collectNodes(response));
setTarget(missingIps);
return missingIps.toString();
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("ModifyGrainBase{");
sb.append("key='").append(key).append('\'');
sb.append(", value='").append(value).append('\'');
sb.append(", compoundType=").append(compoundType);
sb.append(", addGrain=").append(addGrain);
sb.append('}');
return sb.toString();
}
}