diff --git a/cli/src/main/java/org/onosproject/cli/cfg/ComponentConfigCommand.java b/cli/src/main/java/org/onosproject/cli/cfg/ComponentConfigCommand.java index 3b86d0935f..ef20d0723f 100644 --- a/cli/src/main/java/org/onosproject/cli/cfg/ComponentConfigCommand.java +++ b/cli/src/main/java/org/onosproject/cli/cfg/ComponentConfigCommand.java @@ -41,6 +41,7 @@ public class ComponentConfigCommand extends AbstractShellCommand { static final String GET = "get"; static final String SET = "set"; + static final String PRESET = "preset"; private static final String FMT = " name=%s, type=%s, value=%s, defaultValue=%s, description=%s"; private static final String SHORT_FMT = " %s=%s"; @@ -51,7 +52,7 @@ public class ComponentConfigCommand extends AbstractShellCommand { @Argument(index = 0, name = "command", - description = "Command name (get|set)", + description = "Command name (get|set|preset)", required = false, multiValued = false) String command = null; @@ -85,6 +86,8 @@ public class ComponentConfigCommand extends AbstractShellCommand { service.unsetProperty(component, name); } else if (command.equals(SET)) { service.setProperty(component, name, value); + } else if (command.equals(PRESET)) { + service.preSetProperty(component, name, value); } else { error("Illegal usage"); } diff --git a/cli/src/main/java/org/onosproject/cli/cfg/ComponentConfigCommandCompleter.java b/cli/src/main/java/org/onosproject/cli/cfg/ComponentConfigCommandCompleter.java index 4397a2b6ae..46830cff1b 100644 --- a/cli/src/main/java/org/onosproject/cli/cfg/ComponentConfigCommandCompleter.java +++ b/cli/src/main/java/org/onosproject/cli/cfg/ComponentConfigCommandCompleter.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.SortedSet; import static org.onosproject.cli.cfg.ComponentConfigCommand.GET; +import static org.onosproject.cli.cfg.ComponentConfigCommand.PRESET; import static org.onosproject.cli.cfg.ComponentConfigCommand.SET; /** @@ -35,6 +36,7 @@ public class ComponentConfigCommandCompleter implements Completer { SortedSet strings = delegate.getStrings(); strings.add(GET); strings.add(SET); + strings.add(PRESET); // Now let the completer do the work for figuring out what to offer. return delegate.complete(buffer, cursor, candidates); diff --git a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java index b53646f9b1..60feca0771 100644 --- a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java +++ b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java @@ -244,6 +244,9 @@ public class ComponentConfigManager implements ComponentConfigService { return; } } + + // If definition doesn't exist in local catalog, cache the property. + preSet(componentName, name, value); } // Locates the property in the component map and replaces it with an @@ -262,6 +265,21 @@ public class ComponentConfigManager implements ComponentConfigService { } } + // Stores non-existent property so that loadExistingValues() can load in future. + private void preSet(String componentName, String name, String value) { + try { + Configuration config = cfgAdmin.getConfiguration(componentName, null); + Dictionary props = config.getProperties(); + if (props == null) { + props = new Hashtable<>(); + } + props.put(name, value); + config.update(props); + } catch (IOException e) { + log.error("Failed to preset configuration for {}", componentName); + } + } + // Checks whether the value of the specified configuration property is a valid one or not. private void checkValidity(String componentName, String name, String newValue) { Map map = properties.get(componentName);