forked from LaconicNetwork/kompose
clean convert function
This commit is contained in:
parent
bdf7acde12
commit
9b1041f1ae
637
cli/app/app.go
637
cli/app/app.go
@ -245,6 +245,315 @@ func ProjectKuberScale(p *project.Project, c *cli.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create the file to write to if --out is specified
|
||||||
|
func createOutFile(out string) *os.File {
|
||||||
|
var f *os.File
|
||||||
|
var err error
|
||||||
|
if len(out) != 0 {
|
||||||
|
f, err = os.Create(out)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatalf("error opening file: %v", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
}
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init RC object
|
||||||
|
func initRC(name string, service *project.ServiceConfig) *api.ReplicationController {
|
||||||
|
rc := &api.ReplicationController{
|
||||||
|
TypeMeta: unversioned.TypeMeta{
|
||||||
|
Kind: "ReplicationController",
|
||||||
|
APIVersion: "v1",
|
||||||
|
},
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
//Labels: map[string]string{"service": name},
|
||||||
|
},
|
||||||
|
Spec: api.ReplicationControllerSpec{
|
||||||
|
Replicas: 1,
|
||||||
|
Selector: map[string]string{"service": name},
|
||||||
|
Template: &api.PodTemplateSpec{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
//Labels: map[string]string{"service": name},
|
||||||
|
},
|
||||||
|
Spec: api.PodSpec{
|
||||||
|
Containers: []api.Container{
|
||||||
|
{
|
||||||
|
Name: name,
|
||||||
|
Image: service.Image,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return rc
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init SC object
|
||||||
|
func initSC(name string, service *project.ServiceConfig) *api.Service {
|
||||||
|
sc := &api.Service{
|
||||||
|
TypeMeta: unversioned.TypeMeta{
|
||||||
|
Kind: "Service",
|
||||||
|
APIVersion: "v1",
|
||||||
|
},
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
//Labels: map[string]string{"service": name},
|
||||||
|
},
|
||||||
|
Spec: api.ServiceSpec{
|
||||||
|
Selector: map[string]string{"service": name},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return sc
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init DC object
|
||||||
|
func initDC(name string, service *project.ServiceConfig) *extensions.Deployment {
|
||||||
|
dc := &extensions.Deployment{
|
||||||
|
TypeMeta: unversioned.TypeMeta{
|
||||||
|
Kind: "Deployment",
|
||||||
|
APIVersion: "extensions/v1beta1",
|
||||||
|
},
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
Labels: map[string]string{"service": name},
|
||||||
|
},
|
||||||
|
Spec: extensions.DeploymentSpec{
|
||||||
|
Replicas: 1,
|
||||||
|
Selector: &unversioned.LabelSelector{
|
||||||
|
MatchLabels: map[string]string{"service": name},
|
||||||
|
},
|
||||||
|
//UniqueLabelKey: p.Name,
|
||||||
|
Template: api.PodTemplateSpec{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Labels: map[string]string{"service": name},
|
||||||
|
},
|
||||||
|
Spec: api.PodSpec{
|
||||||
|
Containers: []api.Container{
|
||||||
|
{
|
||||||
|
Name: name,
|
||||||
|
Image: service.Image,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return dc
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init DS object
|
||||||
|
func initDS(name string, service *project.ServiceConfig) *extensions.DaemonSet {
|
||||||
|
ds := &extensions.DaemonSet{
|
||||||
|
TypeMeta: unversioned.TypeMeta{
|
||||||
|
Kind: "DaemonSet",
|
||||||
|
APIVersion: "extensions/v1beta1",
|
||||||
|
},
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
},
|
||||||
|
Spec: extensions.DaemonSetSpec{
|
||||||
|
Template: api.PodTemplateSpec{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
},
|
||||||
|
Spec: api.PodSpec{
|
||||||
|
Containers: []api.Container{
|
||||||
|
{
|
||||||
|
Name: name,
|
||||||
|
Image: service.Image,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return ds
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init RS object
|
||||||
|
func initRS(name string, service *project.ServiceConfig) *extensions.ReplicaSet {
|
||||||
|
rs := &extensions.ReplicaSet{
|
||||||
|
TypeMeta: unversioned.TypeMeta{
|
||||||
|
Kind: "ReplicaSet",
|
||||||
|
APIVersion: "extensions/v1beta1",
|
||||||
|
},
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
},
|
||||||
|
Spec: extensions.ReplicaSetSpec{
|
||||||
|
Replicas: 1,
|
||||||
|
Selector: &unversioned.LabelSelector{
|
||||||
|
MatchLabels: map[string]string{"service": name},
|
||||||
|
},
|
||||||
|
Template: api.PodTemplateSpec{
|
||||||
|
ObjectMeta: api.ObjectMeta{},
|
||||||
|
Spec: api.PodSpec{
|
||||||
|
Containers: []api.Container{
|
||||||
|
{
|
||||||
|
Name: name,
|
||||||
|
Image: service.Image,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return rs
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the environment variables.
|
||||||
|
func configEnvs(name string, service *project.ServiceConfig) ([]api.EnvVar, string) {
|
||||||
|
var envs []api.EnvVar
|
||||||
|
for _, env := range service.Environment.Slice() {
|
||||||
|
var character string = "="
|
||||||
|
if strings.Contains(env, character) {
|
||||||
|
value := env[strings.Index(env, character)+1:]
|
||||||
|
name := env[0:strings.Index(env, character)]
|
||||||
|
name = strings.TrimSpace(name)
|
||||||
|
value = strings.TrimSpace(value)
|
||||||
|
envs = append(envs, api.EnvVar{
|
||||||
|
Name: name,
|
||||||
|
Value: value,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
character = ":"
|
||||||
|
if strings.Contains(env, character) {
|
||||||
|
var charQuote string = "'"
|
||||||
|
value := env[strings.Index(env, character)+1:]
|
||||||
|
name := env[0:strings.Index(env, character)]
|
||||||
|
name = strings.TrimSpace(name)
|
||||||
|
value = strings.TrimSpace(value)
|
||||||
|
if strings.Contains(value, charQuote) {
|
||||||
|
value = strings.Trim(value, "'")
|
||||||
|
}
|
||||||
|
envs = append(envs, api.EnvVar{
|
||||||
|
Name: name,
|
||||||
|
Value: value,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
return nil, "Invalid container env " + env + " for service " + name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return envs, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the container volumes.
|
||||||
|
func configVolumes(service *project.ServiceConfig) ([]api.VolumeMount, []api.Volume) {
|
||||||
|
var volumesMount []api.VolumeMount
|
||||||
|
var volumes []api.Volume
|
||||||
|
for _, volume := range service.Volumes {
|
||||||
|
var character string = ":"
|
||||||
|
if strings.Contains(volume, character) {
|
||||||
|
hostDir := volume[0:strings.Index(volume, character)]
|
||||||
|
hostDir = strings.TrimSpace(hostDir)
|
||||||
|
containerDir := volume[strings.Index(volume, character)+1:]
|
||||||
|
containerDir = strings.TrimSpace(containerDir)
|
||||||
|
|
||||||
|
// check if ro/rw mode is defined
|
||||||
|
var readonly bool = true
|
||||||
|
if strings.Index(volume, character) != strings.LastIndex(volume, character) {
|
||||||
|
mode := volume[strings.LastIndex(volume, character)+1:]
|
||||||
|
if strings.Compare(mode, "rw") == 0 {
|
||||||
|
readonly = false
|
||||||
|
}
|
||||||
|
containerDir = containerDir[0:strings.Index(containerDir, character)]
|
||||||
|
}
|
||||||
|
|
||||||
|
// volumeName = random string of 20 chars
|
||||||
|
volumeName := RandStringBytes(20)
|
||||||
|
|
||||||
|
volumesMount = append(volumesMount, api.VolumeMount{Name: volumeName, ReadOnly: readonly, MountPath: containerDir})
|
||||||
|
p := &api.HostPathVolumeSource{
|
||||||
|
Path: hostDir,
|
||||||
|
}
|
||||||
|
//p.Path = hostDir
|
||||||
|
volumeSource := api.VolumeSource{HostPath: p}
|
||||||
|
volumes = append(volumes, api.Volume{Name: volumeName, VolumeSource: volumeSource})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return volumesMount, volumes
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the container ports.
|
||||||
|
func configPorts(name string, service *project.ServiceConfig) ([]api.ContainerPort, string) {
|
||||||
|
var ports []api.ContainerPort
|
||||||
|
for _, port := range service.Ports {
|
||||||
|
var character string = ":"
|
||||||
|
if strings.Contains(port, character) {
|
||||||
|
//portNumber := port[0:strings.Index(port, character)]
|
||||||
|
targetPortNumber := port[strings.Index(port, character)+1:]
|
||||||
|
targetPortNumber = strings.TrimSpace(targetPortNumber)
|
||||||
|
targetPortNumberInt, err := strconv.Atoi(targetPortNumber)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "Invalid container port " + port + " for service " + name
|
||||||
|
}
|
||||||
|
ports = append(ports, api.ContainerPort{ContainerPort: int32(targetPortNumberInt)})
|
||||||
|
} else {
|
||||||
|
portNumber, err := strconv.Atoi(port)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "Invalid container port " + port + " for service " + name
|
||||||
|
}
|
||||||
|
ports = append(ports, api.ContainerPort{ContainerPort: int32(portNumber)})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ports, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the container service ports.
|
||||||
|
func configServicePorts(name string, service *project.ServiceConfig) ([]api.ServicePort, string) {
|
||||||
|
var servicePorts []api.ServicePort
|
||||||
|
for _, port := range service.Ports {
|
||||||
|
var character string = ":"
|
||||||
|
if strings.Contains(port, character) {
|
||||||
|
portNumber := port[0:strings.Index(port, character)]
|
||||||
|
portNumber = strings.TrimSpace(portNumber)
|
||||||
|
targetPortNumber := port[strings.Index(port, character)+1:]
|
||||||
|
targetPortNumber = strings.TrimSpace(targetPortNumber)
|
||||||
|
portNumberInt, err := strconv.Atoi(portNumber)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "Invalid container port " + port + " for service " + name
|
||||||
|
}
|
||||||
|
targetPortNumberInt, err1 := strconv.Atoi(targetPortNumber)
|
||||||
|
if err1 != nil {
|
||||||
|
return nil, "Invalid container port " + port + " for service " + name
|
||||||
|
}
|
||||||
|
var targetPort intstr.IntOrString
|
||||||
|
targetPort.StrVal = targetPortNumber
|
||||||
|
targetPort.IntVal = int32(targetPortNumberInt)
|
||||||
|
servicePorts = append(servicePorts, api.ServicePort{Port: int32(portNumberInt), Name: portNumber, Protocol: "TCP", TargetPort: targetPort})
|
||||||
|
} else {
|
||||||
|
portNumber, err := strconv.Atoi(port)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "Invalid container port " + port + " for service " + name
|
||||||
|
}
|
||||||
|
var targetPort intstr.IntOrString
|
||||||
|
targetPort.StrVal = strconv.Itoa(portNumber)
|
||||||
|
targetPort.IntVal = int32(portNumber)
|
||||||
|
servicePorts = append(servicePorts, api.ServicePort{Port: int32(portNumber), Name: strconv.Itoa(portNumber), Protocol: "TCP", TargetPort: targetPort})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return servicePorts, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transform data to json/yaml
|
||||||
|
func transformer(v interface{}, entity string, generateYaml bool) ([]byte, string) {
|
||||||
|
// convert data to json / yaml
|
||||||
|
data, err := json.MarshalIndent(v, "", " ")
|
||||||
|
if generateYaml == true {
|
||||||
|
data, err = yaml.Marshal(v)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, "Failed to marshal the " + entity
|
||||||
|
}
|
||||||
|
logrus.Debugf("%s\n", data)
|
||||||
|
return data, ""
|
||||||
|
}
|
||||||
|
|
||||||
// ProjectKuberConvert tranforms docker compose to k8s objects
|
// ProjectKuberConvert tranforms docker compose to k8s objects
|
||||||
func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
||||||
composeFile := c.String("file")
|
composeFile := c.String("file")
|
||||||
@ -285,25 +594,7 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
logrus.Fatalf("Failed to parse the compose project from %s: %v", composeFile, err)
|
logrus.Fatalf("Failed to parse the compose project from %s: %v", composeFile, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
//// check flags
|
f := createOutFile(outFile)
|
||||||
//if c.BoolT("yaml") {
|
|
||||||
// generateYaml = true
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//if c.BoolT("stdout") {
|
|
||||||
// toStdout = true
|
|
||||||
//}
|
|
||||||
|
|
||||||
// Create the file f to write to if --out is specified
|
|
||||||
var f *os.File
|
|
||||||
var err error
|
|
||||||
if len(outFile) != 0 {
|
|
||||||
f, err = os.Create(outFile)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatalf("error opening file: %v", err)
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
var mServices map[string]api.Service = make(map[string]api.Service)
|
var mServices map[string]api.Service = make(map[string]api.Service)
|
||||||
var serviceLinks []string
|
var serviceLinks []string
|
||||||
@ -312,159 +603,16 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
|
|
||||||
checkUnsupportedKey(*service)
|
checkUnsupportedKey(*service)
|
||||||
|
|
||||||
rc := &api.ReplicationController{
|
rc := initRC(name, service)
|
||||||
TypeMeta: unversioned.TypeMeta{
|
sc := initSC(name, service)
|
||||||
Kind: "ReplicationController",
|
dc := initDC(name, service)
|
||||||
APIVersion: "v1",
|
ds := initDS(name, service)
|
||||||
},
|
rs := initRS(name, service)
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
Name: name,
|
|
||||||
//Labels: map[string]string{"service": name},
|
|
||||||
},
|
|
||||||
Spec: api.ReplicationControllerSpec{
|
|
||||||
Replicas: 1,
|
|
||||||
Selector: map[string]string{"service": name},
|
|
||||||
Template: &api.PodTemplateSpec{
|
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
//Labels: map[string]string{"service": name},
|
|
||||||
},
|
|
||||||
Spec: api.PodSpec{
|
|
||||||
Containers: []api.Container{
|
|
||||||
{
|
|
||||||
Name: name,
|
|
||||||
Image: service.Image,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
sc := &api.Service{
|
|
||||||
TypeMeta: unversioned.TypeMeta{
|
|
||||||
Kind: "Service",
|
|
||||||
APIVersion: "v1",
|
|
||||||
},
|
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
Name: name,
|
|
||||||
//Labels: map[string]string{"service": name},
|
|
||||||
},
|
|
||||||
Spec: api.ServiceSpec{
|
|
||||||
Selector: map[string]string{"service": name},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
dc := &extensions.Deployment{
|
|
||||||
TypeMeta: unversioned.TypeMeta{
|
|
||||||
Kind: "Deployment",
|
|
||||||
APIVersion: "extensions/v1beta1",
|
|
||||||
},
|
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
Name: name,
|
|
||||||
Labels: map[string]string{"service": name},
|
|
||||||
},
|
|
||||||
Spec: extensions.DeploymentSpec{
|
|
||||||
Replicas: 1,
|
|
||||||
Selector: &unversioned.LabelSelector{
|
|
||||||
MatchLabels: map[string]string{"service": name},
|
|
||||||
},
|
|
||||||
//UniqueLabelKey: p.Name,
|
|
||||||
Template: api.PodTemplateSpec{
|
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
Labels: map[string]string{"service": name},
|
|
||||||
},
|
|
||||||
Spec: api.PodSpec{
|
|
||||||
Containers: []api.Container{
|
|
||||||
{
|
|
||||||
Name: name,
|
|
||||||
Image: service.Image,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
ds := &extensions.DaemonSet{
|
|
||||||
TypeMeta: unversioned.TypeMeta{
|
|
||||||
Kind: "DaemonSet",
|
|
||||||
APIVersion: "extensions/v1beta1",
|
|
||||||
},
|
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
Name: name,
|
|
||||||
},
|
|
||||||
Spec: extensions.DaemonSetSpec{
|
|
||||||
Template: api.PodTemplateSpec{
|
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
Name: name,
|
|
||||||
},
|
|
||||||
Spec: api.PodSpec{
|
|
||||||
Containers: []api.Container{
|
|
||||||
{
|
|
||||||
Name: name,
|
|
||||||
Image: service.Image,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
rs := &extensions.ReplicaSet{
|
|
||||||
TypeMeta: unversioned.TypeMeta{
|
|
||||||
Kind: "ReplicaSet",
|
|
||||||
APIVersion: "extensions/v1beta1",
|
|
||||||
},
|
|
||||||
ObjectMeta: api.ObjectMeta{
|
|
||||||
Name: name,
|
|
||||||
},
|
|
||||||
Spec: extensions.ReplicaSetSpec{
|
|
||||||
Replicas: 1,
|
|
||||||
Selector: &unversioned.LabelSelector{
|
|
||||||
MatchLabels: map[string]string{"service": name},
|
|
||||||
},
|
|
||||||
Template: api.PodTemplateSpec{
|
|
||||||
ObjectMeta: api.ObjectMeta{},
|
|
||||||
Spec: api.PodSpec{
|
|
||||||
Containers: []api.Container{
|
|
||||||
{
|
|
||||||
Name: name,
|
|
||||||
Image: service.Image,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure the environment variables.
|
// Configure the environment variables.
|
||||||
var envs []api.EnvVar
|
envs, err := configEnvs(name, service)
|
||||||
for _, env := range service.Environment.Slice() {
|
if err != "" {
|
||||||
var character string = "="
|
logrus.Fatalf(err)
|
||||||
if strings.Contains(env, character) {
|
|
||||||
value := env[strings.Index(env, character)+1:]
|
|
||||||
name := env[0:strings.Index(env, character)]
|
|
||||||
name = strings.TrimSpace(name)
|
|
||||||
value = strings.TrimSpace(value)
|
|
||||||
envs = append(envs, api.EnvVar{
|
|
||||||
Name: name,
|
|
||||||
Value: value,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
character = ":"
|
|
||||||
if strings.Contains(env, character) {
|
|
||||||
var charQuote string = "'"
|
|
||||||
value := env[strings.Index(env, character)+1:]
|
|
||||||
name := env[0:strings.Index(env, character)]
|
|
||||||
name = strings.TrimSpace(name)
|
|
||||||
value = strings.TrimSpace(value)
|
|
||||||
if strings.Contains(value, charQuote) {
|
|
||||||
value = strings.Trim(value, "'")
|
|
||||||
}
|
|
||||||
envs = append(envs, api.EnvVar{
|
|
||||||
Name: name,
|
|
||||||
Value: value,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
logrus.Fatalf("Invalid container env %s for service %s", env, name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rc.Spec.Template.Spec.Containers[0].Env = envs
|
rc.Spec.Template.Spec.Containers[0].Env = envs
|
||||||
@ -489,38 +637,7 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
rs.Spec.Template.Spec.Containers[0].WorkingDir = service.WorkingDir
|
rs.Spec.Template.Spec.Containers[0].WorkingDir = service.WorkingDir
|
||||||
|
|
||||||
// Configure the container volumes.
|
// Configure the container volumes.
|
||||||
var volumesMount []api.VolumeMount
|
volumesMount, volumes := configVolumes(service)
|
||||||
var volumes []api.Volume
|
|
||||||
for _, volume := range service.Volumes {
|
|
||||||
var character string = ":"
|
|
||||||
if strings.Contains(volume, character) {
|
|
||||||
hostDir := volume[0:strings.Index(volume, character)]
|
|
||||||
hostDir = strings.TrimSpace(hostDir)
|
|
||||||
containerDir := volume[strings.Index(volume, character)+1:]
|
|
||||||
containerDir = strings.TrimSpace(containerDir)
|
|
||||||
|
|
||||||
// check if ro/rw mode is defined
|
|
||||||
var readonly bool = true
|
|
||||||
if strings.Index(volume, character) != strings.LastIndex(volume, character) {
|
|
||||||
mode := volume[strings.LastIndex(volume, character)+1:]
|
|
||||||
if strings.Compare(mode, "rw") == 0 {
|
|
||||||
readonly = false
|
|
||||||
}
|
|
||||||
containerDir = containerDir[0:strings.Index(containerDir, character)]
|
|
||||||
}
|
|
||||||
|
|
||||||
// volumeName = random string of 20 chars
|
|
||||||
volumeName := RandStringBytes(20)
|
|
||||||
|
|
||||||
volumesMount = append(volumesMount, api.VolumeMount{Name: volumeName, ReadOnly: readonly, MountPath: containerDir})
|
|
||||||
p := &api.HostPathVolumeSource{
|
|
||||||
Path: hostDir,
|
|
||||||
}
|
|
||||||
//p.Path = hostDir
|
|
||||||
volumeSource := api.VolumeSource{HostPath: p}
|
|
||||||
volumes = append(volumes, api.Volume{Name: volumeName, VolumeSource: volumeSource})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rc.Spec.Template.Spec.Containers[0].VolumeMounts = volumesMount
|
rc.Spec.Template.Spec.Containers[0].VolumeMounts = volumesMount
|
||||||
dc.Spec.Template.Spec.Containers[0].VolumeMounts = volumesMount
|
dc.Spec.Template.Spec.Containers[0].VolumeMounts = volumesMount
|
||||||
@ -544,25 +661,9 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Configure the container ports.
|
// Configure the container ports.
|
||||||
var ports []api.ContainerPort
|
ports, err := configPorts(name, service)
|
||||||
for _, port := range service.Ports {
|
if err != "" {
|
||||||
var character string = ":"
|
logrus.Fatalf(err)
|
||||||
if strings.Contains(port, character) {
|
|
||||||
//portNumber := port[0:strings.Index(port, character)]
|
|
||||||
targetPortNumber := port[strings.Index(port, character)+1:]
|
|
||||||
targetPortNumber = strings.TrimSpace(targetPortNumber)
|
|
||||||
targetPortNumberInt, err := strconv.Atoi(targetPortNumber)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatalf("Invalid container port %s for service %s", port, name)
|
|
||||||
}
|
|
||||||
ports = append(ports, api.ContainerPort{ContainerPort: int32(targetPortNumberInt)})
|
|
||||||
} else {
|
|
||||||
portNumber, err := strconv.Atoi(port)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatalf("Invalid container port %s for service %s", port, name)
|
|
||||||
}
|
|
||||||
ports = append(ports, api.ContainerPort{ContainerPort: int32(portNumber)})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rc.Spec.Template.Spec.Containers[0].Ports = ports
|
rc.Spec.Template.Spec.Containers[0].Ports = ports
|
||||||
@ -571,37 +672,11 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
rs.Spec.Template.Spec.Containers[0].Ports = ports
|
rs.Spec.Template.Spec.Containers[0].Ports = ports
|
||||||
|
|
||||||
// Configure the service ports.
|
// Configure the service ports.
|
||||||
var servicePorts []api.ServicePort
|
servicePorts, err := configServicePorts(name, service)
|
||||||
for _, port := range service.Ports {
|
if err != "" {
|
||||||
var character string = ":"
|
logrus.Fatalf(err)
|
||||||
if strings.Contains(port, character) {
|
|
||||||
portNumber := port[0:strings.Index(port, character)]
|
|
||||||
portNumber = strings.TrimSpace(portNumber)
|
|
||||||
targetPortNumber := port[strings.Index(port, character)+1:]
|
|
||||||
targetPortNumber = strings.TrimSpace(targetPortNumber)
|
|
||||||
portNumberInt, err := strconv.Atoi(portNumber)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatalf("Invalid container port %s for service %s", port, name)
|
|
||||||
}
|
|
||||||
targetPortNumberInt, err1 := strconv.Atoi(targetPortNumber)
|
|
||||||
if err1 != nil {
|
|
||||||
logrus.Fatalf("Invalid container port %s for service %s", port, name)
|
|
||||||
}
|
|
||||||
var targetPort intstr.IntOrString
|
|
||||||
targetPort.StrVal = targetPortNumber
|
|
||||||
targetPort.IntVal = int32(targetPortNumberInt)
|
|
||||||
servicePorts = append(servicePorts, api.ServicePort{Port: int32(portNumberInt), Name: portNumber, Protocol: "TCP", TargetPort: targetPort})
|
|
||||||
} else {
|
|
||||||
portNumber, err := strconv.Atoi(port)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatalf("Invalid container port %s for service %s", port, name)
|
|
||||||
}
|
|
||||||
var targetPort intstr.IntOrString
|
|
||||||
targetPort.StrVal = strconv.Itoa(portNumber)
|
|
||||||
targetPort.IntVal = int32(portNumber)
|
|
||||||
servicePorts = append(servicePorts, api.ServicePort{Port: int32(portNumber), Name: strconv.Itoa(portNumber), Protocol: "TCP", TargetPort: targetPort})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sc.Spec.Ports = servicePorts
|
sc.Spec.Ports = servicePorts
|
||||||
|
|
||||||
// Configure label
|
// Configure label
|
||||||
@ -618,7 +693,6 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
dc.ObjectMeta.Labels = labels
|
dc.ObjectMeta.Labels = labels
|
||||||
ds.ObjectMeta.Labels = labels
|
ds.ObjectMeta.Labels = labels
|
||||||
rs.ObjectMeta.Labels = labels
|
rs.ObjectMeta.Labels = labels
|
||||||
|
|
||||||
sc.ObjectMeta.Labels = labels
|
sc.ObjectMeta.Labels = labels
|
||||||
|
|
||||||
// Configure the container restart policy.
|
// Configure the container restart policy.
|
||||||
@ -643,52 +717,29 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// convert datarc to json / yaml
|
// convert datarc to json / yaml
|
||||||
datarc, err := json.MarshalIndent(rc, "", " ")
|
datarc, err := transformer(rc, "replication controller", generateYaml)
|
||||||
if generateYaml == true {
|
if err != "" {
|
||||||
datarc, err = yaml.Marshal(rc)
|
logrus.Fatalf(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatalf("Failed to marshal the replication controller: %v", err)
|
|
||||||
}
|
|
||||||
logrus.Debugf("%s\n", datarc)
|
|
||||||
|
|
||||||
// convert datadc to json / yaml
|
// convert datadc to json / yaml
|
||||||
datadc, err := json.MarshalIndent(dc, "", " ")
|
datadc, err := transformer(dc, "deployment", generateYaml)
|
||||||
if generateYaml == true {
|
if err != "" {
|
||||||
datadc, err = yaml.Marshal(dc)
|
logrus.Fatalf(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatalf("Failed to marshal the deployment container: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
logrus.Debugf("%s\n", datadc)
|
|
||||||
|
|
||||||
// convert datads to json / yaml
|
// convert datads to json / yaml
|
||||||
datads, err := json.MarshalIndent(ds, "", " ")
|
datads, err := transformer(ds, "daemonSet", generateYaml)
|
||||||
if generateYaml == true {
|
if err != "" {
|
||||||
datads, err = yaml.Marshal(ds)
|
logrus.Fatalf(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatalf("Failed to marshal the daemonSet: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
logrus.Debugf("%s\n", datads)
|
|
||||||
|
|
||||||
// convert datars to json / yaml
|
// convert datars to json / yaml
|
||||||
datars, err := json.MarshalIndent(rs, "", " ")
|
datars, err := transformer(rs, "replicaSet", generateYaml)
|
||||||
if generateYaml == true {
|
if err != "" {
|
||||||
datads, err = yaml.Marshal(rs)
|
logrus.Fatalf(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatalf("Failed to marshal the replicaSet: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
logrus.Debugf("%s\n", datars)
|
|
||||||
|
|
||||||
mServices[name] = *sc
|
mServices[name] = *sc
|
||||||
|
|
||||||
if len(service.Links.Slice()) > 0 {
|
if len(service.Links.Slice()) > 0 {
|
||||||
@ -728,20 +779,16 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
for k, v := range mServices {
|
for k, v := range mServices {
|
||||||
for i := 0; i < len(serviceLinks); i++ {
|
for i := 0; i < len(serviceLinks); i++ {
|
||||||
// convert datasvc to json / yaml
|
// convert datasvc to json / yaml
|
||||||
datasvc, er := json.MarshalIndent(v, "", " ")
|
datasvc, err := transformer(v, "service controller", generateYaml)
|
||||||
if generateYaml == true {
|
if err != "" {
|
||||||
datasvc, er = yaml.Marshal(v)
|
logrus.Fatalf(err)
|
||||||
}
|
}
|
||||||
if er != nil {
|
|
||||||
logrus.Fatalf("Failed to marshal the service controller: %v", er)
|
|
||||||
}
|
|
||||||
|
|
||||||
logrus.Debugf("%s\n", datasvc)
|
|
||||||
|
|
||||||
print(k, "svc", datasvc, toStdout, generateYaml, f)
|
print(k, "svc", datasvc, toStdout, generateYaml, f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if f != nil {
|
if f != nil {
|
||||||
fmt.Fprintf(os.Stdout, "file %q created\n", outFile)
|
fmt.Fprintf(os.Stdout, "file %q created\n", outFile)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user