Deprecate getSemanticVersion() for removal 60/100960/5
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 3 May 2022 21:51:59 +0000 (23:51 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 3 May 2022 23:26:51 +0000 (01:26 +0200)
NETMOD WG has a versioning proposal which will supersede OpenConfig,
deprecate API elements which are tied to OpenConfig versioning.

Change-Id: I2bbe1a8e6be78ecc5e911a367b0893515beaa836
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
14 files changed:
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleLike.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java
model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangModelDependencyInfo.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionBorderCaseTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionComplexTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionDefaultsTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionIgnoringRevisionTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionImportTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionMultipleImportTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionPositionTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/yin/YinOpenconfigVersionTest.java

index 4a135bb4a2d6d8d6098fd665fd2786c6d9549cd2..3e353cd0794dfe8c451735f2c86f46f794a023ce 100644 (file)
@@ -43,7 +43,9 @@ public interface ModuleImport extends DocumentedNode, EffectiveStatementEquivale
      * Returns the semantic version to import.
      *
      * @return Semantic version of module to import
+     * @deprecated Semantic version imports are deprecated.
      */
+    @Deprecated(since = "8.0.4", forRemoval = true)
     Optional<SemVer> getSemanticVersion();
 
     /**
index 09892dfe1e9bfa9e9f276fdbb20283da9808f406..b275b1a845f86a019c38c8d57cbee7f53ac5cb06 100644 (file)
@@ -34,7 +34,9 @@ public interface ModuleLike extends DataNodeContainer, DocumentedNode, Immutable
      *
      * @return SemVer semantic version of YANG module which is specified as argument of
      *         {@code (urn:opendaylight:yang:extension:semantic-version?revision=2016-02-02)semantic-version} statement
+     * @deprecated Semantic version imports are deprecated.
      */
+    @Deprecated(since = "8.0.4", forRemoval = true)
     Optional<SemVer> getSemanticVersion();
 
     /**
index c7147dddb06dff3b1b3b087c3abae89182db53c8..0a0818b75fffc2e928704e5ff4d531b993ab331c 100644 (file)
@@ -43,6 +43,7 @@ public final class ImportEffectiveStatementImpl extends WithSubstatements<String
     }
 
     @Override
+    @Deprecated(since = "8.0.4", forRemoval = true)
     public Optional<SemVer> getSemanticVersion() {
         return Optional.ofNullable(semVer);
     }
index ab75d70bec2f9d6d80861cc427fd456004b53395..0acdbfe81c06750e980abd3095c4a0a51d0905eb 100644 (file)
@@ -17,7 +17,6 @@ import com.google.common.collect.ImmutableSet;
 import java.net.URI;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
@@ -369,8 +368,8 @@ public class SchemaContextProxyTest {
 
         SchemaContext schemaContext = mockSchema(module2, module3, module4, module5);
 
-        FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-                Collections.singleton(module2), null);
+        FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(module2),
+            null);
         assertProxyContext(filteringSchemaContextProxy, module2, module3, module4, module5);
     }
 
@@ -397,8 +396,8 @@ public class SchemaContextProxyTest {
 
         SchemaContext schemaContext = mockSchema(moduleConfig, module2, module3, module4, module5);
 
-        FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-            Collections.singleton(module3), moduleConfig);
+        FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(module3),
+            moduleConfig);
         assertProxyContext(filteringSchemaContextProxy, moduleConfig, module2, module3, module4);
     }
 
@@ -406,12 +405,11 @@ public class SchemaContextProxyTest {
     public void testGetDataDefinitions() {
         final Module moduleConfig = mockModule(CONFIG_NAME);
         final SchemaContext schemaContext = mockSchema(moduleConfig);
-        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-                new HashSet<>(), moduleConfig);
+        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(),
+            moduleConfig);
 
         final ContainerSchemaNode mockedContainer = mock(ContainerSchemaNode.class);
-        final Set<DataSchemaNode> childNodes = Collections.singleton(mockedContainer);
-        doReturn(childNodes).when(moduleConfig).getChildNodes();
+        doReturn(Set.of(mockedContainer)).when(moduleConfig).getChildNodes();
 
         final Collection<? extends DataSchemaNode> dataDefinitions =
                 filteringSchemaContextProxy.getDataDefinitions();
@@ -422,12 +420,11 @@ public class SchemaContextProxyTest {
     public void testGetNotifications() {
         final Module moduleConfig = mockModule(CONFIG_NAME);
         final SchemaContext schemaContext = mockSchema(moduleConfig);
-        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-                new HashSet<>(), moduleConfig);
+        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(),
+            moduleConfig);
 
         final NotificationDefinition mockedNotification = mock(NotificationDefinition.class);
-        final Set<NotificationDefinition> notifications = Collections.singleton(mockedNotification);
-        doReturn(notifications).when(moduleConfig).getNotifications();
+        doReturn(Set.of(mockedNotification)).when(moduleConfig).getNotifications();
 
         final Collection<? extends NotificationDefinition> schemaContextProxyNotifications =
             filteringSchemaContextProxy.getNotifications();
@@ -438,12 +435,11 @@ public class SchemaContextProxyTest {
     public void testGetOperations() {
         final Module moduleConfig = mockModule(CONFIG_NAME);
         final SchemaContext schemaContext = mockSchema(moduleConfig);
-        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-                new HashSet<>(), moduleConfig);
+        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(),
+            moduleConfig);
 
         final RpcDefinition mockedRpc = mock(RpcDefinition.class);
-        final Set<RpcDefinition> rpcs = Collections.singleton(mockedRpc);
-        doReturn(rpcs).when(moduleConfig).getRpcs();
+        doReturn(Set.of(mockedRpc)).when(moduleConfig).getRpcs();
 
         final Collection<? extends RpcDefinition> operations = filteringSchemaContextProxy.getOperations();
         assertTrue(operations.contains(mockedRpc));
@@ -453,12 +449,11 @@ public class SchemaContextProxyTest {
     public void testGetExtensions() {
         final Module moduleConfig = mockModule(CONFIG_NAME);
         final SchemaContext schemaContext = mockSchema(moduleConfig);
-        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-                new HashSet<>(), moduleConfig);
+        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(),
+            moduleConfig);
 
         final ExtensionDefinition mockedExtension = mock(ExtensionDefinition.class);
-        final List<ExtensionDefinition> extensions = Collections.singletonList(mockedExtension);
-        doReturn(extensions).when(moduleConfig).getExtensionSchemaNodes();
+        doReturn(List.of(mockedExtension)).when(moduleConfig).getExtensionSchemaNodes();
 
         final Collection<? extends ExtensionDefinition> schemaContextProxyExtensions =
                 filteringSchemaContextProxy.getExtensions();
@@ -469,12 +464,11 @@ public class SchemaContextProxyTest {
     public void testGetUnknownSchemaNodes() {
         final Module moduleConfig = mockModule(CONFIG_NAME);
         final SchemaContext schemaContext = mockSchema(moduleConfig);
-        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-                new HashSet<>(), moduleConfig);
+        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(),
+            moduleConfig);
 
         final UnknownSchemaNode mockedUnknownSchemaNode = mock(UnknownSchemaNode.class);
-        final List<UnknownSchemaNode> unknownSchemaNodes = Collections.singletonList(mockedUnknownSchemaNode);
-        doReturn(unknownSchemaNodes).when(moduleConfig).getUnknownSchemaNodes();
+        doReturn(List.of(mockedUnknownSchemaNode)).when(moduleConfig).getUnknownSchemaNodes();
 
         final Collection<? extends UnknownSchemaNode> schemaContextProxyUnknownSchemaNodes =
                 filteringSchemaContextProxy.getUnknownSchemaNodes();
@@ -485,12 +479,11 @@ public class SchemaContextProxyTest {
     public void testGetTypeDefinitions() {
         final Module moduleConfig = mockModule(CONFIG_NAME);
         final SchemaContext schemaContext = mockSchema(moduleConfig);
-        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-                new HashSet<>(), moduleConfig);
+        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(),
+            moduleConfig);
 
         final TypeDefinition<?> mockedTypeDefinition = mock(TypeDefinition.class);
-        final Set<TypeDefinition<?>> typeDefinitions = Collections.singleton(mockedTypeDefinition);
-        doReturn(typeDefinitions).when(moduleConfig).getTypeDefinitions();
+        doReturn(Set.of(mockedTypeDefinition)).when(moduleConfig).getTypeDefinitions();
 
         final Collection<? extends TypeDefinition<?>> schemaContextProxyTypeDefinitions = filteringSchemaContextProxy
             .getTypeDefinitions();
@@ -501,12 +494,11 @@ public class SchemaContextProxyTest {
     public void testGetChildNodes() {
         final Module moduleConfig = mockModule(CONFIG_NAME);
         final SchemaContext schemaContext = mockSchema(moduleConfig);
-        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-                new HashSet<>(), moduleConfig);
+        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(),
+            moduleConfig);
 
         final ContainerSchemaNode mockedContainer = mock(ContainerSchemaNode.class);
-        final Set<DataSchemaNode> childNodes = Collections.singleton(mockedContainer);
-        doReturn(childNodes).when(moduleConfig).getChildNodes();
+        doReturn(Set.of(mockedContainer)).when(moduleConfig).getChildNodes();
 
         final Collection<? extends DataSchemaNode> schemaContextProxyChildNodes =
                 filteringSchemaContextProxy.getChildNodes();
@@ -517,12 +509,11 @@ public class SchemaContextProxyTest {
     public void testGetGroupings() {
         final Module moduleConfig = mockModule(CONFIG_NAME);
         final SchemaContext schemaContext = mockSchema(moduleConfig);
-        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-                new HashSet<>(), moduleConfig);
+        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(),
+            moduleConfig);
 
         final GroupingDefinition mockedGrouping = mock(GroupingDefinition.class);
-        final Set<GroupingDefinition> groupings = Collections.singleton(mockedGrouping);
-        doReturn(groupings).when(moduleConfig).getGroupings();
+        doReturn(Set.of(mockedGrouping)).when(moduleConfig).getGroupings();
 
         final Collection<? extends GroupingDefinition> schemaContextProxyGroupings =
                 filteringSchemaContextProxy.getGroupings();
@@ -533,8 +524,8 @@ public class SchemaContextProxyTest {
     public void testGetDataChildByName() {
         final Module moduleConfig = mockModule(CONFIG_NAME);
         final SchemaContext schemaContext = mockSchema(moduleConfig);
-        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext,
-                new HashSet<>(), moduleConfig);
+        final FilteringSchemaContextProxy filteringSchemaContextProxy = createProxySchemaCtx(schemaContext, Set.of(),
+            moduleConfig);
 
         final QName qname = QName.create("config-namespace", "2016-08-11", "cont");
         final ContainerSchemaNode mockedContainer = mock(ContainerSchemaNode.class);
@@ -547,7 +538,7 @@ public class SchemaContextProxyTest {
     private static void assertProxyContext(final FilteringSchemaContextProxy filteringSchemaContextProxy,
             final Module... expected) {
 
-        final Set<Module> modSet = expected != null ? ImmutableSet.copyOf(expected) : new HashSet<>();
+        final Set<Module> modSet = expected != null ? ImmutableSet.copyOf(expected) : Set.of();
         Set<Module> modSetFiltering = filteringSchemaContextProxy.getModules();
 
         assertEquals(modSet, modSetFiltering);
@@ -568,11 +559,7 @@ public class SchemaContextProxyTest {
 
     private static FilteringSchemaContextProxy createProxySchemaCtx(final SchemaContext schemaContext,
             final Set<Module> additionalModules, final Module... modules) {
-        Set<Module> modulesSet = new HashSet<>();
-        if (modules != null) {
-            modulesSet = ImmutableSet.copyOf(modules);
-        }
-
+        Set<Module> modulesSet = modules != null ? ImmutableSet.copyOf(modules) : Set.of();
         return new FilteringSchemaContextProxy(schemaContext, createModuleIds(modulesSet),
                 createModuleIds(additionalModules));
     }
@@ -589,10 +576,7 @@ public class SchemaContextProxyTest {
     }
 
     private static void mockSubmodules(final Module mainModule, final Submodule... submodules) {
-        Set<Submodule> submodulesSet = new HashSet<>();
-        submodulesSet.addAll(Arrays.asList(submodules));
-
-        doReturn(submodulesSet).when(mainModule).getSubmodules();
+        doReturn(Set.of(submodules)).when(mainModule).getSubmodules();
     }
 
     private static void mockModuleImport(final ModuleLike importer, final Module... imports) {
@@ -615,6 +599,7 @@ public class SchemaContextProxyTest {
                 }
 
                 @Override
+                @Deprecated(since = "8.0.4", forRemoval = true)
                 public Optional<SemVer> getSemanticVersion() {
                     return module.getSemanticVersion();
                 }
@@ -674,7 +659,7 @@ public class SchemaContextProxyTest {
         final XMLNamespace newNamespace = XMLNamespace.of(NAMESPACE.toString() + ":" + name);
         doReturn(newNamespace).when(mockedModule).getNamespace();
         doReturn(QNameModule.create(newNamespace, REVISION)).when(mockedModule).getQNameModule();
-        doReturn(new HashSet<>()).when(mockedModule).getSubmodules();
+        doReturn(Set.of()).when(mockedModule).getSubmodules();
         doReturn(mockedModule.getQNameModule().toString()).when(mockedModule).toString();
         mockModuleImport(mockedModule);
     }
index 42b9e38a0b2d3a7301a2a4dde53eaafc62c1bad0..043ca62d4f80918af4d94877b5b1d29af7eae338 100644 (file)
@@ -131,7 +131,9 @@ public abstract class YangModelDependencyInfo {
      * Returns semantic version of module.
      *
      * @return semantic version
+     * @deprecated Semantic versioning is deprecated
      */
+    @Deprecated(since = "8.0.4", forRemoval = true)
     public Optional<SemVer> getSemanticVersion() {
         return Optional.ofNullable(semVer);
     }
@@ -407,6 +409,7 @@ public abstract class YangModelDependencyInfo {
         }
 
         @Override
+        @Deprecated(forRemoval = true)
         public Optional<SemVer> getSemanticVersion() {
             return Optional.ofNullable(semVer);
         }
index d645e185f266358e75b8df643d32379660aada7f..399e5d4cdd9c1b5e6b560edc63440dba5ee51b45 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
 
+@Deprecated(since = "8.0.4", forRemoval = true)
 public class OpenconfigVersionBorderCaseTest {
     private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
         .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
index c500b43cb8941864b0ebdf1b643300fde80efe04..11272046de702016ca342f6adcb90655776da533 100644 (file)
@@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
 
+@Deprecated(since = "8.0.4", forRemoval = true)
 public class OpenconfigVersionComplexTest {
     private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
         .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
index 1f1e23ceb2e1045be416559e19b39f43e7d355c0..65e60945dd04097de94e73b4a4fc1bb999ce5b75 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
 
+@Deprecated(since = "8.0.4", forRemoval = true)
 public class OpenconfigVersionDefaultsTest {
     private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
         .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
index e85b1ec31c348151fb249b5e354096b74b00dda0..9cffcd4237b7dfd74dd6fb7ff5a2edb49a5994bb 100644 (file)
@@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
 
+@Deprecated(since = "8.0.4", forRemoval = true)
 public class OpenconfigVersionIgnoringRevisionTest {
     private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
         .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
index d9ea7a976e54054136125f26e7f2118f5c674938..520f0242be1ae18ea3918a71ba59e9c9154b8542 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
 
+@Deprecated(since = "8.0.4", forRemoval = true)
 public class OpenconfigVersionImportTest {
     private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
         .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
index a9febc3c41daa91b731c9a22d3ca110d956a0efb..97ba3cd9353a9ec093e725fa24719d738a5995d9 100644 (file)
@@ -24,6 +24,7 @@ import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
 
+@Deprecated(since = "8.0.4", forRemoval = true)
 public class OpenconfigVersionMultipleImportTest {
     private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
         .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
index 2b872b95fbf359b0343cc003e72dda3dc86e5630..6a39042df65daa908925b223a0c40161798d3857 100644 (file)
@@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
 
+@Deprecated(since = "8.0.4", forRemoval = true)
 public class OpenconfigVersionPositionTest {
     private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
         .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
index 639c36a1e13ba1d459d3a6d407b93784a4ead68e..11f83b9fcf3a109ff43a1e971208c8f6dd31d0f9 100644 (file)
@@ -29,6 +29,7 @@ import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
 
+@Deprecated(since = "8.0.4", forRemoval = true)
 public class OpenconfigVersionTest {
     private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
         .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)
index 99ef80647313e177ec2def92d86d3c68f4665ddd..375fb185adb6a594a7ac1aafe33de127fae15c7f 100644 (file)
@@ -26,6 +26,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
 import org.xml.sax.SAXException;
 
+@Deprecated(since = "8.0.4", forRemoval = true)
 public class YinOpenconfigVersionTest {
     private static final YangParserConfiguration SEMVER = YangParserConfiguration.builder()
         .importResolutionMode(ImportResolutionMode.OPENCONFIG_SEMVER)