forked from coop-cloud/abra
Compare commits
12 Commits
6ef15e0a26
...
6c87d501e6
Author | SHA1 | Date |
---|---|---|
knoflook | 6c87d501e6 | |
decentral1se | 930c29f4a2 | |
decentral1se | 1d6c3e98e4 | |
decentral1se | a90f3b7463 | |
decentral1se | 962f566228 | |
decentral1se | 9896c57399 | |
decentral1se | 748d607ddc | |
decentral1se | 3901258a96 | |
decentral1se | 4347083f98 | |
decentral1se | 4641a942d8 | |
3wc | 759a00eeb3 | |
3wc | d1526fad21 |
|
@ -31,7 +31,7 @@ func stackLogs(c *cli.Context, stackName string, client *dockerClient.Client) {
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func(s string) {
|
go func(s string) {
|
||||||
logOpts := types.ContainerLogsOptions{
|
logOpts := types.ContainerLogsOptions{
|
||||||
Details: true,
|
Details: false,
|
||||||
Follow: true,
|
Follow: true,
|
||||||
ShowStderr: true,
|
ShowStderr: true,
|
||||||
ShowStdout: true,
|
ShowStdout: true,
|
||||||
|
@ -88,7 +88,7 @@ var appLogsCommand = &cli.Command{
|
||||||
}
|
}
|
||||||
|
|
||||||
logOpts := types.ContainerLogsOptions{
|
logOpts := types.ContainerLogsOptions{
|
||||||
Details: true,
|
Details: false,
|
||||||
Follow: true,
|
Follow: true,
|
||||||
ShowStderr: true,
|
ShowStderr: true,
|
||||||
ShowStdout: true,
|
ShowStdout: true,
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"coopcloud.tech/abra/cli/internal"
|
"coopcloud.tech/abra/cli/internal"
|
||||||
"coopcloud.tech/abra/pkg/client"
|
"coopcloud.tech/abra/pkg/client"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
"coopcloud.tech/abra/pkg/config"
|
||||||
|
stack "coopcloud.tech/abra/pkg/upstream/stack"
|
||||||
"github.com/AlecAivazis/survey/v2"
|
"github.com/AlecAivazis/survey/v2"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
@ -48,23 +49,18 @@ var appRemoveCommand = &cli.Command{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
cl, err := client.New(app.Server)
|
cl, err := client.New(app.Server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !internal.Force {
|
if !internal.Force {
|
||||||
// FIXME: only query for app we are interested in, not all of them!
|
isDeployed, _, err := stack.IsDeployed(c.Context, cl, app.StackName())
|
||||||
statuses, err := config.GetAppStatuses(appFiles)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
if statuses[app.Name]["status"] == "deployed" {
|
if isDeployed {
|
||||||
logrus.Fatalf("'%s' is still deployed. Run \"abra app %s undeploy\" or pass --force", app.Name, app.Name)
|
logrus.Fatalf("'%s' is still deployed. Run \"abra app undeploy %s \" or pass --force", app.Name, app.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,12 +40,14 @@ var CatalogueSkipList = map[string]bool{
|
||||||
"docker-cp-deploy": true,
|
"docker-cp-deploy": true,
|
||||||
"docker-dind-bats-kcov": true,
|
"docker-dind-bats-kcov": true,
|
||||||
"docs.coopcloud.tech": true,
|
"docs.coopcloud.tech": true,
|
||||||
|
"drone-abra": true,
|
||||||
"example": true,
|
"example": true,
|
||||||
"gardening": true,
|
"gardening": true,
|
||||||
"go-abra": true,
|
"go-abra": true,
|
||||||
"organising": true,
|
"organising": true,
|
||||||
"pyabra": true,
|
"pyabra": true,
|
||||||
"radicle-seed-node": true,
|
"radicle-seed-node": true,
|
||||||
|
"recipes": true,
|
||||||
"stack-ssh-deploy": true,
|
"stack-ssh-deploy": true,
|
||||||
"swarm-cronjob": true,
|
"swarm-cronjob": true,
|
||||||
"tagcmp": true,
|
"tagcmp": true,
|
||||||
|
@ -176,7 +178,7 @@ A new catalogue copy can be published to the recipes repository by passing the
|
||||||
|
|
||||||
features, category, err := catalogue.GetRecipeFeaturesAndCategory(recipeMeta.Name)
|
features, category, err := catalogue.GetRecipeFeaturesAndCategory(recipeMeta.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Warn(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
catl[recipeMeta.Name] = catalogue.RecipeMeta{
|
catl[recipeMeta.Name] = catalogue.RecipeMeta{
|
||||||
|
|
|
@ -26,7 +26,7 @@ func DeployAction(c *cli.Context) error {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Debugf("checking whether '%s' is already deployed", stackName)
|
logrus.Debugf("checking whether %s is already deployed", stackName)
|
||||||
|
|
||||||
isDeployed, deployedVersion, err := stack.IsDeployed(c.Context, cl, stackName)
|
isDeployed, deployedVersion, err := stack.IsDeployed(c.Context, cl, stackName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -35,9 +35,9 @@ func DeployAction(c *cli.Context) error {
|
||||||
|
|
||||||
if isDeployed {
|
if isDeployed {
|
||||||
if Force || Chaos {
|
if Force || Chaos {
|
||||||
logrus.Warnf("'%s' is already deployed but continuing (--force/--chaos)", stackName)
|
logrus.Warnf("%s is already deployed but continuing (--force/--chaos)", stackName)
|
||||||
} else {
|
} else {
|
||||||
logrus.Fatalf("'%s' is already deployed", stackName)
|
logrus.Fatalf("%s is already deployed", stackName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ func DeployAction(c *cli.Context) error {
|
||||||
}
|
}
|
||||||
if len(versions) > 0 {
|
if len(versions) > 0 {
|
||||||
version = versions[len(versions)-1]
|
version = versions[len(versions)-1]
|
||||||
logrus.Debugf("choosing '%s' as version to deploy", version)
|
logrus.Debugf("choosing %s as version to deploy", version)
|
||||||
if err := recipe.EnsureVersion(app.Type, version); err != nil {
|
if err := recipe.EnsureVersion(app.Type, version); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ func DeployAction(c *cli.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if version == "" && !Chaos {
|
if version == "" && !Chaos {
|
||||||
logrus.Debugf("choosing '%s' as version to deploy", version)
|
logrus.Debugf("choosing %s as version to deploy", version)
|
||||||
if err := recipe.EnsureVersion(app.Type, version); err != nil {
|
if err := recipe.EnsureVersion(app.Type, version); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -236,7 +236,7 @@ func installDocker(c *cli.Context, cl *dockerClient.Client, sshCl *ssh.Client, d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Infof("docker is installed on %s", domainName)
|
logrus.Infof("docker is already installed on %s", domainName)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -276,7 +276,8 @@ func initSwarm(c *cli.Context, cl *dockerClient.Client, domainName string) error
|
||||||
AdvertiseAddr: ipv4,
|
AdvertiseAddr: ipv4,
|
||||||
}
|
}
|
||||||
if _, err := cl.SwarmInit(c.Context, initReq); err != nil {
|
if _, err := cl.SwarmInit(c.Context, initReq); err != nil {
|
||||||
if !strings.Contains(err.Error(), "is already part of a swarm") {
|
if !strings.Contains(err.Error(), "is already part of a swarm") ||
|
||||||
|
!strings.Contains(err.Error(), "must specify a listening address") {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
logrus.Infof("swarm mode already initialised on %s", domainName)
|
logrus.Infof("swarm mode already initialised on %s", domainName)
|
||||||
|
|
|
@ -411,7 +411,7 @@ func GetImageMetadata(imageRowString string) (image, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
img.Image = imageName
|
img.Image = strings.ReplaceAll(imageName, "`", "")
|
||||||
|
|
||||||
imageURL, err := GetStringInBetween(imgString, "(", ")")
|
imageURL, err := GetStringInBetween(imgString, "(", ")")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -441,7 +441,7 @@ func GetRecipeFeaturesAndCategory(recipeName string) (features, string, error) {
|
||||||
"<!-- metadata -->", "<!-- endmetadata -->",
|
"<!-- metadata -->", "<!-- endmetadata -->",
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
return feat, category, err
|
||||||
}
|
}
|
||||||
|
|
||||||
readmeLines := strings.Split( // Array item from lines
|
readmeLines := strings.Split( // Array item from lines
|
||||||
|
@ -553,9 +553,21 @@ func GetRecipeVersions(recipeName string) (RecipeVersions, error) {
|
||||||
path = strings.Split(path, "/")[1]
|
path = strings.Split(path, "/")[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var tag string
|
||||||
|
switch img.(type) {
|
||||||
|
case reference.NamedTagged:
|
||||||
|
tag = img.(reference.NamedTagged).Tag()
|
||||||
|
case reference.Named:
|
||||||
|
logrus.Warnf("%s service is missing image tag?", path)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
logrus.Debugf("looking up image: '%s' from '%s'", img, path)
|
||||||
|
|
||||||
digest, err := client.GetTagDigest(img)
|
digest, err := client.GetTagDigest(img)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
logrus.Warn(err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
versionMeta[service.Name] = ServiceMeta{
|
versionMeta[service.Name] = ServiceMeta{
|
||||||
|
|
|
@ -157,7 +157,8 @@ func EnsureVersion(recipeName, version string) error {
|
||||||
logrus.Debugf("read '%s' as tags for recipe '%s'", strings.Join(parsedTags, ", "), recipeName)
|
logrus.Debugf("read '%s' as tags for recipe '%s'", strings.Join(parsedTags, ", "), recipeName)
|
||||||
|
|
||||||
if tagRef.String() == "" {
|
if tagRef.String() == "" {
|
||||||
return fmt.Errorf("%s is not available?", version)
|
logrus.Warnf("%s recipe has no local tag: %s? this recipe version is not released?", recipeName, version)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
worktree, err := repo.Worktree()
|
worktree, err := repo.Worktree()
|
||||||
|
|
|
@ -350,7 +350,7 @@ func deployServices(
|
||||||
existingServiceMap[service.Spec.Name] = service
|
existingServiceMap[service.Spec.Name] = service
|
||||||
}
|
}
|
||||||
|
|
||||||
var serviceIDs []string
|
serviceIDs := make(map[string]string)
|
||||||
for internalName, serviceSpec := range services {
|
for internalName, serviceSpec := range services {
|
||||||
var (
|
var (
|
||||||
name = namespace.Scope(internalName)
|
name = namespace.Scope(internalName)
|
||||||
|
@ -410,7 +410,7 @@ func deployServices(
|
||||||
return errors.Wrapf(err, "failed to update service %s", name)
|
return errors.Wrapf(err, "failed to update service %s", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
serviceIDs = append(serviceIDs, service.ID)
|
serviceIDs[service.ID] = name
|
||||||
|
|
||||||
for _, warning := range response.Warnings {
|
for _, warning := range response.Warnings {
|
||||||
logrus.Warn(warning)
|
logrus.Warn(warning)
|
||||||
|
@ -430,15 +430,19 @@ func deployServices(
|
||||||
return errors.Wrapf(err, "failed to create service %s", name)
|
return errors.Wrapf(err, "failed to create service %s", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
serviceIDs = append(serviceIDs, serviceCreateResponse.ID)
|
serviceIDs[serviceCreateResponse.ID] = name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Infof("waiting for services to converge: %s", strings.Join(serviceIDs, ", "))
|
var serviceNames []string
|
||||||
|
for _, serviceName := range serviceIDs {
|
||||||
|
serviceNames = append(serviceNames, serviceName)
|
||||||
|
}
|
||||||
|
logrus.Infof("waiting for services to converge: %s", strings.Join(serviceNames, ", "))
|
||||||
|
|
||||||
ch := make(chan error, len(serviceIDs))
|
ch := make(chan error, len(serviceIDs))
|
||||||
for _, serviceID := range serviceIDs {
|
for serviceID, serviceName := range serviceIDs {
|
||||||
logrus.Debugf("waiting on %s to converge", serviceID)
|
logrus.Debugf("waiting on %s to converge", serviceName)
|
||||||
go func(s string) {
|
go func(s string) {
|
||||||
ch <- waitOnService(ctx, cl, s)
|
ch <- waitOnService(ctx, cl, s)
|
||||||
}(serviceID)
|
}(serviceID)
|
||||||
|
|
|
@ -76,13 +76,13 @@ function install_abra_release {
|
||||||
p=$HOME/.local/bin
|
p=$HOME/.local/bin
|
||||||
com="echo PATH=\$PATH:$p"
|
com="echo PATH=\$PATH:$p"
|
||||||
if [[ $SHELL =~ "bash" ]]; then
|
if [[ $SHELL =~ "bash" ]]; then
|
||||||
echo "echo $com >> $HOME/.bashrc"
|
echo "$com >> $HOME/.bashrc"
|
||||||
elif [[ $SHELL =~ "fizsh" ]]; then
|
elif [[ $SHELL =~ "fizsh" ]]; then
|
||||||
echo "echo $com >> $HOME/.fizsh/.fizshrc"
|
echo "$com >> $HOME/.fizsh/.fizshrc"
|
||||||
elif [[ $SHELL =~ "zsh" ]]; then
|
elif [[ $SHELL =~ "zsh" ]]; then
|
||||||
echo "echo $com >> $HOME/.zshrc"
|
echo "$com >> $HOME/.zshrc"
|
||||||
else
|
else
|
||||||
echo "echo $com >> $HOME/.profile"
|
echo "$com >> $HOME/.profile"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue