mirror of
https://github.com/aljazceru/nigiri.git
synced 2025-12-17 06:14:19 +01:00
* 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
99 lines
1.9 KiB
Go
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
|
|
}
|