Skip to content

Commit

Permalink
change the hybrid overlay config to use the ConfigMap instead of cli
Browse files Browse the repository at this point in the history
move the enabling of hybrid overlay into the ConfigMap for ovnkube like
all new arguments should be

Signed-off-by: Jacob Tanenbaum <jtanenba@redhat.com>
  • Loading branch information
JacobTanenbaum committed Aug 31, 2020
1 parent 92e466d commit a4ed25a
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 23 deletions.
10 changes: 10 additions & 0 deletions bindata/network/ovn-kubernetes/004-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,13 @@ data:
[gateway]
mode=local
nodeport=true
{{ if .OVNHybridOverlayEnable }}
[hybridoverlay]
enabled=true
{{- if .OVNHybridOverlayNetCIDR }}
cluster-subnets="{{.OVNHybridOverlayNetCIDR}}"
{{- end }}
{{- if .OVNHybridOverlayVXLANPort}}
hybrid-overlay-vxlan-port="{{.OVNHybridOverlayVXLANPort}}"
{{- end }}
{{- end }}
12 changes: 0 additions & 12 deletions bindata/network/ovn-kubernetes/ovnkube-master.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -484,17 +484,6 @@ spec:
set +o allexport
fi
hybrid_overlay_flags=
if [[ -n "{{.OVNHybridOverlayEnable }}" ]]; then
hybrid_overlay_flags="--enable-hybrid-overlay --no-hostsubnet-nodes=kubernetes.io/os=windows"
if [[ -n "{{.OVNHybridOverlayNetCIDR}}" ]]; then
hybrid_overlay_flags="${hybrid_overlay_flags} --hybrid-overlay-cluster-subnets={{.OVNHybridOverlayNetCIDR}}"
fi
if [[ -n "{{.OVNHybridOverlayVXLANPort}}" ]]; then
hybrid_overlay_flags="${hybrid_overlay_flags} --hybrid-overlay-vxlan-port={{.OVNHybridOverlayVXLANPort}}"
fi
fi
gateway_mode_flags=
# Check to see if ovs is provided by the node. This is only for upgrade from 4.5->4.6 or
# openshift-sdn to ovn-kube conversion
Expand All @@ -520,7 +509,6 @@ spec:
--config-file=/run/ovnkube-config/ovnkube.conf \
--ovn-empty-lb-events \
--loglevel "${OVN_KUBE_LOG_LEVEL}" \
${hybrid_overlay_flags} \
--metrics-bind-address "127.0.0.1:29102" \
${gateway_mode_flags} \
--sb-address "{{.OVN_SB_DB_LIST}}" \
Expand Down
11 changes: 0 additions & 11 deletions bindata/network/ovn-kubernetes/ovnkube-node.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -119,16 +119,6 @@ spec:
done
echo "I$(date "+%m%d %H:%M:%S.%N") - starting ovnkube-node db_ip ${db_ip}"
hybrid_overlay_flags=
if [[ -n "{{.OVNHybridOverlayEnable}}" ]]; then
hybrid_overlay_flags="--enable-hybrid-overlay --no-hostsubnet-nodes=kubernetes.io/os=windows"
if [[ -n "{{.OVNHybridOverlayNetCIDR}}" ]]; then
hybrid_overlay_flags="${hybrid_overlay_flags} --hybrid-overlay-cluster-subnets={{.OVNHybridOverlayNetCIDR}}"
fi
if [[ -n "{{.OVNHybridOverlayVXLANPort}}" ]]; then
hybrid_overlay_flags="${hybrid_overlay_flags} --hybrid-overlay-vxlan-port={{.OVNHybridOverlayVXLANPort}}"
fi
fi
gateway_mode_flags=
# Check to see if ovs is provided by the node. This is only for upgrade from 4.5->4.6 or
Expand All @@ -153,7 +143,6 @@ spec:
--config-file=/run/ovnkube-config/ovnkube.conf \
--loglevel "${OVN_KUBE_LOG_LEVEL}" \
--inactivity-probe="${OVN_CONTROLLER_INACTIVITY_PROBE}" \
${hybrid_overlay_flags} \
${gateway_mode_flags} \
--metrics-bind-address "127.0.0.1:29103"
env:
Expand Down
98 changes: 98 additions & 0 deletions pkg/network/ovn_kubernetes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package network

import (
"fmt"
"os"
"strings"
"testing"

Expand Down Expand Up @@ -70,6 +71,7 @@ func TestRenderOVNKubernetes(t *testing.T) {
g.Expect(objs).To(ContainElement(HaveKubernetesID("ClusterRoleBinding", "", "openshift-ovn-kubernetes-node")))
g.Expect(objs).To(ContainElement(HaveKubernetesID("DaemonSet", "openshift-ovn-kubernetes", "ovnkube-master")))
g.Expect(objs).To(ContainElement(HaveKubernetesID("DaemonSet", "openshift-ovn-kubernetes", "ovnkube-node")))
g.Expect(objs).To(ContainElement(HaveKubernetesID("ConfigMap", "openshift-ovn-kubernetes", "ovnkube-config")))

// make sure all deployments are in the master
for _, obj := range objs {
Expand Down Expand Up @@ -139,6 +141,90 @@ func TestRenderOVNKubernetesIPv6(t *testing.T) {
g.Expect(script).To(ContainSubstring("pssl:9641:[::]"))
}

/*
var OVNKubernetesConfig = operv1.Network{
Spec: operv1.NetworkSpec{
ServiceNetwork: []string{"172.30.0.0/16"},
ClusterNetwork: []operv1.ClusterNetworkEntry{
{
CIDR: "10.128.0.0/15",
HostPrefix: 23,
},
{
CIDR: "10.0.0.0/14",
HostPrefix: 24,
},
},
DefaultNetwork: operv1.DefaultNetworkDefinition{
Type: operv1.NetworkTypeOVNKubernetes,
OVNKubernetesConfig: &operv1.OVNKubernetesConfig{
GenevePort: &g,
},
},
},
}
*/
func TestRenderedOVNKubernetesConfig(t *testing.T) {
type testcase struct {
desc string
expected string
hybridOverlayConfig *operv1.HybridOverlayConfig
}
testcases := []testcase{
{
desc: "default",
expected: "[default]\nmtu=\"1500\"\ncluster-subnets=\"10.128.0.0/15/23,10.0.0.0/14/24\"\n" +
"encap-port=\"8061\"\n\n[kubernetes]\nservice-cidrs=\"172.30.0.0/16\"\n" +
"ovn-config-namespace=\"openshift-ovn-kubernetes\"\napiserver=\"" + fmt.Sprintf("https://%s:%s", os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT")) + "\"\n\n" +
"[gateway]\nmode=local\nnodeport=true",
},
{
desc: "HybridOverlay",
expected: "[default]\nmtu=\"1500\"\ncluster-subnets=\"10.128.0.0/15/23,10.0.0.0/14/24\"\n" +
"encap-port=\"8061\"\n\n[kubernetes]\nservice-cidrs=\"172.30.0.0/16\"\n" +
"ovn-config-namespace=\"openshift-ovn-kubernetes\"\napiserver=\"" + fmt.Sprintf("https://%s:%s", os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT")) + "\"\n\n" +
"[gateway]\nmode=local\nnodeport=true\n\n[hybridoverlay]\nenabled=true\ncluster-subnets=\"10.132.0.0/14\"",
hybridOverlayConfig: &operv1.HybridOverlayConfig{
HybridClusterNetwork: []operv1.ClusterNetworkEntry{
{CIDR: "10.132.0.0/14", HostPrefix: 23},
},
},
},
}
g := NewGomegaWithT(t)

for i, tc := range testcases {
t.Run(fmt.Sprintf("%d:%s", i, tc.desc), func(t *testing.T) {
OVNKubeConfig := OVNKubernetesConfig
if tc.hybridOverlayConfig != nil {
OVNKubeConfig.Spec.DefaultNetwork.OVNKubernetesConfig.HybridOverlayConfig = tc.hybridOverlayConfig
}
//set a few files so that they are not machine dependant
mtu := uint32(1500)
OVNKubeConfig.Spec.DefaultNetwork.OVNKubernetesConfig.MTU = &mtu

crd := OVNKubeConfig.DeepCopy()
config := &crd.Spec

errs := validateOVNKubernetes(config)
g.Expect(errs).To(HaveLen(0))
FillDefaults(config, nil)

bootstrapResult := &bootstrap.BootstrapResult{
OVN: bootstrap.OVNBootstrapResult{
MasterIPs: []string{"1.2.3.4", "5.6.7.8", "9.10.11.12"},
},
}
objs, err := renderOVNKubernetes(config, bootstrapResult, manifestDirOvn)
g.Expect(err).NotTo(HaveOccurred())
conffile := extractOVNKubeConfig(g, objs)
fmt.Printf("KEYWORD %s\n", conffile)
g.Expect(conffile).To(Equal(tc.expected))
})
}

}

func findNBDBPostStart(objects []*uns.Unstructured) (string, error) {
var master *uns.Unstructured
for _, obj := range objects {
Expand Down Expand Up @@ -344,3 +430,15 @@ func TestOVNKubernetesIsSafe(t *testing.T) {
g.Expect(errs[0]).To(MatchError("cannot change ovn-kubernetes MTU"))
g.Expect(errs[1]).To(MatchError("cannot change ovn-kubernetes genevePort"))
}

func extractOVNKubeConfig(g *WithT, objs []*uns.Unstructured) string {
for _, obj := range objs {
if obj.GetKind() == "ConfigMap" && obj.GetName() == "ovnkube-config" {
val, ok, err := uns.NestedString(obj.Object, "data", "ovnkube.conf")
g.Expect(err).NotTo(HaveOccurred())
g.Expect(ok).To(BeTrue())
return string(val)
}
}
return ""
}

0 comments on commit a4ed25a

Please sign in to comment.