diff options
author | Jan Srnicek <jsrnicek@cisco.com> | 2017-05-12 07:57:57 +0200 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-05-12 07:12:28 +0000 |
commit | 31bad643f16b6986434571b46158e6c662a240be (patch) | |
tree | ba12c79969f554d9b659de327ba770b40cd57651 /interface-role/impl | |
parent | 9129ae7114c4215f5b61da4fd8360755127f815e (diff) |
HC2VPP-128 - interface role impl
Provides logic to store data in config datatree
Change-Id: Ia1304a84016f3df2b01a227d414fe75e3c647784
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Diffstat (limited to 'interface-role/impl')
7 files changed, 314 insertions, 0 deletions
diff --git a/interface-role/impl/asciidoc/Readme.adoc b/interface-role/impl/asciidoc/Readme.adoc new file mode 100644 index 000000000..d99f6e1d3 --- /dev/null +++ b/interface-role/impl/asciidoc/Readme.adoc @@ -0,0 +1,12 @@ += impl + +Add support for configuration of following interface roles: + +* virtual-domain-interface(Tenant network interface) + + +* public-interface(Public interface for external access) + + +Data stored in configuration storage only. +Does not support operational read.
\ No newline at end of file diff --git a/interface-role/impl/pom.xml b/interface-role/impl/pom.xml new file mode 100644 index 000000000..c017bfb73 --- /dev/null +++ b/interface-role/impl/pom.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (c) 2017 Cisco and/or its affiliates. + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at: + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>io.fd.hc2vpp.common</groupId> + <artifactId>impl-parent</artifactId> + <version>1.17.07-SNAPSHOT</version> + <relativePath>../../common/impl-parent</relativePath> + </parent> + + <groupId>io.fd.hc2vpp.iface.role</groupId> + <artifactId>impl</artifactId> + <version>1.17.07-SNAPSHOT</version> + <name>${project.artifactId}</name> + + <dependencies> + <dependency> + <groupId>io.fd.hc2vpp.iface.role</groupId> + <artifactId>api</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.google.inject</groupId> + <artifactId>guice</artifactId> + </dependency> + <dependency> + <groupId>io.fd.honeycomb</groupId> + <artifactId>translate-spi</artifactId> + <version>1.17.04-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>com.google.inject.extensions</groupId> + <artifactId>guice-multibindings</artifactId> + </dependency> + <dependency> + <groupId>io.fd.honeycomb</groupId> + <artifactId>translate-impl</artifactId> + <version>1.17.04-SNAPSHOT</version> + </dependency> + </dependencies> +</project>
\ No newline at end of file diff --git a/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/InterfaceRoleModule.java b/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/InterfaceRoleModule.java new file mode 100644 index 000000000..66b56450f --- /dev/null +++ b/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/InterfaceRoleModule.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.iface.role; + +import com.google.inject.AbstractModule; +import com.google.inject.multibindings.Multibinder; +import io.fd.hc2vpp.iface.role.read.InterfaceRoleReaderFactory; +import io.fd.hc2vpp.iface.role.write.InterfaceRoleWriterFactory; +import io.fd.honeycomb.translate.read.ReaderFactory; +import io.fd.honeycomb.translate.write.WriterFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class InterfaceRoleModule extends AbstractModule { + + private static final Logger LOG = LoggerFactory.getLogger(InterfaceRoleModule.class); + + @Override + protected void configure() { + LOG.info("Configuring interface role module"); + Multibinder.newSetBinder(binder(), ReaderFactory.class).addBinding().to(InterfaceRoleReaderFactory.class); + Multibinder.newSetBinder(binder(), WriterFactory.class).addBinding().to(InterfaceRoleWriterFactory.class); + LOG.info("Interface role module configured"); + } +} diff --git a/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/read/InterfaceRoleReadCustomizer.java b/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/read/InterfaceRoleReadCustomizer.java new file mode 100644 index 000000000..352b33c3c --- /dev/null +++ b/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/read/InterfaceRoleReadCustomizer.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.iface.role.read; + +import io.fd.honeycomb.translate.read.ReadContext; +import io.fd.honeycomb.translate.read.ReadFailedException; +import io.fd.honeycomb.translate.spi.read.ListReaderCustomizer; +import java.util.List; +import javax.annotation.Nonnull; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.RolesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.roles.Role; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.roles.RoleBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.roles.RoleKey; +import org.opendaylight.yangtools.concepts.Builder; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class InterfaceRoleReadCustomizer implements ListReaderCustomizer<Role, RoleKey, RoleBuilder> { + + @Nonnull + @Override + public List<RoleKey> getAllIds(@Nonnull final InstanceIdentifier<Role> instanceIdentifier, + @Nonnull final ReadContext readContext) throws ReadFailedException { + throw new UnsupportedOperationException("Operational read not supported for interface roles"); + } + + @Override + public void merge(@Nonnull final Builder<? extends DataObject> builder, @Nonnull final List<Role> list) { + ((RolesBuilder) builder).setRole(list); + } + + @Nonnull + @Override + public RoleBuilder getBuilder(@Nonnull final InstanceIdentifier<Role> instanceIdentifier) { + return new RoleBuilder(); + } + + @Override + public void readCurrentAttributes(@Nonnull final InstanceIdentifier<Role> instanceIdentifier, + @Nonnull final RoleBuilder roleBuilder, @Nonnull final ReadContext readContext) + throws ReadFailedException { + throw new UnsupportedOperationException("Operational read not supported for interface roles"); + } +} diff --git a/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/read/InterfaceRoleReaderFactory.java b/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/read/InterfaceRoleReaderFactory.java new file mode 100644 index 000000000..3641742bf --- /dev/null +++ b/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/read/InterfaceRoleReaderFactory.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.iface.role.read; + +import io.fd.honeycomb.translate.impl.read.GenericListReader; +import io.fd.honeycomb.translate.read.ReaderFactory; +import io.fd.honeycomb.translate.read.registry.ModifiableReaderRegistryBuilder; +import javax.annotation.Nonnull; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315.InterfaceRoleStateAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315.InterfaceRoleStateAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.Roles; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.RolesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.roles.Role; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class InterfaceRoleReaderFactory implements ReaderFactory { + + @Override + public void init(@Nonnull final ModifiableReaderRegistryBuilder registry) { + final InstanceIdentifier<InterfaceRoleStateAugmentation> augId = + InstanceIdentifier.create(InterfacesState.class) + .child(Interface.class) + .augmentation(InterfaceRoleStateAugmentation.class); + registry.addStructuralReader(augId, InterfaceRoleStateAugmentationBuilder.class); + + final InstanceIdentifier<Roles> rolesId = augId.child(Roles.class); + registry.addStructuralReader(rolesId, RolesBuilder.class); + registry.add(new GenericListReader<>(rolesId.child(Role.class), new InterfaceRoleReadCustomizer())); + } +} diff --git a/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/write/InterfaceRoleWriteCustomizer.java b/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/write/InterfaceRoleWriteCustomizer.java new file mode 100644 index 000000000..fab3ed8c0 --- /dev/null +++ b/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/write/InterfaceRoleWriteCustomizer.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.iface.role.write; + + +import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer; +import io.fd.honeycomb.translate.write.WriteContext; +import io.fd.honeycomb.translate.write.WriteFailedException; +import javax.annotation.Nonnull; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.roles.Role; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.roles.RoleKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class InterfaceRoleWriteCustomizer implements ListWriterCustomizer<Role, RoleKey> { + + private static final Logger LOG = LoggerFactory.getLogger(InterfaceRoleWriteCustomizer.class); + + @Override + public void writeCurrentAttributes(@Nonnull final InstanceIdentifier<Role> instanceIdentifier, + @Nonnull final Role role, + @Nonnull final WriteContext writeContext) throws WriteFailedException { + LOG.debug("Writing interface role {} for interface {}", role, + instanceIdentifier.firstKeyOf(Interface.class).getName()); + } + + @Override + public void updateCurrentAttributes(@Nonnull final InstanceIdentifier<Role> instanceIdentifier, + @Nonnull final Role roleBefore, + @Nonnull final Role roleAfter, + @Nonnull final WriteContext writeContext) + throws WriteFailedException { + LOG.debug("Updating interface role from {} to {} for interface {}", roleBefore, roleAfter, + instanceIdentifier.firstKeyOf(Interface.class).getName()); + } + + @Override + public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<Role> instanceIdentifier, + @Nonnull final Role role, + @Nonnull final WriteContext writeContext) throws WriteFailedException { + LOG.debug("Removing interface role {} for interface {}", role, + instanceIdentifier.firstKeyOf(Interface.class).getName()); + } +} diff --git a/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/write/InterfaceRoleWriterFactory.java b/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/write/InterfaceRoleWriterFactory.java new file mode 100644 index 000000000..537c3795e --- /dev/null +++ b/interface-role/impl/src/main/java/io/fd/hc2vpp/iface/role/write/InterfaceRoleWriterFactory.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.hc2vpp.iface.role.write; + +import io.fd.honeycomb.translate.impl.write.GenericListWriter; +import io.fd.honeycomb.translate.write.WriterFactory; +import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; +import javax.annotation.Nonnull; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315.InterfaceRoleAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.Roles; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.role.rev170315._interface.role.grouping.roles.Role; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class InterfaceRoleWriterFactory implements WriterFactory { + + @Override + public void init(@Nonnull final ModifiableWriterRegistryBuilder registryBuilder) { + final InstanceIdentifier<Role> roleId = InstanceIdentifier.create(Interfaces.class) + .child(Interface.class).augmentation(InterfaceRoleAugmentation.class) + .child(Roles.class).child(Role.class); + registryBuilder.add(new GenericListWriter<>(roleId, new InterfaceRoleWriteCustomizer())); + } +} |