ledo init

This commit is contained in:
2021-11-20 11:34:31 +01:00
parent 8a91f699b8
commit da41b5820b
16 changed files with 336 additions and 1 deletions

View File

@ -79,7 +79,8 @@ func MergeComposerFiles(filenames ...string) (string, error) {
}
func ShowDockerImageFQN(ctx *context.LedoContext) string {
return fmt.Sprintf("%s/%s/%s/master:latest", ctx.Config.Docker.Registry, ctx.Config.Docker.Namespace, ctx.Config.Docker.Name)
fqn := fmt.Sprintf("%s/%s/%s/master", ctx.Config.Docker.Registry, ctx.Config.Docker.Namespace, ctx.Config.Docker.Name)
return strings.ToLower(fqn)
}
func ExecComposerUp(ctx *context.LedoContext) {

View File

@ -34,6 +34,11 @@ func InitCommand(ctx *cli.Context) *LedoContext {
modeYml = ".jz-mode"
}
if _, err := os.Stat(configYml); err != nil {
fmt.Printf("Config file not found. Please run ledo init\n")
os.Exit(1)
}
mode := mode.InitMode(modeYml, configYml)
c.Mode = mode
@ -56,6 +61,18 @@ func InitCommand(ctx *cli.Context) *LedoContext {
return &c
}
func LoadConfigFile() (*config.LedoFile, error) {
configYml := ".ledo.yml"
if _, err := os.Stat(configYml); err != nil {
nilCfg := &config.LedoFile{}
return nilCfg, err
}
cfg, _ := config.NewLedoFile(configYml)
return cfg, nil
}
func (lx *LedoContext) ExecCmd(cmd string, cmdArgs []string) error {
fmt.Printf("Execute: %v %v\n", cmd, strings.Join(cmdArgs, " "))
command := exec.Command(cmd, cmdArgs...)

View File

@ -0,0 +1,40 @@
package docker_hub
import (
"encoding/json"
"io/ioutil"
"net/http"
)
type DockerImageTag struct {
Layer string `json:"layer"`
Name string `json:"name"`
}
var url = "https://registry.hub.docker.com/v1/repositories"
func GetImageTags(image string) []DockerImageTag {
url = url + "/" + image + "/tags"
res, _ := http.Get(url)
defer res.Body.Close()
bytes, err := ioutil.ReadAll(res.Body)
if err != nil {
panic(err.Error())
}
var tags []DockerImageTag
json.Unmarshal(bytes, &tags)
return tags
}
func ImageTagsToArray(tags []DockerImageTag) []string {
n := len(tags)
arrTags := make([]string, n)
for idx, tag := range tags {
arrTags[idx] = tag.Name
}
return arrTags
}

View File

@ -0,0 +1,30 @@
package interact
import (
survey "github.com/AlecAivazis/survey/v2"
"ledo/app/modules/docker_hub"
)
func SelectDockerHubTag(dockerImage string) (string, error) {
dockerImageTags := docker_hub.GetImageTags(dockerImage)
selectedTag := "latest"
var qs = []*survey.Question{
{
Name: "tags",
Prompt: &survey.Select{
Message: "Select available docker image tag",
PageSize: 10,
Options: docker_hub.ImageTagsToArray(dockerImageTags),
},
},
}
err := survey.Ask(qs, &selectedTag)
if err != nil {
return "", err
}
return selectedTag, err
}

View File

@ -0,0 +1,76 @@
package interact
import (
survey "github.com/AlecAivazis/survey/v2"
"ledo/app/modules/config"
)
func InitLedoProject(dockerConfig config.DockerMap) (config.DockerMap, error) {
if dockerConfig.Registry == "" {
dockerConfig.Registry = "hub.docker.com"
}
if dockerConfig.Shell == "" {
dockerConfig.Shell = "/bin/bash"
}
if dockerConfig.Username == "" {
dockerConfig.Username = "root"
}
var qs = []*survey.Question{
{
Name: "Registry",
Prompt: &survey.Input{Message: "Enter docker registry address: ", Default: dockerConfig.Registry, Help: "Docker registry for main service image"},
Validate: survey.Required,
Transform: survey.ToLower,
},
{
Name: "Namespace",
Prompt: &survey.Input{Message: "Enter project namespace: ",Default: dockerConfig.Namespace, Help: "Project namespace (eq. GitLab project group)"},
Validate: survey.Required,
Transform: survey.ToLower,
},
{
Name: "Name",
Prompt: &survey.Input{Message: "Enter project name: ", Default: dockerConfig.Name},
Validate: survey.Required,
Transform: survey.ToLower,
},
{
Name: "MainService",
Prompt: &survey.Input{Message: "Enter docker-compose main service name: ",Default: dockerConfig.MainService, Help: "Main service, important if you want use ledo shell command or ledo run command"},
Validate: survey.Required,
Transform: survey.ToLower,
},
{
Name: "Shell",
Prompt: &survey.Input{Message: "Enter default shell: ", Default: dockerConfig.Shell},
Validate: survey.Required,
Transform: survey.ToLower,
},
{
Name: "Username",
Prompt: &survey.Input{Message: "Enter docker main service username: ", Default: dockerConfig.Username, Help: "Default user, if set ledo run command was execute with sudo user"},
Validate: survey.Required,
Transform: survey.ToLower,
},
}
err := survey.Ask(qs, &dockerConfig)
if err != nil {
return config.DockerMap{}, err
}
return dockerConfig, err
}
func InitAdvancedConfigurationAsk() (bool) {
runAdv := false
prompt := &survey.Confirm{Message: "Run advanced docker mode configuration?"}
survey.AskOne(prompt, &runAdv)
return runAdv
}