From b158ffab044ef1e5153cab6e0df64aafb771f61e Mon Sep 17 00:00:00 2001 From: Justin SB Date: Tue, 25 Aug 2020 11:14:47 -0400 Subject: [PATCH] Refactor: KopsModelContext embeds IAMModelContext go syntax makes this an annoying change, unfortunately. --- pkg/model/BUILD.bazel | 1 + pkg/model/awsmodel/BUILD.bazel | 1 + pkg/model/awsmodel/autoscalinggroup_test.go | 7 ++++--- pkg/model/components/etcdmanager/BUILD.bazel | 1 + pkg/model/components/etcdmanager/model_test.go | 5 +++-- pkg/model/components/kubeapiserver/BUILD.bazel | 1 + pkg/model/components/kubeapiserver/model_test.go | 5 +++-- pkg/model/context.go | 8 ++------ pkg/model/context_test.go | 9 ++++++--- pkg/model/firewall_test.go | 9 ++++++--- pkg/model/iam/types.go | 11 +++++++++++ pkg/model/openstackmodel/BUILD.bazel | 1 + pkg/model/openstackmodel/servergroup_test.go | 7 ++++--- upup/pkg/fi/cloudup/BUILD.bazel | 2 ++ upup/pkg/fi/cloudup/apply_cluster.go | 5 +++-- upup/pkg/fi/cloudup/bootstrapchannelbuilder_test.go | 7 ++++--- upup/pkg/fi/cloudup/dns.go | 3 ++- 17 files changed, 55 insertions(+), 28 deletions(-) diff --git a/pkg/model/BUILD.bazel b/pkg/model/BUILD.bazel index e980f7d118..88d37f058e 100644 --- a/pkg/model/BUILD.bazel +++ b/pkg/model/BUILD.bazel @@ -74,6 +74,7 @@ go_test( deps = [ "//pkg/apis/kops:go_default_library", "//pkg/apis/nodeup:go_default_library", + "//pkg/model/iam:go_default_library", "//pkg/testutils/golden:go_default_library", "//upup/pkg/fi:go_default_library", "//util/pkg/architectures:go_default_library", diff --git a/pkg/model/awsmodel/BUILD.bazel b/pkg/model/awsmodel/BUILD.bazel index 50ece125ed..dcc36a5a1e 100644 --- a/pkg/model/awsmodel/BUILD.bazel +++ b/pkg/model/awsmodel/BUILD.bazel @@ -31,6 +31,7 @@ go_test( deps = [ "//pkg/apis/kops:go_default_library", "//pkg/model:go_default_library", + "//pkg/model/iam:go_default_library", "//upup/pkg/fi:go_default_library", "//upup/pkg/fi/cloudup/awstasks:go_default_library", ], diff --git a/pkg/model/awsmodel/autoscalinggroup_test.go b/pkg/model/awsmodel/autoscalinggroup_test.go index e626b64fe4..cfaa3e4689 100644 --- a/pkg/model/awsmodel/autoscalinggroup_test.go +++ b/pkg/model/awsmodel/autoscalinggroup_test.go @@ -21,6 +21,7 @@ import ( "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/model" + "k8s.io/kops/pkg/model/iam" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/cloudup/awstasks" ) @@ -78,9 +79,9 @@ func TestRootVolumeOptimizationFlag(t *testing.T) { b := AutoscalingGroupModelBuilder{ AWSModelContext: &AWSModelContext{ KopsModelContext: &model.KopsModelContext{ - SSHPublicKeys: k, - Cluster: cluster, - InstanceGroups: igs, + IAMModelContext: iam.IAMModelContext{Cluster: cluster}, + SSHPublicKeys: k, + InstanceGroups: igs, }, }, } diff --git a/pkg/model/components/etcdmanager/BUILD.bazel b/pkg/model/components/etcdmanager/BUILD.bazel index ca493d932a..9ed375f338 100644 --- a/pkg/model/components/etcdmanager/BUILD.bazel +++ b/pkg/model/components/etcdmanager/BUILD.bazel @@ -44,6 +44,7 @@ go_test( deps = [ "//pkg/assets:go_default_library", "//pkg/model:go_default_library", + "//pkg/model/iam:go_default_library", "//pkg/testutils:go_default_library", "//upup/pkg/fi:go_default_library", ], diff --git a/pkg/model/components/etcdmanager/model_test.go b/pkg/model/components/etcdmanager/model_test.go index 15dada43f4..f95fccff7a 100644 --- a/pkg/model/components/etcdmanager/model_test.go +++ b/pkg/model/components/etcdmanager/model_test.go @@ -23,6 +23,7 @@ import ( "k8s.io/kops/pkg/assets" "k8s.io/kops/pkg/model" + "k8s.io/kops/pkg/model/iam" "k8s.io/kops/pkg/testutils" "k8s.io/kops/upup/pkg/fi" ) @@ -77,8 +78,8 @@ func LoadKopsModelContext(basedir string) (*model.KopsModelContext, error) { } kopsContext := &model.KopsModelContext{ - Cluster: spec.Cluster, - InstanceGroups: spec.InstanceGroups, + IAMModelContext: iam.IAMModelContext{Cluster: spec.Cluster}, + InstanceGroups: spec.InstanceGroups, } return kopsContext, nil diff --git a/pkg/model/components/kubeapiserver/BUILD.bazel b/pkg/model/components/kubeapiserver/BUILD.bazel index 1749540967..8f8f05b1da 100644 --- a/pkg/model/components/kubeapiserver/BUILD.bazel +++ b/pkg/model/components/kubeapiserver/BUILD.bazel @@ -25,6 +25,7 @@ go_test( deps = [ "//pkg/assets:go_default_library", "//pkg/model:go_default_library", + "//pkg/model/iam:go_default_library", "//pkg/testutils:go_default_library", "//upup/pkg/fi:go_default_library", ], diff --git a/pkg/model/components/kubeapiserver/model_test.go b/pkg/model/components/kubeapiserver/model_test.go index 600dc19319..cb1c93f619 100644 --- a/pkg/model/components/kubeapiserver/model_test.go +++ b/pkg/model/components/kubeapiserver/model_test.go @@ -23,6 +23,7 @@ import ( "k8s.io/kops/pkg/assets" "k8s.io/kops/pkg/model" + "k8s.io/kops/pkg/model/iam" "k8s.io/kops/pkg/testutils" "k8s.io/kops/upup/pkg/fi" ) @@ -70,8 +71,8 @@ func LoadKopsModelContext(basedir string) (*model.KopsModelContext, error) { } kopsContext := &model.KopsModelContext{ - Cluster: spec.Cluster, - InstanceGroups: spec.InstanceGroups, + IAMModelContext: iam.IAMModelContext{Cluster: spec.Cluster}, + InstanceGroups: spec.InstanceGroups, } return kopsContext, nil diff --git a/pkg/model/context.go b/pkg/model/context.go index a357eb4227..b4f5813349 100644 --- a/pkg/model/context.go +++ b/pkg/model/context.go @@ -28,6 +28,7 @@ import ( "k8s.io/kops/pkg/apis/kops/util" "k8s.io/kops/pkg/featureflag" "k8s.io/kops/pkg/model/components" + "k8s.io/kops/pkg/model/iam" nodeidentityaws "k8s.io/kops/pkg/nodeidentity/aws" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/cloudup/awstasks" @@ -47,7 +48,7 @@ var UseLegacyELBName = featureflag.New("UseLegacyELBName", featureflag.Bool(fals // KopsModelContext is the kops model type KopsModelContext struct { - Cluster *kops.Cluster + iam.IAMModelContext InstanceGroups []*kops.InstanceGroup Region string SSHPublicKeys [][]byte @@ -97,11 +98,6 @@ func (m *KopsModelContext) GetELBName32(prefix string) string { return s } -// ClusterName returns the cluster name -func (m *KopsModelContext) ClusterName() string { - return m.Cluster.ObjectMeta.Name -} - // GatherSubnets maps the subnet names in an InstanceGroup to the ClusterSubnetSpec objects (which are stored on the Cluster) func (m *KopsModelContext) GatherSubnets(ig *kops.InstanceGroup) ([]*kops.ClusterSubnetSpec, error) { var subnets []*kops.ClusterSubnetSpec diff --git a/pkg/model/context_test.go b/pkg/model/context_test.go index ab562f2f76..f5704fc43e 100644 --- a/pkg/model/context_test.go +++ b/pkg/model/context_test.go @@ -21,6 +21,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kops/pkg/apis/kops" + "k8s.io/kops/pkg/model/iam" ) func Test_GetELBName32(t *testing.T) { @@ -48,9 +49,11 @@ func Test_GetELBName32(t *testing.T) { } for _, g := range grid { c := &KopsModelContext{ - Cluster: &kops.Cluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: g.ClusterName, + IAMModelContext: iam.IAMModelContext{ + Cluster: &kops.Cluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: g.ClusterName, + }, }, }, } diff --git a/pkg/model/firewall_test.go b/pkg/model/firewall_test.go index 6e7e150316..baf81e5650 100644 --- a/pkg/model/firewall_test.go +++ b/pkg/model/firewall_test.go @@ -21,6 +21,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kops/pkg/apis/kops" + "k8s.io/kops/pkg/model/iam" ) func Test_SharedGroups(t *testing.T) { @@ -48,9 +49,11 @@ func Test_SharedGroups(t *testing.T) { } for _, g := range grid { c := &KopsModelContext{ - Cluster: &kops.Cluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: g.ClusterName, + IAMModelContext: iam.IAMModelContext{ + Cluster: &kops.Cluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: g.ClusterName, + }, }, }, } diff --git a/pkg/model/iam/types.go b/pkg/model/iam/types.go index e144f52978..7dcfeb1c0b 100644 --- a/pkg/model/iam/types.go +++ b/pkg/model/iam/types.go @@ -19,6 +19,8 @@ package iam import ( "encoding/json" "fmt" + + "k8s.io/kops/pkg/apis/kops" ) // ParseStatements parses JSON into a list of Statements @@ -29,3 +31,12 @@ func ParseStatements(policy string) ([]*Statement, error) { } return statements, nil } + +type IAMModelContext struct { + Cluster *kops.Cluster +} + +// ClusterName returns the cluster name +func (b *IAMModelContext) ClusterName() string { + return b.Cluster.ObjectMeta.Name +} diff --git a/pkg/model/openstackmodel/BUILD.bazel b/pkg/model/openstackmodel/BUILD.bazel index 8b4f1ee25d..ea4dcd2269 100644 --- a/pkg/model/openstackmodel/BUILD.bazel +++ b/pkg/model/openstackmodel/BUILD.bazel @@ -34,6 +34,7 @@ go_test( "//pkg/apis/kops:go_default_library", "//pkg/apis/nodeup:go_default_library", "//pkg/model:go_default_library", + "//pkg/model/iam:go_default_library", "//upup/pkg/fi:go_default_library", "//upup/pkg/fi/cloudup/openstacktasks:go_default_library", "//util/pkg/architectures:go_default_library", diff --git a/pkg/model/openstackmodel/servergroup_test.go b/pkg/model/openstackmodel/servergroup_test.go index f763cd0dbd..050012c371 100644 --- a/pkg/model/openstackmodel/servergroup_test.go +++ b/pkg/model/openstackmodel/servergroup_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/apis/nodeup" "k8s.io/kops/pkg/model" + "k8s.io/kops/pkg/model/iam" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/cloudup/openstacktasks" "k8s.io/kops/util/pkg/architectures" @@ -3059,9 +3060,9 @@ func createBuilderForCluster(cluster *kops.Cluster, instanceGroups []*kops.Insta sshPublicKey := []byte("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDF2sghZsClUBXJB4mBMIw8rb0hJWjg1Vz4eUeXwYmTdi92Gf1zNc5xISSip9Y+PWX/jJokPB7tgPnMD/2JOAKhG1bi4ZqB15pYRmbbBekVpM4o4E0dx+czbqjiAm6wlccTrINK5LYenbucAAQt19eH+D0gJwzYUK9SYz1hWnlGS+qurt2bz7rrsG73lN8E2eiNvGtIXqv3GabW/Hea3acOBgCUJQWUDTRu0OmmwxzKbFN/UpNKeRaHlCqwZWjVAsmqA8TX8LIocq7Np7MmIBwt7EpEeZJxThcmC8DEJs9ClAjD+jlLIvMPXKC3JWCPgwCLGxHjy7ckSGFCSzbyPduh") modelContext := &model.KopsModelContext{ - Cluster: cluster, - InstanceGroups: instanceGroups, - SSHPublicKeys: [][]byte{sshPublicKey}, + IAMModelContext: iam.IAMModelContext{Cluster: cluster}, + InstanceGroups: instanceGroups, + SSHPublicKeys: [][]byte{sshPublicKey}, } openstackModelContext := &OpenstackModelContext{ KopsModelContext: modelContext, diff --git a/upup/pkg/fi/cloudup/BUILD.bazel b/upup/pkg/fi/cloudup/BUILD.bazel index 465553da5c..5be5cd8632 100644 --- a/upup/pkg/fi/cloudup/BUILD.bazel +++ b/upup/pkg/fi/cloudup/BUILD.bazel @@ -51,6 +51,7 @@ go_library( "//pkg/model/components/node-authorizer:go_default_library", "//pkg/model/domodel:go_default_library", "//pkg/model/gcemodel:go_default_library", + "//pkg/model/iam:go_default_library", "//pkg/model/openstackmodel:go_default_library", "//pkg/model/spotinstmodel:go_default_library", "//pkg/resources/digitalocean:go_default_library", @@ -117,6 +118,7 @@ go_test( "//pkg/diff:go_default_library", "//pkg/kopscodecs:go_default_library", "//pkg/model:go_default_library", + "//pkg/model/iam:go_default_library", "//pkg/templates:go_default_library", "//pkg/testutils:go_default_library", "//pkg/testutils/golden:go_default_library", diff --git a/upup/pkg/fi/cloudup/apply_cluster.go b/upup/pkg/fi/cloudup/apply_cluster.go index ed65eb69d6..f732a55ac0 100644 --- a/upup/pkg/fi/cloudup/apply_cluster.go +++ b/upup/pkg/fi/cloudup/apply_cluster.go @@ -48,6 +48,7 @@ import ( "k8s.io/kops/pkg/model/components/kubeapiserver" "k8s.io/kops/pkg/model/domodel" "k8s.io/kops/pkg/model/gcemodel" + "k8s.io/kops/pkg/model/iam" "k8s.io/kops/pkg/model/openstackmodel" "k8s.io/kops/pkg/model/spotinstmodel" "k8s.io/kops/pkg/resources/digitalocean" @@ -359,8 +360,8 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) error { } modelContext := &model.KopsModelContext{ - Cluster: cluster, - InstanceGroups: c.InstanceGroups, + IAMModelContext: iam.IAMModelContext{Cluster: cluster}, + InstanceGroups: c.InstanceGroups, } switch kops.CloudProviderID(cluster.Spec.CloudProvider) { diff --git a/upup/pkg/fi/cloudup/bootstrapchannelbuilder_test.go b/upup/pkg/fi/cloudup/bootstrapchannelbuilder_test.go index cc8e4d0487..d9fbde4d3c 100644 --- a/upup/pkg/fi/cloudup/bootstrapchannelbuilder_test.go +++ b/upup/pkg/fi/cloudup/bootstrapchannelbuilder_test.go @@ -26,6 +26,7 @@ import ( "k8s.io/kops/pkg/client/simple/vfsclientset" "k8s.io/kops/pkg/kopscodecs" "k8s.io/kops/pkg/model" + "k8s.io/kops/pkg/model/iam" "k8s.io/kops/pkg/templates" "k8s.io/kops/pkg/testutils" "k8s.io/kops/pkg/testutils/golden" @@ -93,15 +94,15 @@ func runChannelBuilderTest(t *testing.T, key string, addonManifests []string) { tf := &TemplateFunctions{ KopsModelContext: model.KopsModelContext{ - Cluster: cluster, - Region: "us-east-1", + IAMModelContext: iam.IAMModelContext{Cluster: cluster}, + Region: "us-east-1", }, } tf.AddTo(templates.TemplateFunctions, secretStore) bcb := BootstrapChannelBuilder{ KopsModelContext: &model.KopsModelContext{ - Cluster: cluster, + IAMModelContext: iam.IAMModelContext{Cluster: cluster}, }, templates: templates, assetBuilder: assets.NewAssetBuilder(cluster, ""), diff --git a/upup/pkg/fi/cloudup/dns.go b/upup/pkg/fi/cloudup/dns.go index 7965a3053a..597a926b4b 100644 --- a/upup/pkg/fi/cloudup/dns.go +++ b/upup/pkg/fi/cloudup/dns.go @@ -31,6 +31,7 @@ import ( kopsdns "k8s.io/kops/pkg/dns" "k8s.io/kops/pkg/featureflag" "k8s.io/kops/pkg/model" + "k8s.io/kops/pkg/model/iam" "k8s.io/kops/upup/pkg/fi" ) @@ -87,7 +88,7 @@ func findZone(cluster *kops.Cluster, cloud fi.Cloud) (dnsprovider.Zone, error) { func validateDNS(cluster *kops.Cluster, cloud fi.Cloud) error { kopsModelContext := &model.KopsModelContext{ - Cluster: cluster, + IAMModelContext: iam.IAMModelContext{Cluster: cluster}, // We are not initializing a lot of the fields here; revisit once UsePrivateDNS is "real" }