Add an openshiftCluster.clusterCmd helper method

… to help with creating an exec.Cmd in the cluster’s directory and with
the appropriate environment variables.
This commit is contained in:
Miloslav Trmač 2017-03-18 19:42:37 +01:00
parent c4275519ae
commit def5f4a11a

View File

@ -14,6 +14,10 @@ import (
"github.com/go-check/check" "github.com/go-check/check"
) )
var adminKUBECONFIG = map[string]string{
"KUBECONFIG": "openshift.local.config/master/admin.kubeconfig",
}
// openshiftCluster is an OpenShift API master and integrated registry // openshiftCluster is an OpenShift API master and integrated registry
// running on localhost. // running on localhost.
type openshiftCluster struct { type openshiftCluster struct {
@ -42,10 +46,20 @@ func startOpenshiftCluster(c *check.C) *openshiftCluster {
return cluster return cluster
} }
// clusterCmd creates an exec.Cmd in c.workingDir with current environment modified by environment
func (c *openshiftCluster) clusterCmd(env map[string]string, name string, args ...string) *exec.Cmd {
cmd := exec.Command(name, args...)
cmd.Dir = c.workingDir
cmd.Env = os.Environ()
for key, value := range env {
cmd.Env = modifyEnviron(cmd.Env, key, value)
}
return cmd
}
// startMaster starts the OpenShift master (etcd+API server) and waits for it to be ready, or terminates on failure. // startMaster starts the OpenShift master (etcd+API server) and waits for it to be ready, or terminates on failure.
func (c *openshiftCluster) startMaster() { func (c *openshiftCluster) startMaster() {
c.master = exec.Command("openshift", "start", "master") c.master = c.clusterCmd(nil, "openshift", "start", "master")
c.master.Dir = c.workingDir
stdout, err := c.master.StdoutPipe() stdout, err := c.master.StdoutPipe()
// Send both to the same pipe. This might cause the two streams to be mixed up, // Send both to the same pipe. This might cause the two streams to be mixed up,
// but logging actually goes only to stderr - this primarily ensure we log any // but logging actually goes only to stderr - this primarily ensure we log any
@ -113,11 +127,10 @@ func (c *openshiftCluster) startMaster() {
// startRegistry starts the OpenShift registry and waits for it to be ready, or terminates on failure. // startRegistry starts the OpenShift registry and waits for it to be ready, or terminates on failure.
func (c *openshiftCluster) startRegistry() { func (c *openshiftCluster) startRegistry() {
//KUBECONFIG=openshift.local.config/master/openshift-registry.kubeconfig DOCKER_REGISTRY_URL=127.0.0.1:5000 //KUBECONFIG=openshift.local.config/master/openshift-registry.kubeconfig DOCKER_REGISTRY_URL=127.0.0.1:5000
c.registry = exec.Command("dockerregistry", "/atomic-registry-config.yml") c.registry = c.clusterCmd(map[string]string{
c.registry.Dir = c.workingDir "KUBECONFIG": "openshift.local.config/master/openshift-registry.kubeconfig",
c.registry.Env = os.Environ() "DOCKER_REGISTRY_URL": "127.0.0.1:5000",
c.registry.Env = modifyEnviron(c.registry.Env, "KUBECONFIG", "openshift.local.config/master/openshift-registry.kubeconfig") }, "dockerregistry", "/atomic-registry-config.yml")
c.registry.Env = modifyEnviron(c.registry.Env, "DOCKER_REGISTRY_URL", "127.0.0.1:5000")
consumeAndLogOutputs(c.c, "registry", c.registry) consumeAndLogOutputs(c.c, "registry", c.registry)
err := c.registry.Start() err := c.registry.Start()
c.c.Assert(err, check.IsNil) c.c.Assert(err, check.IsNil)
@ -134,8 +147,7 @@ func (c *openshiftCluster) startRegistry() {
// ocLogin runs (oc login) and (oc new-project) on the cluster, or terminates on failure. // ocLogin runs (oc login) and (oc new-project) on the cluster, or terminates on failure.
func (c *openshiftCluster) ocLoginToProject() { func (c *openshiftCluster) ocLoginToProject() {
c.c.Logf("oc login") c.c.Logf("oc login")
cmd := exec.Command("oc", "login", "--certificate-authority=openshift.local.config/master/ca.crt", "-u", "myuser", "-p", "mypw", "https://localhost:8443") cmd := c.clusterCmd(nil, "oc", "login", "--certificate-authority=openshift.local.config/master/ca.crt", "-u", "myuser", "-p", "mypw", "https://localhost:8443")
cmd.Dir = c.workingDir
out, err := cmd.CombinedOutput() out, err := cmd.CombinedOutput()
c.c.Assert(err, check.IsNil, check.Commentf("%s", out)) c.c.Assert(err, check.IsNil, check.Commentf("%s", out))
c.c.Assert(string(out), check.Matches, "(?s).*Login successful.*") // (?s) : '.' will also match newlines c.c.Assert(string(out), check.Matches, "(?s).*Login successful.*") // (?s) : '.' will also match newlines
@ -170,10 +182,7 @@ func (c *openshiftCluster) dockerLogin() {
// FIXME: This also allows anyone to DoS anyone else; this design is really not all // FIXME: This also allows anyone to DoS anyone else; this design is really not all
// that workable, but it is the best we can do for now. // that workable, but it is the best we can do for now.
func (c *openshiftCluster) relaxImageSignerPermissions() { func (c *openshiftCluster) relaxImageSignerPermissions() {
cmd := exec.Command("oadm", "policy", "add-cluster-role-to-group", "system:image-signer", "system:authenticated") cmd := c.clusterCmd(adminKUBECONFIG, "oadm", "policy", "add-cluster-role-to-group", "system:image-signer", "system:authenticated")
cmd.Dir = c.workingDir
cmd.Env = os.Environ()
cmd.Env = modifyEnviron(cmd.Env, "KUBECONFIG", "openshift.local.config/master/admin.kubeconfig")
out, err := cmd.CombinedOutput() out, err := cmd.CombinedOutput()
c.c.Assert(err, check.IsNil, check.Commentf("%s", string(out))) c.c.Assert(err, check.IsNil, check.Commentf("%s", string(out)))
c.c.Assert(string(out), check.Equals, "") c.c.Assert(string(out), check.Equals, "")