diff --git a/pkg/bundle/builder.go b/pkg/bundle/builder.go index 32196a4afd..622e093785 100644 --- a/pkg/bundle/builder.go +++ b/pkg/bundle/builder.go @@ -20,6 +20,7 @@ import ( "archive/tar" "fmt" "path" + "strings" "k8s.io/klog" "k8s.io/kops/pkg/apis/kops" @@ -170,12 +171,16 @@ func (b *Builder) Build(cluster *kops.Cluster, ig *kops.InstanceGroup) (*Data, e bootstrapScript := model.BootstrapScript{} - nodeupLocation, nodeupHash, err := cloudup.NodeUpLocation(assetBuilder) - if err != nil { - return nil, err + { + asset, err := cloudup.NodeUpAsset(assetBuilder) + if err != nil { + return nil, err + } + + bootstrapScript.NodeUpSource = strings.Join(asset.Locations, ",") + bootstrapScript.NodeUpSourceHash = asset.Hash.Hex() } - bootstrapScript.NodeUpSource = nodeupLocation.String() - bootstrapScript.NodeUpSourceHash = nodeupHash.Hex() + bootstrapScript.NodeUpConfigBuilder = func(ig *kops.InstanceGroup) (*nodeup.Config, error) { return nodeupConfig, err } diff --git a/tests/integration/update_cluster/additional_cidr/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/additional_cidr/cloudformation.json.extracted.yaml index 2e4cd16795..9b088d27dd 100644 --- a/tests/integration/update_cluster/additional_cidr/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/additional_cidr/cloudformation.json.extracted.yaml @@ -18,7 +18,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1bmastersadditionalcidrex set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -297,7 +297,7 @@ Resources.AWSAutoScalingLaunchConfigurationnodesadditionalcidrexamplecom.Propert set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 diff --git a/tests/integration/update_cluster/additional_user-data/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/additional_user-data/cloudformation.json.extracted.yaml index c9591282b4..b927c30744 100644 --- a/tests/integration/update_cluster/additional_user-data/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/additional_user-data/cloudformation.json.extracted.yaml @@ -27,7 +27,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1amastersadditionaluserda set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -326,7 +326,7 @@ Resources.AWSAutoScalingLaunchConfigurationnodesadditionaluserdataexamplecom.Pro set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 diff --git a/tests/integration/update_cluster/existing_iam_cloudformation/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/existing_iam_cloudformation/cloudformation.json.extracted.yaml index deff6ec4e4..d51e63c06f 100644 --- a/tests/integration/update_cluster/existing_iam_cloudformation/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/existing_iam_cloudformation/cloudformation.json.extracted.yaml @@ -18,7 +18,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1amastersminimalexampleco set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -297,7 +297,7 @@ Resources.AWSAutoScalingLaunchConfigurationnodesminimalexamplecom.Properties.Use set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 diff --git a/tests/integration/update_cluster/existing_iam_cloudformation/data/aws_launch_configuration_master-us-west-2a.masters.k8s-iam.us-west-2.td.priv_user_data b/tests/integration/update_cluster/existing_iam_cloudformation/data/aws_launch_configuration_master-us-west-2a.masters.k8s-iam.us-west-2.td.priv_user_data index d113d9fc8d..7972495cf4 100644 --- a/tests/integration/update_cluster/existing_iam_cloudformation/data/aws_launch_configuration_master-us-west-2a.masters.k8s-iam.us-west-2.td.priv_user_data +++ b/tests/integration/update_cluster/existing_iam_cloudformation/data/aws_launch_configuration_master-us-west-2a.masters.k8s-iam.us-west-2.td.priv_user_data @@ -17,7 +17,7 @@ set -o errexit set -o nounset set -o pipefail -NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.0/linux/amd64/nodeup +NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.0/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.0/linux/amd64/nodeup NODEUP_HASH=02185512f78dc9d15a8c10774c4cb11f67e4bc20 diff --git a/tests/integration/update_cluster/existing_iam_cloudformation/data/aws_launch_configuration_nodes.k8s-iam.us-west-2.td.priv_user_data b/tests/integration/update_cluster/existing_iam_cloudformation/data/aws_launch_configuration_nodes.k8s-iam.us-west-2.td.priv_user_data index bbc3359c83..9e1251aaa9 100644 --- a/tests/integration/update_cluster/existing_iam_cloudformation/data/aws_launch_configuration_nodes.k8s-iam.us-west-2.td.priv_user_data +++ b/tests/integration/update_cluster/existing_iam_cloudformation/data/aws_launch_configuration_nodes.k8s-iam.us-west-2.td.priv_user_data @@ -17,7 +17,7 @@ set -o errexit set -o nounset set -o pipefail -NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup +NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=02185512f78dc9d15a8c10774c4cb11f67e4bc20 diff --git a/tests/integration/update_cluster/externallb/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/externallb/cloudformation.json.extracted.yaml index 7a4b8c418b..aa708175f7 100644 --- a/tests/integration/update_cluster/externallb/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/externallb/cloudformation.json.extracted.yaml @@ -18,7 +18,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1amastersexternallbexampl set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -317,7 +317,7 @@ Resources.AWSAutoScalingLaunchConfigurationnodesexternallbexamplecom.Properties. set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 diff --git a/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json.extracted.yaml index deff6ec4e4..d51e63c06f 100644 --- a/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json.extracted.yaml @@ -18,7 +18,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1amastersminimalexampleco set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -297,7 +297,7 @@ Resources.AWSAutoScalingLaunchConfigurationnodesminimalexamplecom.Properties.Use set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 diff --git a/tests/integration/update_cluster/mixed_instances/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/mixed_instances/cloudformation.json.extracted.yaml index b98476e406..bb46a9c356 100644 --- a/tests/integration/update_cluster/mixed_instances/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/mixed_instances/cloudformation.json.extracted.yaml @@ -18,7 +18,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1amastersmixedinstancesex set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -318,7 +318,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1bmastersmixedinstancesex set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -618,7 +618,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1cmastersmixedinstancesex set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -918,7 +918,7 @@ Resources.AWSEC2LaunchTemplatenodesmixedinstancesexamplecom.Properties.LaunchTem set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 diff --git a/tests/integration/update_cluster/mixed_instances_spot/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/mixed_instances_spot/cloudformation.json.extracted.yaml index b98476e406..bb46a9c356 100644 --- a/tests/integration/update_cluster/mixed_instances_spot/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/mixed_instances_spot/cloudformation.json.extracted.yaml @@ -18,7 +18,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1amastersmixedinstancesex set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -318,7 +318,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1bmastersmixedinstancesex set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -618,7 +618,7 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1cmastersmixedinstancesex set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 @@ -918,7 +918,7 @@ Resources.AWSEC2LaunchTemplatenodesmixedinstancesexamplecom.Properties.LaunchTem set -o nounset set -o pipefail - NODEUP_URL=https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup + NODEUP_URL=https://github.com/kubernetes/kops/releases/download/1.8.1/linux-amd64-nodeup,https://kubeupv2.s3.amazonaws.com/kops/1.8.1/linux/amd64/nodeup NODEUP_HASH=bb41724c37d15ab7e039e06230e742b9b38d0808 export AWS_REGION=us-test-1 diff --git a/upup/pkg/fi/cloudup/apply_cluster.go b/upup/pkg/fi/cloudup/apply_cluster.go index e8b3d5b181..c5f91a791f 100644 --- a/upup/pkg/fi/cloudup/apply_cluster.go +++ b/upup/pkg/fi/cloudup/apply_cluster.go @@ -1191,12 +1191,12 @@ func (c *ApplyClusterCmd) AddFileAssets(assetBuilder *assets.AssetBuilder) error c.Assets = append(c.Assets, BuildMirroredAsset(utilsLocation, hash)) } - n, hash, err := NodeUpLocation(assetBuilder) + asset, err := NodeUpAsset(assetBuilder) if err != nil { return err } - c.NodeUpSource = n.String() - c.NodeUpHash = hash.Hex() + c.NodeUpSource = strings.Join(asset.Locations, ",") + c.NodeUpHash = asset.Hash.Hex() // Explicitly add the protokube image, // otherwise when the Target is DryRun this asset is not added diff --git a/upup/pkg/fi/cloudup/urls.go b/upup/pkg/fi/cloudup/urls.go index d256e96d0e..f77f27cba9 100644 --- a/upup/pkg/fi/cloudup/urls.go +++ b/upup/pkg/fi/cloudup/urls.go @@ -55,11 +55,8 @@ var defaultKopsMirrors = []mirror{ var kopsBaseUrl *url.URL -// nodeUpLocation caches the nodeUpLocation url -var nodeUpLocation *url.URL - -// nodeUpHash caches the hash for nodeup -var nodeUpHash *hashing.Hash +// nodeUpAsset caches the nodeup download urls/hash +var nodeUpAsset *MirroredAsset // protokubeLocation caches the protokubeLocation url var protokubeLocation *url.URL @@ -119,36 +116,42 @@ func SetKopsAssetsLocations(assetsBuilder *assets.AssetBuilder) error { return nil } -// NodeUpLocation returns the URL where nodeup should be downloaded -func NodeUpLocation(assetsBuilder *assets.AssetBuilder) (*url.URL, *hashing.Hash, error) { +// NodeUpAsset returns the asset for where nodeup should be downloaded +func NodeUpAsset(assetsBuilder *assets.AssetBuilder) (*MirroredAsset, error) { // Avoid repeated logging - if nodeUpLocation != nil && nodeUpHash != nil { + if nodeUpAsset != nil { // Avoid repeated logging - klog.V(8).Infof("Using cached nodeup location: %q", nodeUpLocation.String()) - return nodeUpLocation, nodeUpHash, nil + klog.V(8).Infof("Using cached nodeup location: %v", nodeUpAsset.Locations) + return nodeUpAsset, nil } env := os.Getenv("NODEUP_URL") var err error + var u *url.URL + var hash *hashing.Hash if env == "" { - nodeUpLocation, nodeUpHash, err = KopsFileUrl("linux/amd64/nodeup", assetsBuilder) + u, hash, err = KopsFileUrl("linux/amd64/nodeup", assetsBuilder) if err != nil { - return nil, nil, err + return nil, err } - klog.V(8).Infof("Using default nodeup location: %q", nodeUpLocation.String()) + klog.V(8).Infof("Using default nodeup location: %q", u.String()) } else { - nodeUpLocation, err = url.Parse(env) + u, err = url.Parse(env) if err != nil { - return nil, nil, fmt.Errorf("unable to parse env var NODEUP_URL %q as a url: %v", env, err) + return nil, fmt.Errorf("unable to parse env var NODEUP_URL %q as a url: %v", env, err) } - nodeUpLocation, nodeUpHash, err = assetsBuilder.RemapFileAndSHA(nodeUpLocation) + u, hash, err = assetsBuilder.RemapFileAndSHA(u) if err != nil { - return nil, nil, err + return nil, err } - klog.Warningf("Using nodeup location from NODEUP_URL env var: %q", nodeUpLocation.String()) + klog.Warningf("Using nodeup location from NODEUP_URL env var: %q", u.String()) } - return nodeUpLocation, nodeUpHash, nil + asset := BuildMirroredAsset(u, hash) + + nodeUpAsset = asset + + return asset, nil } // TODO make this a container when hosted assets