Hack must go on
authorAleksander Mistewicz <a.mistewicz@samsung.com>
Wed, 13 Dec 2017 19:19:24 +0000 (20:19 +0100)
committerPawel Wieczorek <p.wieczorek2@samsung.com>
Fri, 5 Jan 2018 14:23:57 +0000 (15:23 +0100)
Use URI instead of Path as argument to fota.
Remember: NanoPi must have access to the host
Properly quote fota.json
Print stderr when command fails

Change-Id: I178a2f3f5bb35afad79de67a93a176d84366026b

manager/dryad/dryad_session_provider.go
manager/dryad_job_runner.go
manager/dryad_job_runner_fota.go

index d633a60..d53ed47 100644 (file)
@@ -22,6 +22,7 @@ import (
        "bytes"
        "fmt"
        "io"
+       "log"
        "os"
        "path/filepath"
        "strings"
@@ -83,6 +84,7 @@ func (d *sessionProvider) newSession() (*ssh.Session, error) {
 }
 
 func (d *sessionProvider) executeRemoteCommand(cmd string) ([]byte, []byte, error) {
+       log.Println("exec:", cmd)
        session, err := d.newSession()
        if err != nil {
                return nil, nil, err
@@ -94,6 +96,9 @@ func (d *sessionProvider) executeRemoteCommand(cmd string) ([]byte, []byte, erro
        session.Stderr = &stderr
 
        err = session.Run(cmd)
+       if err != nil {
+               log.Println(stderr.String())
+       }
        return stdout.Bytes(), stderr.Bytes(), err
 }
 
@@ -157,6 +162,7 @@ func (d *sessionProvider) Close() error {
 
 // SendFile is a part of SessionProvider interface.
 func (d *sessionProvider) SendFile(src, dst string) error {
+       log.Println("send a file", src, "->", dst)
        f, err := os.Open(src)
        if err != nil {
                return err
@@ -221,6 +227,7 @@ func (d *sessionProvider) SendFile(src, dst string) error {
 
 // ReceiveFile is a part of SessionProvider interface.
 func (d *sessionProvider) ReceiveFile(src, dst string) error {
+       log.Println("receiving a file", src, "->", dst)
        session, err := d.newSession()
        if err != nil {
                return err
index 2132b77..3c95d59 100644 (file)
@@ -62,7 +62,7 @@ func (d *dryadJobRunner) Deploy() (err error) {
        // Generate partition mapping for FOTA and store it on Dryad.
        urls := make([]string, 0, len(d.conf.Action.Deploy.Images))
        for _, image := range d.conf.Action.Deploy.Images {
-               if p := image.Path; p != "" {
+               if p := image.URI; p != "" {
                        urls = append(urls, p)
                }
        }
@@ -74,7 +74,7 @@ func (d *dryadJobRunner) Deploy() (err error) {
 
        }
        mapping := newMapping(partLayout)
-       _, _, err = d.rusalka.Exec([]string{"echo", string(mapping), ">", fotaFilePath})
+       _, _, err = d.rusalka.Exec([]string{"echo", "'" + string(mapping) + "'", ">", fotaFilePath})
        if err != nil {
                return
        }
index ecca69e..25a8e34 100644 (file)
@@ -48,9 +48,9 @@ func (f *fotaCmd) SetMD5(url string) {
 }
 
 func (f *fotaCmd) GetCmd() (cmd []string) {
-       cmd = []string{"fota",
+       cmd = []string{"/usr/local/bin/fota",
                "-map", f.mapping,
-               "-sdcard", f.sdcard}
+               "-card", f.sdcard}
        if f.md5sums != "" {
                cmd = append(cmd, "-md5")
                cmd = append(cmd, f.md5sums)