mirror of
https://github.com/crazy-max/diun.git
synced 2025-12-21 21:33:22 +01:00
This commit is contained in:
@@ -75,14 +75,14 @@ func main() {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Load configuration
|
// Load configuration
|
||||||
cfg, err := config.Load(cli.Cfgfile)
|
cfg, err := config.Load(cli)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Err(err).Msg("Cannot load configuration")
|
log.Fatal().Err(err).Msg("Cannot load configuration")
|
||||||
}
|
}
|
||||||
log.Debug().Msg(cfg.String())
|
log.Debug().Msg(cfg.String())
|
||||||
|
|
||||||
// Init
|
// Init
|
||||||
if diun, err = app.New(meta, cfg, location); err != nil {
|
if diun, err = app.New(meta, cli, cfg, location); err != nil {
|
||||||
log.Fatal().Err(err).Msgf("Cannot initialize %s", meta.Name)
|
log.Fatal().Err(err).Msgf("Cannot initialize %s", meta.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,7 @@ $ diun --config ./diun.yml --test-notif
|
|||||||
Or within a container:
|
Or within a container:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ docker run --rm -it -v "$(pwd)/diun.yml:/diun.yml" \
|
$ docker-compose exec diun --test-notif
|
||||||
crazymax/diun:latest --config /diun.yml --test-notif
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## field docker|swarm uses unsupported type: invalid
|
## field docker|swarm uses unsupported type: invalid
|
||||||
|
|||||||
2
go.sum
2
go.sum
@@ -65,8 +65,6 @@ github.com/containers/ocicrypt v1.0.2/go.mod h1:nsOhbP19flrX6rE7ieGFvBlr7modwmNj
|
|||||||
github.com/containers/storage v1.20.2 h1:tw/uKRPDnmVrluIzer3dawTFG/bTJLP8IEUyHFhltYk=
|
github.com/containers/storage v1.20.2 h1:tw/uKRPDnmVrluIzer3dawTFG/bTJLP8IEUyHFhltYk=
|
||||||
github.com/containers/storage v1.20.2/go.mod h1:oOB9Ie8OVPojvoaKWEGSEtHbXUAs+tSyr7RO7ZGteMc=
|
github.com/containers/storage v1.20.2/go.mod h1:oOB9Ie8OVPojvoaKWEGSEtHbXUAs+tSyr7RO7ZGteMc=
|
||||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
github.com/crazy-max/gonfig v0.2.0 h1:xmhIS7rgd/JGAxGsVCp1dLVSEr15DOBQXvN5AvCkyhA=
|
|
||||||
github.com/crazy-max/gonfig v0.2.0/go.mod h1:UNwOsugQKi1lY7sXRAYJNP5rftyUC5LeKyaly9Efh+c=
|
|
||||||
github.com/crazy-max/gonfig v0.3.0 h1:/HFdLQjXSNhImgeQgD2eXhc5svX4PhUkGSbl4fJRp4s=
|
github.com/crazy-max/gonfig v0.3.0 h1:/HFdLQjXSNhImgeQgD2eXhc5svX4PhUkGSbl4fJRp4s=
|
||||||
github.com/crazy-max/gonfig v0.3.0/go.mod h1:7vmzltkoa1RHpGB5fTom0ebnqelHdd7fzhtXTi8sVoQ=
|
github.com/crazy-max/gonfig v0.3.0/go.mod h1:7vmzltkoa1RHpGB5fTom0ebnqelHdd7fzhtXTi8sVoQ=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
|||||||
@@ -35,28 +35,30 @@ type Diun struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// New creates new diun instance
|
// New creates new diun instance
|
||||||
func New(meta model.Meta, cfg *config.Config, location *time.Location) (*Diun, error) {
|
func New(meta model.Meta, cli model.Cli, cfg *config.Config, location *time.Location) (*Diun, error) {
|
||||||
// DB client
|
var err error
|
||||||
dbcli, err := db.New(*cfg.Db)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notification client
|
diun := &Diun{
|
||||||
notifcli, err := notif.New(cfg.Notif, meta)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &Diun{
|
|
||||||
meta: meta,
|
meta: meta,
|
||||||
cfg: cfg,
|
cfg: cfg,
|
||||||
cron: cron.New(cron.WithLocation(location), cron.WithParser(cron.NewParser(
|
cron: cron.New(cron.WithLocation(location), cron.WithParser(cron.NewParser(
|
||||||
cron.SecondOptional|cron.Minute|cron.Hour|cron.Dom|cron.Month|cron.Dow|cron.Descriptor),
|
cron.SecondOptional|cron.Minute|cron.Hour|cron.Dom|cron.Month|cron.Dow|cron.Descriptor),
|
||||||
)),
|
)),
|
||||||
db: dbcli,
|
}
|
||||||
notif: notifcli,
|
|
||||||
}, nil
|
diun.notif, err = notif.New(cfg.Notif, meta)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !cli.TestNotif {
|
||||||
|
diun.db, err = db.New(*cfg.Db)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return diun, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start starts diun
|
// Start starts diun
|
||||||
@@ -147,8 +149,9 @@ func (di *Diun) Close() {
|
|||||||
func (di *Diun) TestNotif() {
|
func (di *Diun) TestNotif() {
|
||||||
createdAt, _ := time.Parse("2006-01-02T15:04:05Z", "2020-03-26T12:23:56Z")
|
createdAt, _ := time.Parse("2006-01-02T15:04:05Z", "2020-03-26T12:23:56Z")
|
||||||
image, _ := registry.ParseImage(registry.ParseImageOptions{
|
image, _ := registry.ParseImage(registry.ParseImageOptions{
|
||||||
Name: "crazymax/diun:latest",
|
Name: "diun/testnotif:latest",
|
||||||
})
|
})
|
||||||
|
image.HubLink = ""
|
||||||
|
|
||||||
log.Info().Msg("Testing notification settings...")
|
log.Info().Msg("Testing notification settings...")
|
||||||
di.notif.Send(model.NotifEntry{
|
di.notif.Send(model.NotifEntry{
|
||||||
@@ -156,7 +159,7 @@ func (di *Diun) TestNotif() {
|
|||||||
Provider: "file",
|
Provider: "file",
|
||||||
Image: image,
|
Image: image,
|
||||||
Manifest: registry.Manifest{
|
Manifest: registry.Manifest{
|
||||||
Name: "docker.io/crazymax/diun",
|
Name: "diun/testnotif",
|
||||||
Tag: "latest",
|
Tag: "latest",
|
||||||
MIMEType: "application/vnd.docker.distribution.manifest.list.v2+json",
|
MIMEType: "application/vnd.docker.distribution.manifest.list.v2+json",
|
||||||
Digest: "sha256:216e3ae7de4ca8b553eb11ef7abda00651e79e537e85c46108284e5e91673e01",
|
Digest: "sha256:216e3ae7de4ca8b553eb11ef7abda00651e79e537e85c46108284e5e91673e01",
|
||||||
@@ -172,7 +175,7 @@ func (di *Diun) TestNotif() {
|
|||||||
"org.label-schema.vcs-ref": "e13f097c",
|
"org.label-schema.vcs-ref": "e13f097c",
|
||||||
"org.label-schema.vcs-url": "https://github.com/crazy-max/diun",
|
"org.label-schema.vcs-url": "https://github.com/crazy-max/diun",
|
||||||
"org.label-schema.vendor": "CrazyMax",
|
"org.label-schema.vendor": "CrazyMax",
|
||||||
"org.label-schema.version": "2.6.1",
|
"org.label-schema.version": "x.x.x",
|
||||||
},
|
},
|
||||||
Layers: []string{
|
Layers: []string{
|
||||||
"sha256:aad63a9339440e7c3e1fff2b988991b9bfb81280042fa7f39a5e327023056819",
|
"sha256:aad63a9339440e7c3e1fff2b988991b9bfb81280042fa7f39a5e327023056819",
|
||||||
|
|||||||
@@ -18,18 +18,18 @@ type Config struct {
|
|||||||
Watch *model.Watch `yaml:"watch,omitempty" json:"watch,omitempty"`
|
Watch *model.Watch `yaml:"watch,omitempty" json:"watch,omitempty"`
|
||||||
Notif *model.Notif `yaml:"notif,omitempty" json:"notif,omitempty"`
|
Notif *model.Notif `yaml:"notif,omitempty" json:"notif,omitempty"`
|
||||||
RegOpts model.RegOpts `yaml:"regopts,omitempty" json:"regopts,omitempty" validate:"unique=Name,dive"`
|
RegOpts model.RegOpts `yaml:"regopts,omitempty" json:"regopts,omitempty" validate:"unique=Name,dive"`
|
||||||
Providers *model.Providers `yaml:"providers,omitempty" json:"providers,omitempty" validate:"required"`
|
Providers *model.Providers `yaml:"providers,omitempty" json:"providers,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load returns Config struct
|
// Load returns Config struct
|
||||||
func Load(cfgfile string) (*Config, error) {
|
func Load(cli model.Cli) (*Config, error) {
|
||||||
cfg := Config{
|
cfg := Config{
|
||||||
Db: (&model.Db{}).GetDefaults(),
|
Db: (&model.Db{}).GetDefaults(),
|
||||||
Watch: (&model.Watch{}).GetDefaults(),
|
Watch: (&model.Watch{}).GetDefaults(),
|
||||||
}
|
}
|
||||||
|
|
||||||
fileLoader := gonfig.NewFileLoader(gonfig.FileLoaderConfig{
|
fileLoader := gonfig.NewFileLoader(gonfig.FileLoaderConfig{
|
||||||
Filename: cfgfile,
|
Filename: cli.Cfgfile,
|
||||||
Finder: gonfig.Finder{
|
Finder: gonfig.Finder{
|
||||||
BasePaths: []string{"/etc/diun/diun", "$XDG_CONFIG_HOME/diun", "$HOME/.config/diun", "./diun"},
|
BasePaths: []string{"/etc/diun/diun", "$XDG_CONFIG_HOME/diun", "$HOME/.config/diun", "./diun"},
|
||||||
Extensions: []string{"yaml", "yml"},
|
Extensions: []string{"yaml", "yml"},
|
||||||
@@ -54,20 +54,28 @@ func Load(cfgfile string) (*Config, error) {
|
|||||||
log.Info().Msgf("Configuration loaded from %d environment variable(s)", len(envLoader.GetVars()))
|
log.Info().Msgf("Configuration loaded from %d environment variable(s)", len(envLoader.GetVars()))
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cfg.validate(); err != nil {
|
if err := cfg.validate(cli); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &cfg, nil
|
return &cfg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *Config) validate() error {
|
func (cfg *Config) validate(cli model.Cli) error {
|
||||||
if len(cfg.Db.Path) > 0 {
|
if len(cfg.Db.Path) > 0 {
|
||||||
if err := os.MkdirAll(path.Dir(cfg.Db.Path), os.ModePerm); err != nil {
|
if err := os.MkdirAll(path.Dir(cfg.Db.Path), os.ModePerm); err != nil {
|
||||||
return errors.Wrap(err, "Cannot create database destination folder")
|
return errors.Wrap(err, "Cannot create database destination folder")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cfg.Notif == nil && cli.TestNotif {
|
||||||
|
return errors.New("At least one notifier is required")
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.Providers == nil && !cli.TestNotif {
|
||||||
|
return errors.New("At least one provider is required")
|
||||||
|
}
|
||||||
|
|
||||||
return validator.New().Struct(cfg)
|
return validator.New().Struct(cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package db
|
package db
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/crazy-max/diun/v4/internal/model"
|
"github.com/crazy-max/diun/v4/internal/model"
|
||||||
|
"github.com/pkg/errors"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
bolt "go.etcd.io/bbolt"
|
bolt "go.etcd.io/bbolt"
|
||||||
)
|
)
|
||||||
@@ -52,7 +52,7 @@ func New(cfg model.Db) (*Client, error) {
|
|||||||
log.Debug().Msgf("%d entries found in manifest bucket", stats.KeyN)
|
log.Debug().Msgf("%d entries found in manifest bucket", stats.KeyN)
|
||||||
return nil
|
return nil
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return nil, fmt.Errorf("cannot count entries in manifest bucket, %v", err)
|
return nil, errors.Wrap(err, "Cannot count entries in manifest bucket")
|
||||||
}
|
}
|
||||||
|
|
||||||
c := &Client{
|
c := &Client{
|
||||||
|
|||||||
Reference in New Issue
Block a user