github.com/docker/compose-on-kubernetes@v0.5.0/internal/e2e/compose/install.go (about)

     1  package compose
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  	"os"
     7  	"os/exec"
     8  	"time"
     9  
    10  	"github.com/docker/compose-on-kubernetes/api/constants"
    11  	"github.com/docker/compose-on-kubernetes/install"
    12  	"github.com/docker/compose-on-kubernetes/internal/e2e/cluster"
    13  	"github.com/docker/compose-on-kubernetes/internal/e2e/wait"
    14  	log "github.com/sirupsen/logrus"
    15  	"k8s.io/client-go/rest"
    16  )
    17  
    18  // Install installs the compose api extension
    19  func Install(config *rest.Config, ns, tag, pullSecret string) (func(), error) {
    20  	_, deleteNs, err := cluster.CreateNamespace(config, config, ns)
    21  	if err != nil {
    22  		return nil, err
    23  	}
    24  
    25  	err = install.Uninstall(config, ns, false)
    26  	if err != nil {
    27  		return nil, err
    28  	}
    29  
    30  	err = install.WaitNPods(config, ns, 0, install.TimeoutDefault)
    31  	if err != nil {
    32  		return nil, err
    33  	}
    34  
    35  	err = install.Unsafe(context.Background(), config, install.UnsafeOptions{
    36  		OptionsCommon: install.OptionsCommon{
    37  			Namespace:              ns,
    38  			Tag:                    tag,
    39  			PullSecret:             pullSecret,
    40  			ReconciliationInterval: constants.DefaultFullSyncInterval,
    41  			HealthzCheckPort:       8080,
    42  		},
    43  		Coverage: true,
    44  	})
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  
    49  	err = install.WaitNPods(config, ns, 2, 2*time.Minute)
    50  	if err != nil {
    51  		return nil, err
    52  	}
    53  	err = wait.For(30, func() (bool, error) {
    54  		return install.IsRunning(config)
    55  	})
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  
    60  	cleanup := func() {
    61  		{
    62  			cmd := exec.Command("./retrieve-coverage")
    63  			stdout, err := cmd.StdoutPipe()
    64  			if err != nil {
    65  				log.Errorf("Unable to retrieve stdout: %s", err)
    66  			} else {
    67  				go io.Copy(os.Stdout, stdout)
    68  			}
    69  			stderr, err := cmd.StderrPipe()
    70  			if err != nil {
    71  				log.Errorf("Unable to retrieve stderr: %s", err)
    72  			} else {
    73  				go io.Copy(os.Stderr, stderr)
    74  			}
    75  			err = cmd.Run()
    76  			if err != nil {
    77  				log.Errorf("Unable to retrieve coverage: %s", err)
    78  			}
    79  		}
    80  		install.Uninstall(config, ns, false)
    81  		deleteNs()
    82  	}
    83  
    84  	return cleanup, nil
    85  }