Merge lp:~mvo/snappy-hub/snappy-examples-config-bash into lp:~snappy-dev/snappy-hub/snappy-examples

Proposed by Michael Vogt
Status: Merged
Merged at revision: 32
Proposed branch: lp:~mvo/snappy-hub/snappy-examples-config-bash
Merge into: lp:~snappy-dev/snappy-hub/snappy-examples
Prerequisite: lp:~mvo/snappy-hub/snappy-examples-config-example
Diff against target: 638 lines (+605/-0)
6 files modified
config-example-bash/bin/hello (+24/-0)
config-example-bash/meta/hello.svg (+501/-0)
config-example-bash/meta/hooks/config (+24/-0)
config-example-bash/meta/hooks/snappy-yaml-helper (+40/-0)
config-example-bash/meta/package.yaml (+7/-0)
config-example-bash/meta/readme.md (+9/-0)
To merge this branch: bzr merge lp:~mvo/snappy-hub/snappy-examples-config-bash
Reviewer Review Type Date Requested Status
Snappy Developers Pending
Review via email: mp+249978@code.launchpad.net

Description of the change

This branch adds a config example for bash.

To post a comment you must log in.
25. By Michael Vogt

fix invocation with empty input and no message

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'config-example-bash'
2=== added directory 'config-example-bash/bin'
3=== added file 'config-example-bash/bin/hello'
4--- config-example-bash/bin/hello 1970-01-01 00:00:00 +0000
5+++ config-example-bash/bin/hello 2015-02-24 13:06:59 +0000
6@@ -0,0 +1,24 @@
7+#!/bin/sh
8+
9+if [ -e ${SNAP_APP_DATA_PATH}/message ]; then
10+ cat ${SNAP_APP_DATA_PATH}/message
11+else
12+ cat <<EOF2
13+Hello from the bash config example!
14+
15+You can configure this message by running:
16+
17+$ cat > cfg.yaml <<'EOF'
18+config:
19+ config-example-bash:
20+ msg: |
21+ Yay!
22+EOF
23+$ sudo snappy config config-example-bash cfg.yaml
24+
25+
26+The message you set there is then displayed when running:
27+$ hello.config-example-bash
28+
29+EOF2
30+fi
31
32=== added directory 'config-example-bash/meta'
33=== added file 'config-example-bash/meta/hello.svg'
34--- config-example-bash/meta/hello.svg 1970-01-01 00:00:00 +0000
35+++ config-example-bash/meta/hello.svg 2015-02-24 13:06:59 +0000
36@@ -0,0 +1,501 @@
37+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
38+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
39+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
40+<svg width="256" height="256">
41+ <image id="image0" width="256" height="256" x="0" y="0"
42+ xlink:href="data:image/png;base64,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" />
537+</svg>
538
539=== added directory 'config-example-bash/meta/hooks'
540=== added file 'config-example-bash/meta/hooks/config'
541--- config-example-bash/meta/hooks/config 1970-01-01 00:00:00 +0000
542+++ config-example-bash/meta/hooks/config 2015-02-24 13:06:59 +0000
543@@ -0,0 +1,24 @@
544+#!/bin/sh
545+
546+set -e
547+
548+HELPER=$(dirname $0)/snappy-yaml-helper
549+
550+# read stdin with the "ypath" helper (if there is any input)
551+CFG="$($HELPER /config/${SNAP_NAME}/msg 2>/dev/null || true)"
552+if [ -n "$CFG" ]; then
553+ printf "$CFG" > ${SNAP_APP_DATA_PATH}/message
554+fi
555+
556+# read existing message
557+if [ -e "${SNAP_APP_DATA_PATH}/message" ]; then
558+ msg=$(cat ${SNAP_APP_DATA_PATH}/message)
559+fi
560+
561+# output current ocnfig
562+cat <<EOF
563+config:
564+ ${SNAP_NAME}:
565+ msg: |
566+ $msg
567+EOF
568
569=== added file 'config-example-bash/meta/hooks/snappy-yaml-helper'
570--- config-example-bash/meta/hooks/snappy-yaml-helper 1970-01-01 00:00:00 +0000
571+++ config-example-bash/meta/hooks/snappy-yaml-helper 2015-02-24 13:06:59 +0000
572@@ -0,0 +1,40 @@
573+#!/usr/bin/python3
574+
575+import sys
576+import yaml
577+
578+
579+class ParseError(Exception):
580+ pass
581+
582+
583+# maybe that name is a bit too grande ;)
584+def parse_ypath(data, expr):
585+ if not expr.startswith("/"):
586+ raise ParseError("Only support absolute paths, got {}".format(expr))
587+ path = expr[1:].split("/")
588+ sub = data
589+ for elm in path:
590+ sub = sub[elm]
591+ return sub
592+
593+
594+if __name__ == "__main__":
595+ if len(sys.argv) < 2:
596+ print("""Needs a path like /config/pkgname/key
597+
598+Example usage:
599+$ printf "config:\\n example:\\n msg: foo "| {} /config/example/msg
600+ """.format(sys.argv[0]))
601+ sys.exit(1)
602+
603+ # read stdin
604+ input = sys.stdin.read()
605+ data = yaml.safe_load(input)
606+
607+ # parse
608+ term = sys.argv[1]
609+ out = parse_ypath(data, term)
610+
611+ # and write it out
612+ print(out)
613
614=== added file 'config-example-bash/meta/package.yaml'
615--- config-example-bash/meta/package.yaml 1970-01-01 00:00:00 +0000
616+++ config-example-bash/meta/package.yaml 2015-02-24 13:06:59 +0000
617@@ -0,0 +1,7 @@
618+name: config-example-bash
619+version: 1.0
620+vendor: Michael Vogt <mvo@ubuntu.com>
621+icon: meta/hello.svg
622+binaries:
623+ - name: bin/hello
624+
625
626=== added file 'config-example-bash/meta/readme.md'
627--- config-example-bash/meta/readme.md 1970-01-01 00:00:00 +0000
628+++ config-example-bash/meta/readme.md 2015-02-24 13:06:59 +0000
629@@ -0,0 +1,9 @@
630+Configuration example
631+
632+This is a simple example to how how to write a configure hook with bash.
633+
634+Run:
635+
636+ hello.config-example-bash
637+
638+for usage instructions.

Subscribers

People subscribed via source and target branches