Skip to content

Commit 4355df7

Browse files
authored
Merge pull request #2271 from kinvolk/invidian/flatcar-support-with-unit-tests-and-cloudformation-test
✨ Add support for Ignition-based bootstrap data and Flatcar Container Linux
2 parents cacbdea + 0db23d4 commit 4355df7

File tree

72 files changed

+9447
-244
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+9447
-244
lines changed

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ RELEASE_TAG ?= $(shell git describe --abbrev=0 2>/dev/null)
8787
PULL_BASE_REF ?= $(RELEASE_TAG) # PULL_BASE_REF will be provided by Prow
8888
RELEASE_ALIAS_TAG ?= $(PULL_BASE_REF)
8989
RELEASE_DIR := out
90-
RELEASE_POLICIES := $(RELEASE_DIR)/AWSIAMManagedPolicyControllers.json $(RELEASE_DIR)/AWSIAMManagedPolicyControllersWithEKS.json $(RELEASE_DIR)/AWSIAMManagedPolicyCloudProviderControlPlane.json $(RELEASE_DIR)/AWSIAMManagedPolicyCloudProviderNodes.json
90+
RELEASE_POLICIES := $(RELEASE_DIR)/AWSIAMManagedPolicyControllers.json $(RELEASE_DIR)/AWSIAMManagedPolicyControllersWithEKS.json $(RELEASE_DIR)/AWSIAMManagedPolicyCloudProviderControlPlane.json $(RELEASE_DIR)/AWSIAMManagedPolicyCloudProviderNodes.json $(RELEASE_DIR)/AWSIAMManagedPolicyControllersWithS3.json
9191
BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD)
9292

9393
# image name used to build the cmd/clusterawsadm
@@ -541,6 +541,9 @@ $(RELEASE_DIR)/AWSIAMManagedPolicyCloudProviderControlPlane.json: $(RELEASE_DIR)
541541
$(RELEASE_DIR)/AWSIAMManagedPolicyCloudProviderNodes.json: $(RELEASE_DIR) $(CLUSTERAWSADM_SRCS)
542542
go run ./cmd/clusterawsadm bootstrap iam print-policy --document AWSIAMManagedPolicyCloudProviderNodes > $(RELEASE_DIR)/AWSIAMManagedPolicyCloudProviderNodes.json
543543

544+
$(RELEASE_DIR)/AWSIAMManagedPolicyControllersWithS3.json: $(RELEASE_DIR) $(CLUSTERAWSADM_SRCS)
545+
go run ./cmd/clusterawsadm bootstrap iam print-policy --document AWSIAMManagedPolicyControllers --config hack/s3-clusterawsadm-config.yaml > $@
546+
544547
.PHONY: release-manifests
545548
release-manifests: ## Release manifest files
546549
$(MAKE) $(RELEASE_DIR)/$(CORE_MANIFEST_FILE).yaml TAG=$(RELEASE_TAG) PULL_POLICY=IfNotPresent

api/v1alpha3/awscluster_conversion.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ func (r *AWSCluster) ConvertTo(dstRaw conversion.Hub) error {
5454
restoreControlPlaneLoadBalancer(restored.Spec.ControlPlaneLoadBalancer, dst.Spec.ControlPlaneLoadBalancer)
5555
}
5656

57+
dst.Spec.S3Bucket = restored.Spec.S3Bucket
58+
5759
return nil
5860
}
5961

@@ -125,3 +127,7 @@ func Convert_v1beta1_NetworkStatus_To_v1alpha3_Network(in *infrav1.NetworkStatus
125127
func Convert_v1beta1_AWSLoadBalancerSpec_To_v1alpha3_AWSLoadBalancerSpec(in *infrav1.AWSLoadBalancerSpec, out *AWSLoadBalancerSpec, s apiconversion.Scope) error {
126128
return autoConvert_v1beta1_AWSLoadBalancerSpec_To_v1alpha3_AWSLoadBalancerSpec(in, out, s)
127129
}
130+
131+
func Convert_v1beta1_AWSClusterSpec_To_v1alpha3_AWSClusterSpec(in *infrav1.AWSClusterSpec, out *AWSClusterSpec, s apiconversion.Scope) error {
132+
return autoConvert_v1beta1_AWSClusterSpec_To_v1alpha3_AWSClusterSpec(in, out, s)
133+
}

api/v1alpha3/awsmachine_conversion.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ func (r *AWSMachine) ConvertTo(dstRaw conversion.Hub) error {
4040

4141
restoreSpec(&restored.Spec, &dst.Spec)
4242

43+
dst.Spec.Ignition = restored.Spec.Ignition
44+
4345
return nil
4446
}
4547

@@ -100,6 +102,7 @@ func (r *AWSMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
100102
}
101103

102104
dst.Spec.Template.ObjectMeta = restored.Spec.Template.ObjectMeta
105+
dst.Spec.Template.Spec.Ignition = restored.Spec.Template.Spec.Ignition
103106

104107
restoreSpec(&restored.Spec.Template.Spec, &dst.Spec.Template.Spec)
105108

api/v1alpha3/zz_generated.conversion.go

Lines changed: 7 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1alpha4/awscluster_conversion.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ func (src *AWSCluster) ConvertTo(dstRaw conversion.Hub) error {
4545
restoreControlPlaneLoadBalancer(restored.Spec.ControlPlaneLoadBalancer, dst.Spec.ControlPlaneLoadBalancer)
4646
}
4747

48+
dst.Spec.S3Bucket = restored.Spec.S3Bucket
49+
4850
return nil
4951
}
5052

api/v1alpha4/awsmachine_conversion.go

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package v1alpha4
1818

1919
import (
2020
apiconversion "k8s.io/apimachinery/pkg/conversion"
21+
"sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
2122
infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
2223
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
2324
"sigs.k8s.io/controller-runtime/pkg/conversion"
@@ -26,14 +27,31 @@ import (
2627
// ConvertTo converts the v1alpha4 AWSMachine receiver to a v1beta1 AWSMachine.
2728
func (src *AWSMachine) ConvertTo(dstRaw conversion.Hub) error {
2829
dst := dstRaw.(*infrav1.AWSMachine)
29-
return Convert_v1alpha4_AWSMachine_To_v1beta1_AWSMachine(src, dst, nil)
30+
if err := Convert_v1alpha4_AWSMachine_To_v1beta1_AWSMachine(src, dst, nil); err != nil {
31+
return err
32+
}
33+
34+
// Manually restore data.
35+
restored := &v1beta1.AWSMachine{}
36+
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
37+
return err
38+
}
39+
40+
dst.Spec.Ignition = restored.Spec.Ignition
41+
42+
return nil
3043
}
3144

3245
// ConvertFrom converts the v1beta1 AWSMachine to a v1alpha4 AWSMachine.
3346
func (dst *AWSMachine) ConvertFrom(srcRaw conversion.Hub) error {
3447
src := srcRaw.(*infrav1.AWSMachine)
3548

36-
return Convert_v1beta1_AWSMachine_To_v1alpha4_AWSMachine(src, dst, nil)
49+
if err := Convert_v1beta1_AWSMachine_To_v1alpha4_AWSMachine(src, dst, nil); err != nil {
50+
return err
51+
}
52+
53+
// Preserve Hub data on down-conversion except for metadata.
54+
return utilconversion.MarshalData(src, dst)
3755
}
3856

3957
// ConvertTo converts the v1alpha4 AWSMachineList receiver to a v1beta1 AWSMachineList.
@@ -64,6 +82,7 @@ func (r *AWSMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
6482
}
6583

6684
dst.Spec.Template.ObjectMeta = restored.Spec.Template.ObjectMeta
85+
dst.Spec.Template.Spec.Ignition = restored.Spec.Template.Spec.Ignition
6786

6887
return nil
6988
}
@@ -100,3 +119,7 @@ func (dst *AWSMachineTemplateList) ConvertFrom(srcRaw conversion.Hub) error {
100119
func Convert_v1beta1_AWSMachineTemplateResource_To_v1alpha4_AWSMachineTemplateResource(in *infrav1.AWSMachineTemplateResource, out *AWSMachineTemplateResource, s apiconversion.Scope) error {
101120
return autoConvert_v1beta1_AWSMachineTemplateResource_To_v1alpha4_AWSMachineTemplateResource(in, out, s)
102121
}
122+
123+
func Convert_v1beta1_AWSMachineSpec_To_v1alpha4_AWSMachineSpec(in *v1beta1.AWSMachineSpec, out *AWSMachineSpec, s apiconversion.Scope) error {
124+
return autoConvert_v1beta1_AWSMachineSpec_To_v1alpha4_AWSMachineSpec(in, out, s)
125+
}

api/v1alpha4/conversion.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package v1alpha4
1818

1919
import (
2020
apiconversion "k8s.io/apimachinery/pkg/conversion"
21+
conversion "k8s.io/apimachinery/pkg/conversion"
22+
v1beta1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1"
2123
clusterv1alpha4 "sigs.k8s.io/cluster-api/api/v1alpha4"
2224
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2325
)
@@ -31,3 +33,7 @@ func Convert_v1alpha4_ObjectMeta_To_v1beta1_ObjectMeta(in *clusterv1alpha4.Objec
3133
func Convert_v1beta1_ObjectMeta_To_v1alpha4_ObjectMeta(in *clusterv1.ObjectMeta, out *clusterv1alpha4.ObjectMeta, s apiconversion.Scope) error {
3234
return clusterv1alpha4.Convert_v1beta1_ObjectMeta_To_v1alpha4_ObjectMeta(in, out, s)
3335
}
36+
37+
func Convert_v1beta1_AWSClusterSpec_To_v1alpha4_AWSClusterSpec(in *v1beta1.AWSClusterSpec, out *AWSClusterSpec, s conversion.Scope) error {
38+
return autoConvert_v1beta1_AWSClusterSpec_To_v1alpha4_AWSClusterSpec(in, out, s)
39+
}

api/v1alpha4/zz_generated.conversion.go

Lines changed: 12 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1beta1/awscluster_types.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ type AWSClusterSpec struct {
9090
// IdentityRef is a reference to a identity to be used when reconciling this cluster
9191
// +optional
9292
IdentityRef *AWSIdentityReference `json:"identityRef,omitempty"`
93+
94+
// S3Bucket contains options to configure a supporting S3 bucket for this
95+
// cluster - currently used for nodes requiring Ignition
96+
// (https://coreos.github.io/ignition/) for bootstrapping (requires
97+
// BootstrapFormatIgnition feature flag to be enabled).
98+
// +optional
99+
S3Bucket *S3Bucket `json:"s3Bucket,omitempty"`
93100
}
94101

95102
// AWSIdentityKind defines allowed AWS identity types.
@@ -198,6 +205,22 @@ type AWSClusterStatus struct {
198205
Conditions clusterv1.Conditions `json:"conditions,omitempty"`
199206
}
200207

208+
type S3Bucket struct {
209+
// ControlPlaneIAMInstanceProfile is a name of the IAMInstanceProfile, which will be allowed
210+
// to read control-plane node bootstrap data from S3 Bucket.
211+
ControlPlaneIAMInstanceProfile string `json:"controlPlaneIAMInstanceProfile"`
212+
213+
// NodesIAMInstanceProfiles is a list of IAM instance profiles, which will be allowed to read
214+
// worker nodes bootstrap data from S3 Bucket.
215+
NodesIAMInstanceProfiles []string `json:"nodesIAMInstanceProfiles"`
216+
217+
// Name defines name of S3 Bucket to be created.
218+
// +kubebuilder:validation:MinLength:=3
219+
// +kubebuilder:validation:MaxLength:=63
220+
// +kubebuilder:validation:Pattern=`^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$`
221+
Name string `json:"name"`
222+
}
223+
201224
// +kubebuilder:object:root=true
202225
// +kubebuilder:resource:path=awsclusters,scope=Namespaced,categories=cluster-api,shortName=awsc
203226
// +kubebuilder:storageversion

api/v1beta1/awscluster_webhook.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ func (r *AWSCluster) ValidateCreate() error {
5555
allErrs = append(allErrs, r.Spec.Bastion.Validate()...)
5656
allErrs = append(allErrs, r.validateSSHKeyName()...)
5757
allErrs = append(allErrs, r.Spec.AdditionalTags.Validate()...)
58+
allErrs = append(allErrs, r.Spec.S3Bucket.Validate()...)
5859

5960
return aggregateObjErrors(r.GroupVersionKind().GroupKind(), r.Name, allErrs)
6061
}
@@ -164,6 +165,7 @@ func (r *AWSCluster) ValidateUpdate(old runtime.Object) error {
164165

165166
allErrs = append(allErrs, r.Spec.Bastion.Validate()...)
166167
allErrs = append(allErrs, r.Spec.AdditionalTags.Validate()...)
168+
allErrs = append(allErrs, r.Spec.S3Bucket.Validate()...)
167169

168170
return aggregateObjErrors(r.GroupVersionKind().GroupKind(), r.Name, allErrs)
169171
}

0 commit comments

Comments
 (0)