2 * Copyright (c) 2018 Red Hat, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netvirt.coe.utils;
10 import com.google.common.collect.ImmutableBiMap;
11 import java.util.List;
12 import javax.annotation.Nonnull;
13 import javax.annotation.Nullable;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.core.rev181205.Protocol;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.meta.v1.rev181205.label.selector.MatchLabels;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.meta.v1.rev181205.label.selector.MatchLabelsBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.PolicyType;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.ip.block.IpBlock;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.ip.block.IpBlockBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.NetworkPolicies;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.egress.rule.NetworkPolicyEgressRule;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.egress.rule.NetworkPolicyEgressRuleBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.egress.rule.network.policy.egress.rule.EgressPorts;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.egress.rule.network.policy.egress.rule.EgressPortsBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.egress.rule.network.policy.egress.rule.To;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.egress.rule.network.policy.egress.rule.ToBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.ingress.rule.NetworkPolicyIngressRule;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.ingress.rule.NetworkPolicyIngressRuleBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.ingress.rule.network.policy.ingress.rule.From;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.ingress.rule.network.policy.ingress.rule.FromBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.ingress.rule.network.policy.ingress.rule.IngressPorts;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.ingress.rule.network.policy.ingress.rule.IngressPortsBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.network.policies.NetworkPolicy;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.network.policies.NetworkPolicyBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.network.policies.NetworkPolicyKey;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.peer.NetworkPolicyPeer;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.peer.NetworkPolicyPeerBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.port.NetworkPolicyPort;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.port.NetworkPolicyPortBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.spec.NetworkPolicySpec;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.spec.NetworkPolicySpecBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.spec.network.policy.spec.Egress;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.spec.network.policy.spec.EgressBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.spec.network.policy.spec.Ingress;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.spec.network.policy.spec.IngressBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.spec.network.policy.spec.PodSelector;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.network.policy.rev181205.network.policy.spec.network.policy.spec.PodSelectorBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.k8s.rev181205.K8s;
50 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
52 public final class NetworkPolicyUtils {
53 public static final ImmutableBiMap<Protocol, Short> PROTOCOL_MAP = ImmutableBiMap.of(
54 Protocol.TCP, (short)6,
55 Protocol.UDP, (short)17,
56 Protocol.SCTP, (short)132
59 private NetworkPolicyUtils() {}
62 public static MatchLabels buildMatchLabels(@Nonnull String key, @Nonnull String value) {
63 return new MatchLabelsBuilder().setKey(key).setValue(value).build();
67 public static PodSelector buildPodSelector(@Nonnull List<MatchLabels> matchLabels) {
68 return new PodSelectorBuilder().setMatchLabels(matchLabels).build();
72 public static InstanceIdentifier<NetworkPolicy> getNetworkPolicyIid(@Nonnull String uuid) {
73 return InstanceIdentifier.create(K8s.class).child(NetworkPolicies.class)
74 .child(NetworkPolicy.class, new NetworkPolicyKey(new Uuid(uuid)));
78 public static IpBlock buildIpBlock(@Nonnull String cidr, @Nullable List<String> except) {
79 IpBlockBuilder ipBlockBuilder = new IpBlockBuilder().setCidr(cidr);
81 if (except != null && !except.isEmpty()) {
82 ipBlockBuilder.setExcept(except);
85 return new IpBlockBuilder().setCidr(cidr).setExcept(except).build();
88 // TODO add pod and namespace selector handling
90 public static NetworkPolicyPeer buildNetworkPolicyPeer(@Nonnull IpBlock ipBlock) {
91 return new NetworkPolicyPeerBuilder().setIpBlock(ipBlock).build();
95 public static NetworkPolicyPort buildNetworkPolicyPort(@Nonnull String port, @Nonnull Protocol protocol) {
96 return new NetworkPolicyPortBuilder().setPort(port).setProtocol(protocol).build();
100 public static IngressPorts buildIngressPorts(@Nonnull NetworkPolicyPort port) {
101 return new IngressPortsBuilder().setNetworkPolicyPort(port).build();
105 public static From buildFrom(@Nonnull NetworkPolicyPeer peer) {
106 return new FromBuilder().setNetworkPolicyPeer(peer).build();
110 public static EgressPorts buildEgressPorts(@Nonnull NetworkPolicyPort port) {
111 return new EgressPortsBuilder().setNetworkPolicyPort(port).build();
115 public static To buildTo(@Nonnull NetworkPolicyPeer peer) {
116 return new ToBuilder().setNetworkPolicyPeer(peer).build();
120 public static NetworkPolicyIngressRule buildNetworkPolicyIngressRule(@Nullable List<IngressPorts> ports,
121 @Nullable List<From> fromList) {
123 NetworkPolicyIngressRuleBuilder networkPolicyIngressRuleBuilder = new NetworkPolicyIngressRuleBuilder();
125 if (ports != null && !ports.isEmpty()) {
126 networkPolicyIngressRuleBuilder.setIngressPorts(ports);
128 if (fromList != null && !fromList.isEmpty()) {
129 networkPolicyIngressRuleBuilder.setFrom(fromList);
132 return networkPolicyIngressRuleBuilder.build();
136 public static NetworkPolicyEgressRule buildNetworkPolicyEgressRule(@Nullable List<EgressPorts> ports,
137 @Nullable List<To> toList) {
139 NetworkPolicyEgressRuleBuilder networkPolicyEgressRuleBuilder = new NetworkPolicyEgressRuleBuilder();
141 if (ports != null && !ports.isEmpty()) {
142 networkPolicyEgressRuleBuilder.setEgressPorts(ports);
144 if (toList != null && !toList.isEmpty()) {
145 networkPolicyEgressRuleBuilder.setTo(toList);
148 return networkPolicyEgressRuleBuilder.build();
152 public static Ingress buildIngress(@Nonnull NetworkPolicyIngressRule rule) {
153 return new IngressBuilder().setNetworkPolicyIngressRule(rule).build();
157 public static Egress buildEgress(@Nonnull NetworkPolicyEgressRule rule) {
158 return new EgressBuilder().setNetworkPolicyEgressRule(rule).build();
162 public static NetworkPolicySpec buildNetworkPolicySpec(@Nonnull PodSelector podSelector,
163 @Nullable List<Ingress> ingress,
164 @Nullable List<Egress> egress,
165 @Nullable List<PolicyType> policyTypes) {
166 NetworkPolicySpecBuilder networkPolicySpecBuilder = new NetworkPolicySpecBuilder().setPodSelector(podSelector);
168 if (ingress != null && !ingress.isEmpty()) {
169 networkPolicySpecBuilder.setIngress(ingress);
171 if (egress != null && !egress.isEmpty()) {
172 networkPolicySpecBuilder.setEgress(egress);
174 if (policyTypes != null && !policyTypes.isEmpty()) {
175 networkPolicySpecBuilder.setPolicyTypes(policyTypes);
178 return networkPolicySpecBuilder.build();
182 public static NetworkPolicy buildNetworkPolicy(@Nonnull String uuid, @Nullable String name,
183 @Nullable NetworkPolicySpec spec) {
184 NetworkPolicyBuilder networkPolicyBuilder = new NetworkPolicyBuilder().setUuid(new Uuid(uuid));
186 networkPolicyBuilder.setName(name);
189 networkPolicyBuilder.setNetworkPolicySpec(spec);
192 return networkPolicyBuilder.build();