Files
nigiri/cli/controller/docker.go
Marco Argentieri e385558731 Use GH container registry images (#118)
* Use GH container registry images

* Change images in constant

* Update nigiri images constants

* Remove checks to print the version of nigiri CLI

* add fallbackfee to bitcoin.conf & elements.conf

* commented bitcoin push test
2021-07-16 18:18:20 +02:00

99 lines
1.9 KiB
Go

package controller
import (
"context"
"io/ioutil"
"os"
"path/filepath"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"github.com/vulpemventures/nigiri/cli/constants"
)
// Docker type handles interfaction with containers via docker and docker-compose
type Docker struct {
cli *client.Client
}
// New initialize a new Docker handler
func (d *Docker) New() error {
cli, err := client.NewEnvClient()
if err != nil {
return err
}
d.cli = cli
return nil
}
func (d *Docker) isDockerRunning() bool {
_, err := d.cli.ContainerList(context.Background(), types.ContainerListOptions{All: false})
if err != nil {
return false
}
return true
}
func (d *Docker) findNigiriContainers(listAllContainers bool) bool {
containers, _ := d.cli.ContainerList(context.Background(), types.ContainerListOptions{All: listAllContainers})
if len(containers) <= 0 {
return false
}
images := []string{}
for _, c := range containers {
images = append(images, c.Image)
}
for _, nigiriImage := range constants.NigiriBitcoinImages {
// just check if services for bitcoin chain are up and running
if !contains(images, nigiriImage) {
return false
}
}
return true
}
func (d *Docker) isNigiriRunning() bool {
return d.findNigiriContainers(false)
}
func (d *Docker) isNigiriStopped() bool {
isRunning := d.isNigiriRunning()
if !isRunning {
return d.findNigiriContainers(true)
}
return false
}
func (d *Docker) cleanVolumes(path string) error {
subdirs, err := ioutil.ReadDir(path)
if err != nil {
return err
}
for _, d := range subdirs {
path := filepath.Join(path, d.Name())
subsubdirs, _ := ioutil.ReadDir(path)
for _, sd := range subsubdirs {
if sd.IsDir() {
if err := os.RemoveAll(filepath.Join(path, sd.Name())); err != nil {
return err
}
}
}
}
return nil
}
func contains(list []string, elem string) bool {
for _, l := range list {
if l == elem {
return true
}
}
return false
}