mirror of https://github.com/kubernetes/kops.git
Kubetest2 - Setup SSH keys for GCE
Originally I had thought we were relying on ssh keys mounted from a secret, it turns out kubetest 1 generated the keys indirectly through gcloud. This runs the same command as kubetest 1, creating and uploading the SSH keys.
This commit is contained in:
parent
1bf4fd744f
commit
b2f2c61e69
|
|
@ -27,6 +27,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
|
"k8s.io/kops/tests/e2e/kubetest2-kops/gce"
|
||||||
"k8s.io/kops/tests/e2e/pkg/kops"
|
"k8s.io/kops/tests/e2e/pkg/kops"
|
||||||
"k8s.io/kops/tests/e2e/pkg/target"
|
"k8s.io/kops/tests/e2e/pkg/target"
|
||||||
"sigs.k8s.io/kubetest2/pkg/boskos"
|
"sigs.k8s.io/kubetest2/pkg/boskos"
|
||||||
|
|
@ -74,14 +75,6 @@ func (d *deployer) initialize() error {
|
||||||
d.SSHPublicKeyPath = os.Getenv("AWS_SSH_PUBLIC_KEY_FILE")
|
d.SSHPublicKeyPath = os.Getenv("AWS_SSH_PUBLIC_KEY_FILE")
|
||||||
}
|
}
|
||||||
case "gce":
|
case "gce":
|
||||||
// These environment variables are defined by the "preset-k8s-ssh" prow preset
|
|
||||||
// https://github.com/kubernetes/test-infra/blob/432c6e7dca38f0785901a6159275524cec369c4a/config/prow/config.yaml#L639-L656
|
|
||||||
if d.SSHPrivateKeyPath == "" {
|
|
||||||
d.SSHPrivateKeyPath = os.Getenv("JENKINS_GCE_SSH_PRIVATE_KEY_FILE")
|
|
||||||
}
|
|
||||||
if d.SSHPublicKeyPath == "" {
|
|
||||||
d.SSHPublicKeyPath = os.Getenv("JENKINS_GCE_SSH_PUBLIC_KEY_FILE")
|
|
||||||
}
|
|
||||||
if d.GCPProject == "" {
|
if d.GCPProject == "" {
|
||||||
klog.V(1).Info("No GCP project provided, acquiring from Boskos")
|
klog.V(1).Info("No GCP project provided, acquiring from Boskos")
|
||||||
|
|
||||||
|
|
@ -103,6 +96,15 @@ func (d *deployer) initialize() error {
|
||||||
}
|
}
|
||||||
d.GCPProject = resource.Name
|
d.GCPProject = resource.Name
|
||||||
klog.V(1).Infof("Got project %s from boskos", d.GCPProject)
|
klog.V(1).Infof("Got project %s from boskos", d.GCPProject)
|
||||||
|
|
||||||
|
if d.SSHPrivateKeyPath == "" && d.SSHPublicKeyPath == "" {
|
||||||
|
privateKey, publicKey, err := gce.SetupSSH(d.GCPProject)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d.SSHPrivateKeyPath = privateKey
|
||||||
|
d.SSHPublicKeyPath = publicKey
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if d.SSHUser == "" {
|
if d.SSHUser == "" {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
Copyright 2021 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package gce
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"k8s.io/klog/v2"
|
||||||
|
"sigs.k8s.io/kubetest2/pkg/exec"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SetupSSH(project string) (string, string, error) {
|
||||||
|
dir, err := os.MkdirTemp("kops", "ssh")
|
||||||
|
if err != nil {
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
privateKey := filepath.Join(dir, "key")
|
||||||
|
configArgs := []string{
|
||||||
|
"gcloud",
|
||||||
|
"compute",
|
||||||
|
fmt.Sprintf("--project=%v", project),
|
||||||
|
"config-ssh",
|
||||||
|
fmt.Sprintf("--ssh-key-file=%v", privateKey),
|
||||||
|
}
|
||||||
|
klog.Info(strings.Join(configArgs, " "))
|
||||||
|
cmd := exec.Command(configArgs[0], configArgs[1:]...)
|
||||||
|
|
||||||
|
exec.InheritOutput(cmd)
|
||||||
|
err = cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return privateKey, fmt.Sprintf("%v.pub", privateKey), nil
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue