package io.cattle.platform.configitem.server.agentinclude.impl; import io.cattle.platform.archaius.util.ArchaiusUtil; import io.cattle.platform.configitem.context.impl.AbstractAgentBaseContextFactory; import io.cattle.platform.configitem.model.Client; import io.cattle.platform.configitem.request.ConfigUpdateRequest; import io.cattle.platform.configitem.server.agentinclude.AgentIncludeMap; import io.cattle.platform.configitem.server.model.ConfigItem; import io.cattle.platform.configitem.server.model.impl.ArchiveContext; import io.cattle.platform.configitem.version.ConfigItemStatusManager; import io.cattle.platform.core.model.Agent; import io.cattle.platform.core.model.Instance; import io.cattle.platform.object.ObjectManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.netflix.config.DynamicListProperty; public class AgentPackagesContextFactory extends AbstractAgentBaseContextFactory { public static final DynamicListProperty<String> REQUIRED = ArchaiusUtil.getList("agent.config.items"); private static final Logger log = LoggerFactory.getLogger(AgentPackagesContextFactory.class); ConfigItemStatusManager statusManager; String name; AgentIncludeMap map; public AgentPackagesContextFactory(String name, AgentIncludeMap map, ObjectManager objectManager, ConfigItemStatusManager statusManager) { super(); this.name = name; this.map = map; this.objectManager = objectManager; this.statusManager = statusManager; } @Override public String getContentHash(String hash) { return hash + map.getSourceRevision(name); } @Override public String[] getItems() { return new String[] {}; } @Override protected void populateContext(Agent agent, Instance instance, ConfigItem item, ArchiveContext context) { context.getData().put("data", map.getMap(name)); if (instance != null) { return; } Client client = new Client(Agent.class, agent.getId()); ConfigUpdateRequest request = new ConfigUpdateRequest(client).withDeferredTrigger(true); for (String itemName : REQUIRED.get()) { if (!statusManager.isAssigned(client, itemName)) { log.info("Adding missing [{}] to agent [{}]", itemName, agent.getId()); request.addItem(itemName); } } if (request.getItems().size() > 0) { statusManager.updateConfig(request); } } }