mirror of
https://github.com/rancher/rke.git
synced 2025-08-31 14:36:32 +00:00
Use Cluster structure
Use separate cluster package Save cluster state and certs to kubernetes Handle Remove and sync cluster state/crts Reuse kubernetes client and combine image and version Separate building functions and small fixes
This commit is contained in:
@@ -10,41 +10,41 @@ import (
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/api/types/container"
|
||||
"github.com/rancher/rke/hosts"
|
||||
"github.com/docker/docker/client"
|
||||
)
|
||||
|
||||
func DoRunContainer(imageCfg *container.Config, hostCfg *container.HostConfig, containerName string, host *hosts.Host, plane string) error {
|
||||
isRunning, err := IsContainerRunning(host, containerName)
|
||||
func DoRunContainer(dClient *client.Client, imageCfg *container.Config, hostCfg *container.HostConfig, containerName string, hostname string, plane string) error {
|
||||
isRunning, err := IsContainerRunning(dClient, hostname, containerName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if isRunning {
|
||||
logrus.Infof("[%s] Container %s is already running on host [%s]", plane, containerName, host.Hostname)
|
||||
logrus.Infof("[%s] Container %s is already running on host [%s]", plane, containerName, hostname)
|
||||
return nil
|
||||
}
|
||||
logrus.Debugf("[%s] Pulling Image on host [%s]", plane, host.Hostname)
|
||||
err = PullImage(host, imageCfg.Image)
|
||||
logrus.Debugf("[%s] Pulling Image on host [%s]", plane, hostname)
|
||||
err = PullImage(dClient, hostname, imageCfg.Image)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
logrus.Infof("[%s] Successfully pulled %s image on host [%s]", plane, containerName, host.Hostname)
|
||||
resp, err := host.DClient.ContainerCreate(context.Background(), imageCfg, hostCfg, nil, containerName)
|
||||
logrus.Infof("[%s] Successfully pulled %s image on host [%s]", plane, containerName, hostname)
|
||||
resp, err := dClient.ContainerCreate(context.Background(), imageCfg, hostCfg, nil, containerName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to create %s container on host [%s]: %v", containerName, host.Hostname, err)
|
||||
return fmt.Errorf("Failed to create %s container on host [%s]: %v", containerName, hostname, err)
|
||||
}
|
||||
if err := host.DClient.ContainerStart(context.Background(), resp.ID, types.ContainerStartOptions{}); err != nil {
|
||||
return fmt.Errorf("Failed to start %s container on host [%s]: %v", containerName, host.Hostname, err)
|
||||
if err := dClient.ContainerStart(context.Background(), resp.ID, types.ContainerStartOptions{}); err != nil {
|
||||
return fmt.Errorf("Failed to start %s container on host [%s]: %v", containerName, hostname, err)
|
||||
}
|
||||
logrus.Debugf("[%s] Successfully started %s container: %s", plane, containerName, resp.ID)
|
||||
logrus.Infof("[%s] Successfully started %s container on host [%s]", plane, containerName, host.Hostname)
|
||||
logrus.Infof("[%s] Successfully started %s container on host [%s]", plane, containerName, hostname)
|
||||
return nil
|
||||
}
|
||||
|
||||
func IsContainerRunning(host *hosts.Host, containerName string) (bool, error) {
|
||||
logrus.Debugf("Checking if container %s is running on host [%s]", containerName, host.Hostname)
|
||||
containers, err := host.DClient.ContainerList(context.Background(), types.ContainerListOptions{})
|
||||
func IsContainerRunning(dClient *client.Client, hostname string, containerName string) (bool, error) {
|
||||
logrus.Debugf("Checking if container %s is running on host [%s]", containerName, hostname)
|
||||
containers, err := dClient.ContainerList(context.Background(), types.ContainerListOptions{})
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("Can't get Docker containers for host [%s]: %v", host.Hostname, err)
|
||||
return false, fmt.Errorf("Can't get Docker containers for host [%s]: %v", hostname, err)
|
||||
|
||||
}
|
||||
for _, container := range containers {
|
||||
@@ -55,10 +55,10 @@ func IsContainerRunning(host *hosts.Host, containerName string) (bool, error) {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func PullImage(host *hosts.Host, containerImage string) error {
|
||||
out, err := host.DClient.ImagePull(context.Background(), containerImage, types.ImagePullOptions{})
|
||||
func PullImage(dClient *client.Client, hostname string, containerImage string) error {
|
||||
out, err := dClient.ImagePull(context.Background(), containerImage, types.ImagePullOptions{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Can't pull Docker image %s for host [%s]: %v", containerImage, host.Hostname, err)
|
||||
return fmt.Errorf("Can't pull Docker image %s for host [%s]: %v", containerImage, hostname, err)
|
||||
}
|
||||
defer out.Close()
|
||||
if logrus.GetLevel() == logrus.DebugLevel {
|
||||
@@ -69,3 +69,11 @@ func PullImage(host *hosts.Host, containerImage string) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func RemoveContainer(dClient *client.Client, hostname string, containerName string) error {
|
||||
err := dClient.ContainerRemove(context.Background(), containerName, types.ContainerRemoveOptions{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Can't remove Docker container %s for host [%s]: %v", containerName, hostname, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user