|
|
@ -16,29 +16,23 @@ limitations under the License.
|
|
|
|
package e2e
|
|
|
|
package e2e
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
import (
|
|
|
|
|
|
|
|
"bytes"
|
|
|
|
"fmt"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"io/ioutil"
|
|
|
|
"os/exec"
|
|
|
|
"os/exec"
|
|
|
|
"regexp"
|
|
|
|
"regexp"
|
|
|
|
"strconv"
|
|
|
|
"strconv"
|
|
|
|
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
|
"k8s.io/client-go/kubernetes"
|
|
|
|
"k8s.io/client-go/kubernetes"
|
|
|
|
"k8s.io/client-go/pkg/api/v1"
|
|
|
|
"k8s.io/client-go/pkg/api/v1"
|
|
|
|
|
|
|
|
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"bytes"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. "github.com/onsi/ginkgo"
|
|
|
|
. "github.com/onsi/ginkgo"
|
|
|
|
. "github.com/onsi/gomega"
|
|
|
|
. "github.com/onsi/gomega"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
|
|
|
tillerImage string = "tiller"
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// HelmManager provides functionality to install client/server helm and use it
|
|
|
|
// HelmManager provides functionality to install client/server helm and use it
|
|
|
|
type HelmManager interface {
|
|
|
|
type HelmManager interface {
|
|
|
|
// InstallTiller will bootstrap tiller pod in k8s
|
|
|
|
// InstallTiller will bootstrap tiller pod in k8s
|
|
|
@ -64,6 +58,7 @@ type BinaryHelmManager struct {
|
|
|
|
HelmBin string
|
|
|
|
HelmBin string
|
|
|
|
TillerHost string
|
|
|
|
TillerHost string
|
|
|
|
UseCanary bool
|
|
|
|
UseCanary bool
|
|
|
|
|
|
|
|
UseServiceAccount bool
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (m *BinaryHelmManager) InstallTiller() error {
|
|
|
|
func (m *BinaryHelmManager) InstallTiller() error {
|
|
|
@ -73,6 +68,12 @@ func (m *BinaryHelmManager) InstallTiller() error {
|
|
|
|
if m.UseCanary {
|
|
|
|
if m.UseCanary {
|
|
|
|
arg = append(arg, "--canary-image")
|
|
|
|
arg = append(arg, "--canary-image")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if m.UseServiceAccount {
|
|
|
|
|
|
|
|
arg = append(arg, "--service-account", "tiller")
|
|
|
|
|
|
|
|
if err = m.InstallServiceAccounts(); err != nil {
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
_, err = m.executeUsingHelm(arg...)
|
|
|
|
_, err = m.executeUsingHelm(arg...)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
return err
|
|
|
@ -183,6 +184,22 @@ func (m *BinaryHelmManager) executeCommandWithValues(releaseName, command string
|
|
|
|
return m.executeUsingHelmInNamespace(arg...)
|
|
|
|
return m.executeUsingHelmInNamespace(arg...)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (m *BinaryHelmManager) InstallServiceAccounts() error {
|
|
|
|
|
|
|
|
objects := strings.Replace(serviceAccountTemplate, "TILLER_NAMESPACE", m.Namespace, -1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f, err := ioutil.TempFile("", m.Namespace)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
Logf("Failed creating tempfile: %s", err)
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f.WriteString(objects)
|
|
|
|
|
|
|
|
f.Sync()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_, err = m.executeUsingBinary("kubectl", "create", "-f", f.Name())
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func regexpKeyFromStructuredOutput(key, output string) string {
|
|
|
|
func regexpKeyFromStructuredOutput(key, output string) string {
|
|
|
|
r := regexp.MustCompile(fmt.Sprintf("%v:[[:space:]]*(.*)", key))
|
|
|
|
r := regexp.MustCompile(fmt.Sprintf("%v:[[:space:]]*(.*)", key))
|
|
|
|
// key will be captured in group with index 1
|
|
|
|
// key will be captured in group with index 1
|
|
|
@ -236,3 +253,34 @@ func prepareArgsFromValues(values map[string]string) string {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return b.String()
|
|
|
|
return b.String()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var serviceAccountTemplate = `
|
|
|
|
|
|
|
|
apiVersion: v1
|
|
|
|
|
|
|
|
kind: ServiceAccount
|
|
|
|
|
|
|
|
metadata:
|
|
|
|
|
|
|
|
name: tiller
|
|
|
|
|
|
|
|
namespace: TILLER_NAMESPACE
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
kind: Role
|
|
|
|
|
|
|
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
|
|
|
|
|
|
|
metadata:
|
|
|
|
|
|
|
|
name: tiller-manager
|
|
|
|
|
|
|
|
namespace: TILLER_NAMESPACE
|
|
|
|
|
|
|
|
rules:
|
|
|
|
|
|
|
|
- apiGroups: ["", "extensions", "apps", "*"]
|
|
|
|
|
|
|
|
resources: ["*"]
|
|
|
|
|
|
|
|
verbs: ["*"]
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
kind: RoleBinding
|
|
|
|
|
|
|
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
|
|
|
|
|
|
|
metadata:
|
|
|
|
|
|
|
|
name: tiller-binding
|
|
|
|
|
|
|
|
namespace: TILLER_NAMESPACE
|
|
|
|
|
|
|
|
subjects:
|
|
|
|
|
|
|
|
- kind: ServiceAccount
|
|
|
|
|
|
|
|
name: tiller
|
|
|
|
|
|
|
|
namespace: TILLER_NAMESPACE
|
|
|
|
|
|
|
|
roleRef:
|
|
|
|
|
|
|
|
kind: Role
|
|
|
|
|
|
|
|
name: tiller-manager
|
|
|
|
|
|
|
|
apiGroup: rbac.authorization.k8s.io`
|
|
|
|