Compare commits

..

No commits in common. "827e4398d7297d74ecebc775170f1dbf182bdce0" and "ff17645c625526897dc83c6a38d4a8e718bdeadf" have entirely different histories.

3 changed files with 20 additions and 44 deletions

View file

@ -35,19 +35,15 @@ func main() {
defer db.Close() defer db.Close()
if *start { if *start {
if err := metadata.StartMetadata(metadata.NoCloudConfig{ metadata.StartMetadata(metadata.NoCloudConfig{
VpcName: *vpc, VpcName: *vpc,
Name: *vm_name, Name: *vm_name,
BindIP: *bind_ip, BindIP: *bind_ip,
BindPort: *bind_port, BindPort: *bind_port,
Password: *password, Password: *password,
SSHKEY: *ssh_key, SSHKEY: *ssh_key,
}, db, *dryrun); err != nil { }, db, *dryrun)
fmt.Println(err)
}
} else if *stop { } else if *stop {
if err := metadata.StopMetadata(*vm_name, db, *dryrun); err != nil { metadata.StopMetadata(*vm_name, db, *dryrun)
fmt.Println(err)
}
} }
} }

View file

@ -1,41 +1,26 @@
package metadata package metadata
import ( import (
"fmt"
"git.g3e.fr/syonad/two/pkg/systemd" "git.g3e.fr/syonad/two/pkg/systemd"
"github.com/dgraph-io/badger/v4" "github.com/dgraph-io/badger/v4"
) )
func StartMetadata(config NoCloudConfig, db *badger.DB, dryrun bool) error { func StartMetadata(config NoCloudConfig, db *badger.DB, dryrun bool) {
service, err := systemd.New() service, _ := systemd.New()
if err != nil {
return fmt.Errorf("failed to connect to systemd: %w", err)
}
defer service.Close() defer service.Close()
LoadNcCloudInDB(config, db) LoadNcCloudInDB(config, db)
if !dryrun { if !dryrun {
fmt.Println("try to start metadata server") service.Start("metadata@" + config.Name)
if err := service.Start("metadata@" + config.Name + ".service"); err != nil {
return fmt.Errorf("failed to start metadata@%s: %w", config.Name, err)
} }
}
return nil
} }
func StopMetadata(vm_name string, db *badger.DB, dryrun bool) error { func StopMetadata(vm_name string, db *badger.DB, dryrun bool) {
service, err := systemd.New() service, _ := systemd.New()
if err != nil {
return fmt.Errorf("failed to connect to systemd: %w", err)
}
defer service.Close() defer service.Close()
UnLoadNoCloudInDB(vm_name, db) UnLoadNoCloudInDB(vm_name, db)
if !dryrun { if !dryrun {
if err := service.Stop("metadata@" + vm_name + ".service"); err != nil { service.Stop("metadata@" + vm_name)
return fmt.Errorf("failed to stop metadata@%s: %w", vm_name, err)
} }
}
return nil
} }

View file

@ -11,7 +11,6 @@ import (
const ( const (
defaultTimeout = 5 * time.Second defaultTimeout = 5 * time.Second
jobTimeout = 30 * time.Second
jobMode = "replace" jobMode = "replace"
) )
@ -29,7 +28,10 @@ type ServiceStatus struct {
// New crée une connexion D-Bus systemd (scope système) // New crée une connexion D-Bus systemd (scope système)
func New() (*Manager, error) { func New() (*Manager, error) {
conn, err := dbus.NewSystemConnectionContext(context.Background()) ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout)
defer cancel()
conn, err := dbus.NewSystemConnectionContext(ctx)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -55,17 +57,17 @@ func (m *Manager) Stop(service string) error {
} }
func (m *Manager) job(method, service string) error { func (m *Manager) job(method, service string) error {
callCtx, callCancel := context.WithTimeout(context.Background(), defaultTimeout) ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout)
defer callCancel() defer cancel()
ch := make(chan string, 1) ch := make(chan string, 1)
var err error var err error
switch method { switch method {
case "StartUnit": case "StartUnit":
_, err = m.conn.StartUnitContext(callCtx, service, jobMode, ch) _, err = m.conn.StartUnitContext(ctx, service, jobMode, ch)
case "StopUnit": case "StopUnit":
_, err = m.conn.StopUnitContext(callCtx, service, jobMode, ch) _, err = m.conn.StopUnitContext(ctx, service, jobMode, ch)
default: default:
return errors.New("unsupported job method") return errors.New("unsupported job method")
} }
@ -74,17 +76,10 @@ func (m *Manager) job(method, service string) error {
return err return err
} }
waitCtx, waitCancel := context.WithTimeout(context.Background(), jobTimeout) result := <-ch
defer waitCancel()
select {
case result := <-ch:
if result != "done" { if result != "done" {
return fmt.Errorf("%s %s failed: %s", method, service, result) return fmt.Errorf("%s %s failed: %s", method, service, result)
} }
case <-waitCtx.Done():
return fmt.Errorf("%s %s timed out after %s", method, service, jobTimeout)
}
return nil return nil
} }