Skip to content

Commit

Permalink
Add CLI flag for ingress controllers
Browse files Browse the repository at this point in the history
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
  • Loading branch information
brandond committed May 22, 2024
1 parent 14c9ced commit c3faab8
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 18 deletions.
64 changes: 47 additions & 17 deletions pkg/cli/cmds/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/rancher/wrangler/v3/pkg/slice"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
"k8s.io/apimachinery/pkg/util/sets"
)

const (
Expand All @@ -17,21 +18,12 @@ const (

var (
DisableItems = []string{"rke2-coredns", "rke2-ingress-nginx", "rke2-metrics-server"}
CNIItems = []string{"calico", "canal", "cilium", "flannel"}

config = rke2.Config{}
config = rke2.Config{}

serverFlag = []cli.Flag{
&cli.StringSliceFlag{
Name: "cni",
Usage: "(networking) CNI Plugins to deploy, one of none, " + strings.Join(CNIItems, ", ") + "; optionally with multus as the first value to enable the multus meta-plugin (default: canal)",
EnvVar: "RKE2_CNI",
},
&cli.BoolFlag{
Name: "enable-servicelb",
Usage: "(components) Enable rke2 default cloud controller manager's service controller",
EnvVar: "RKE2_ENABLE_SERVICELB",
},
rke2.CNIFlag,
rke2.IngressControllerFlag,
rke2.ServiceLBFlag,
}

k3sServerBase = mustCmdFromK3S(cmds.NewServerCommand(ServerRun), K3SFlagSet{
Expand Down Expand Up @@ -164,12 +156,13 @@ func ServerRun(clx *cli.Context) error {
validateCloudProviderName(clx, Server)
validateProfile(clx, Server)
validateCNI(clx)
validateIngress(clx)
return rke2.Server(clx, config)
}

func validateCNI(clx *cli.Context) {
cnis := []string{}
for _, cni := range clx.StringSlice("cni") {
cnis := cli.StringSlice{}
for _, cni := range *rke2.CNIFlag.Value {
for _, v := range strings.Split(cni, ",") {
cnis = append(cnis, v)
}
Expand Down Expand Up @@ -197,8 +190,8 @@ func validateCNI(clx *cli.Context) {
switch {
case cnis[0] == "none":
fallthrough
case slice.ContainsString(CNIItems, cnis[0]):
for _, d := range CNIItems {
case slice.ContainsString(rke2.CNIItems, cnis[0]):
for _, d := range rke2.CNIItems {
if cnis[0] != d {
clx.Set("disable", "rke2-"+d)
clx.Set("disable", "rke2-"+d+"-crd")
Expand All @@ -207,4 +200,41 @@ func validateCNI(clx *cli.Context) {
default:
logrus.Fatal("invalid value provided for --cni flag")
}

rke2.CNIFlag.Value = &cnis
}

func validateIngress(clx *cli.Context) {
ingresses := cli.StringSlice{}
for _, ingress := range *rke2.IngressControllerFlag.Value {
for _, v := range strings.Split(ingress, ",") {
ingresses = append(ingresses, v)
}
}

// add components for all supported ingress controllers to the disable list.
// we have to do it using an intermediate set because the flag interface
// doesn't allow us to remove flag values once added.
disabledIngressCharts := sets.Set[string]{}
for _, d := range rke2.IngressItems {
disabledIngressCharts.Insert("rke2-"+d, "rke2-"+d+"-crd")
}

// re-enable components for any listed ingress controllers
for _, d := range ingresses {
switch {
case d == "none":
fallthrough
case slice.ContainsString(rke2.IngressItems, d):
disabledIngressCharts.Delete("rke2-"+d, "rke2-"+d+"-crd")
default:
logrus.Fatal("invalid value provided for --ingress-controller flag")
}
}

for _, c := range disabledIngressCharts.UnsortedList() {
clx.Set("disable", c)
}

rke2.IngressControllerFlag.Value = &ingresses
}
26 changes: 25 additions & 1 deletion pkg/rke2/rke2.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"github.com/pkg/errors"
"github.com/rancher/rke2/pkg/controllers/cisnetworkpolicy"
"github.com/rancher/rke2/pkg/images"

"github.com/rancher/wrangler/v3/pkg/slice"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
Expand Down Expand Up @@ -62,6 +63,29 @@ type ExtraEnv struct {
CloudControllerManager cli.StringSlice
}

var (
CNIItems = []string{"calico", "canal", "cilium", "flannel"}
IngressItems = []string{"ingress-nginx", "traefik"}

CNIFlag = &cli.StringSliceFlag{
Name: "cni",
Usage: "(networking) CNI Plugins to deploy, one of none, " + strings.Join(CNIItems, ", ") + "; optionally with multus as the first value to enable the multus meta-plugin (default: canal)",
EnvVar: "RKE2_CNI",
Value: &cli.StringSlice{},
}
IngressControllerFlag = &cli.StringSliceFlag{
Name: "ingress-controller",
Usage: "(networking) Ingress Controllers to deploy, one of none, " + strings.Join(IngressItems, ", ") + "; the first value will be set as the default ingress class (default: ingress-nginx)",
EnvVar: "RKE_INGRESS_CONTROLLER",
Value: &cli.StringSlice{},
}
ServiceLBFlag = &cli.BoolFlag{
Name: "enable-servicelb",
Usage: "(components) Enable rke2 default cloud controller manager's service controller",
EnvVar: "RKE2_ENABLE_SERVICELB",
}
)

// Valid CIS Profile versions
const (
CISProfile123 = "cis-1.23"
Expand Down Expand Up @@ -115,7 +139,7 @@ func Server(clx *cli.Context, cfg Config) error {

var leaderControllers rawServer.CustomControllers

cnis := clx.StringSlice("cni")
cnis := *CNIFlag.Value
if cisMode && (len(cnis) == 0 || slice.ContainsString(cnis, "canal")) {
leaderControllers = append(leaderControllers, cisnetworkpolicy.Controller)
}
Expand Down

0 comments on commit c3faab8

Please sign in to comment.