Initial import of charm layer to deploy and configure OpenMano 05/505/1
authorAdam Israel <adam.israel@canonical.com>
Tue, 4 Oct 2016 19:07:16 +0000 (12:07 -0700)
committerAdam Israel <adam.israel@canonical.com>
Tue, 4 Oct 2016 19:07:16 +0000 (12:07 -0700)
Signed-off-by: Adam Israel <adam.israel@canonical.com>
14 files changed:
charms/.gitignore [new file with mode: 0644]
charms/README.md [new file with mode: 0644]
charms/layers/openmano/README.md [new file with mode: 0644]
charms/layers/openmano/config.yaml [new file with mode: 0644]
charms/layers/openmano/icon.svg [new file with mode: 0644]
charms/layers/openmano/layer.yaml [new file with mode: 0644]
charms/layers/openmano/metadata.yaml [new file with mode: 0644]
charms/layers/openmano/reactive/layer_openmano.py [new file with mode: 0644]
charms/layers/openmano/scripts/create-datacenter.sh [new file with mode: 0755]
charms/layers/openmano/scripts/create-tenant.sh [new file with mode: 0755]
charms/layers/openmano/scripts/init_mano_db.sh [new file with mode: 0755]
charms/layers/openmano/templates/openmanod.cfg [new file with mode: 0644]
charms/layers/openmano/tests/00-setup [new file with mode: 0755]
charms/layers/openmano/tests/10-deploy [new file with mode: 0755]

diff --git a/charms/.gitignore b/charms/.gitignore
new file mode 100644 (file)
index 0000000..9f751ef
--- /dev/null
@@ -0,0 +1,2 @@
+deps/
+builds/
diff --git a/charms/README.md b/charms/README.md
new file mode 100644 (file)
index 0000000..69df3a9
--- /dev/null
@@ -0,0 +1,93 @@
+# Juju Charm(s) for deploying OpenMano
+
+## Overview
+These are the charm layers used to build Juju charms for deploying OpenVIM components. These charms are also published to the [Juju Charm Store](https://jujucharms.com/) and can be deployed directly from there using the [etsi-osm](https://jujucharms.com/u/nfv/osm-r1), or they can be build from these layers and deployed locally.
+
+## Building the OpenVIM Charms
+
+To build these charms, you will need [charm-tools][]. You should also read
+over the developer [Getting Started][] page for an overview of charms and
+building them. Then, in any of the charm layer directories, use `charm build`.
+For example:
+
+    (setup environment to build from layers)
+    mkdir src
+    cd src
+    git clone https://github.com/nfvlabs/openvim.git
+    export JUJU_REPOSITORY=$HOME/src/openvim/charms
+    export INTERFACE_PATH=$JUJU_REPOSITORY/interfaces
+    export LAYER_PATH=$JUJU_REPOSITORY/layers
+
+    cd $LAYER_PATH/openvim
+    charm build
+
+    cd $LAYER_PATH/openvim-compute
+    charm build
+
+This will build the OpenVIM controller and OpenVIM compute charms, pulling in
+ the appropriate base and interface layers from [interfaces.juju.solutions][], and place the resulting charms into $JUJU_REPOSITORY/builds.
+
+You can also use the local version of a bundle:
+
+    juju deploy openvim/charms/bundles/openmano.yaml
+
+To publish:
+
+    # You will need an account on Launchpad, and have it added to the ~nfv
+    # namespace. Please contact foo@bar for these permissions.
+    $ charm login
+
+    $ cd $JUJU_REPOSITORY/builds/openvim
+
+    # `charm push` will upload the charm into the store and report the revision
+    # of the latest push.
+    $ charm push . cs:~nfv/openvim
+    blah blah cs:~nfv/openvim-4
+
+    # Release the charm so that it is publicly consumable
+    $ charm release cs:~nfv/openvim-4
+
+    $ cd $JUJU_REPOSITORY/builds/openvim-compute
+
+    # `charm push` will upload the charm into the store and report the revision
+    # of the latest push.
+    $ charm push . cs:~nfv/openvim-compute
+    blah blah cs:~nfv/openvim-compute-4
+
+    # Release the charm so that it is publicly consumable
+    $ charm release cs:~nfv/openvim-compute-4
+
+    # Finally, update and publish the bundle to point to the latest revision(s):
+
+    cd $JUJU_REPOSITORY/bundles/openmano
+
+    # Edit the `README.md` to reflect any notable changes.
+
+    # Edit the `bundle.yaml` with the new revision to be deployed, i.e., change cs:~nfv/openvim-3 to cs:~nfv/openvim-4
+
+    $ charm push . cs:~nfv/bundle/osm-r1
+    blah blah cs:~nfv/bundle/osm-r1-4
+
+    $ charm release cs:~nfv/bundle/osm-r1-4
+
+To deploy the published charms from the charm store:
+
+    # The recommended method
+    $ charm deploy cs:~nfv/bundles/openmano
+
+    - or -
+
+    # The manual method
+    $ juju deploy cs:~nfv/openvim
+    $ juju deploy cs:~nfv/openvim-compute
+    $ juju deploy cs:~nfv/openmano
+    $ juju deploy cs:mariadb
+
+    $ juju add-relation mariadb openvim
+    $ juju add-relation mariadb openmano
+    $ juju add-relation openvim openvim-compute
+    $ juju add-relation openvim openmano
+
+[charm-tools]: https://jujucharms.com/docs/stable/tools-charm-tools
+[Getting Started]: https://jujucharms.com/docs/devel/developer-getting-started
+[interfaces.juju.solutions]: http://interfaces.juju.solutions/
diff --git a/charms/layers/openmano/README.md b/charms/layers/openmano/README.md
new file mode 100644 (file)
index 0000000..99b1fe5
--- /dev/null
@@ -0,0 +1,3 @@
+# Overview
+
+Deploys OpenMANO.
diff --git a/charms/layers/openmano/config.yaml b/charms/layers/openmano/config.yaml
new file mode 100644 (file)
index 0000000..6c8e250
--- /dev/null
@@ -0,0 +1,9 @@
+options:
+  repository:
+    type: string
+    default: "https://osm.etsi.org/gerrit/osm/RO.git"
+    description: "The Git repository to install OpenMano from."
+  branch:
+    type: string
+    default: "master"
+    description: "The Git branch to install."
diff --git a/charms/layers/openmano/icon.svg b/charms/layers/openmano/icon.svg
new file mode 100644 (file)
index 0000000..3503615
--- /dev/null
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="96"
+   height="96"
+   id="svg6517"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="icon.svg">
+  <defs
+     id="defs6519">
+    <linearGradient
+       id="Background-0">
+      <stop
+         style="stop-color:#b8b8b8;stop-opacity:1"
+         offset="0"
+         id="stop4245" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.98039216"
+         offset="1"
+         id="stop4247" />
+    </linearGradient>
+    <linearGradient
+       id="Background">
+      <stop
+         id="stop4178"
+         offset="0"
+         style="stop-color:#b8b8b8;stop-opacity:1" />
+      <stop
+         id="stop4180"
+         offset="1"
+         style="stop-color:#c9c9c9;stop-opacity:1" />
+    </linearGradient>
+    <filter
+       style="color-interpolation-filters:sRGB;"
+       inkscape:label="Inner Shadow"
+       id="filter1121">
+      <feFlood
+         flood-opacity="0.59999999999999998"
+         flood-color="rgb(0,0,0)"
+         result="flood"
+         id="feFlood1123" />
+      <feComposite
+         in="flood"
+         in2="SourceGraphic"
+         operator="out"
+         result="composite1"
+         id="feComposite1125" />
+      <feGaussianBlur
+         in="composite1"
+         stdDeviation="1"
+         result="blur"
+         id="feGaussianBlur1127" />
+      <feOffset
+         dx="0"
+         dy="2"
+         result="offset"
+         id="feOffset1129" />
+      <feComposite
+         in="offset"
+         in2="SourceGraphic"
+         operator="atop"
+         result="composite2"
+         id="feComposite1131" />
+    </filter>
+    <filter
+       style="color-interpolation-filters:sRGB;"
+       inkscape:label="Drop Shadow"
+       id="filter950">
+      <feFlood
+         flood-opacity="0.25"
+         flood-color="rgb(0,0,0)"
+         result="flood"
+         id="feFlood952" />
+      <feComposite
+         in="flood"
+         in2="SourceGraphic"
+         operator="in"
+         result="composite1"
+         id="feComposite954" />
+      <feGaussianBlur
+         in="composite1"
+         stdDeviation="1"
+         result="blur"
+         id="feGaussianBlur956" />
+      <feOffset
+         dx="0"
+         dy="1"
+         result="offset"
+         id="feOffset958" />
+      <feComposite
+         in="SourceGraphic"
+         in2="offset"
+         operator="over"
+         result="composite2"
+         id="feComposite960" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath873">
+      <g
+         transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
+         id="g875"
+         inkscape:label="Layer 1"
+         style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
+        <path
+           style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
+           d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
+           id="path877"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="sssssssss" />
+      </g>
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter891"
+       inkscape:label="Badge Shadow">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.71999962"
+         id="feGaussianBlur893" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4.0745362"
+     inkscape:cx="119.38505"
+     inkscape:cy="39.201101"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1600"
+     inkscape:window-height="876"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     showborder="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:showpageshadow="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid821" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="16,48"
+       id="guide823" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="64,80"
+       id="guide825" />
+    <sodipodi:guide
+       orientation="1,0"
+       position="80,40"
+       id="guide827" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="64,16"
+       id="guide829" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata6522">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="BACKGROUND"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(268,-635.29076)"
+     style="display:inline">
+    <path
+       style="display:inline;fill:#d0ffff;fill-opacity:1;stroke:none;filter:url(#filter1121)"
+       d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 c -27.21517,0 -31.10302,-3.89189 -31.10302,-31.13514 z"
+       id="path6455"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="sssssssss" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="PLACE YOUR PICTOGRAM HERE"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <image
+       y="19.840546"
+       x="15"
+       id="image3432"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2MAAALTCAYAAACbjNrIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURB VHic7N1pmFXVlTfw/9rn1sQkoDgBVQXibDSKsyYWQ40IMbGr4myMA4lJzNx5+83b3TdDJ51Od9JJ xyiTRAKFXXS6k6iFUIVFOo5RMhmSmKCC4ogiMlfde/Z6PwCGIEMN55y1zz7r96GfJ0/DOX+suvfs dfbeawNKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop pZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWU UkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJK KaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSiml lFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRS SimllFJKKaWUUkoppZSzSDqAUiob8vm8qbz48ZOKCE+H5aMM0REgLmGLzUTUYwkvM9t1AJ5/OVd8 KT9pZVE6s1LKIzVdufFDNxxbLBQribgKMMcAtpRghjHbAhu8bti8woZ+u+6cPz6NfN5KR1ZK+U+L MaVUbO5qbxwVlobvB9MHAL4QwNBe/tUigLUMftqweZoNP22JnsRhrz818+xVhRgjK6VSbuLEWSUb jh5yOiwmEtOJIJwE0AkAVwPI9fIyW0B4nBkduVzunmfvbXk+xshKqQzTYkylynfbG8ty1gwqGWwH B2GhlIvB0GIJghION3WT7eYdFduP2D5oc0vLklA6a5bNWlF/lmHOg9EEIIjw0jvA+BUDPwuMufeF h85/PK9vr5XKtua2oGp7eB6HfCkBl4BwFoDyCO9gCbgPxP+4tv3qX0d4XdVXzW1B5fbCMEslgwwX yqgYDDdAGObCLaHlnsDQtlI7YvuapU3d0lGV6i0txpTT2tqaSzeNfKuZQO8j8DnMqARgevFXQyK8 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 7sf8xOzDS8G8r+DxheC+L9/9B2kuUQFQhM1dK89QiB/0YIvkmiP5WXKbqmDTJD8u92Oy8KrkeY/+ 9OQQH2d3RIyVu+yOrssWZGt8nmJcYMHmST4zRptlwTL6RaHWL/dhMz8iWb/c8jF4b6bgvZ9a0fPi W+5HxLsOxRiQsLSKMQAAAIwvbOABAAAAACmgGAMAAACAFFCMAQAAAEAKKMYAAAAAIAUUYwAAAACQ AooxAAAAAEgBxRgAAAAApIBiDAAAAABSQDEGAAAAACmgGAMAAACAFFCMAQAAAEAKKMYAAAAAIAUU YwAAAACQAooxAAAAAEgBxRgAAAAApIBiDAAAAABSQDEGAAAAACmgGAMAAACAFFCMAQAAAEAKKMaA 5I1USRsAAACoYhRjQMLctK3kNuQ9SWQBAABA9aIYAxLWV5v9omR/Ktme4q+2Peb6/PS6muuSTwYA AIBqYmkHACayc1f924IY9QELdpa717pUGxRmS5LcD0fTgMkG3Ao/s5H4RD639rmUIwMAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA APwflgAxUsonrkcAAAAASUVORK5CYII= "
+       preserveAspectRatio="none"
+       height="54.204151"
+       width="65" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="BADGE"
+     style="display:none"
+     sodipodi:insensitive="true">
+    <g
+       style="display:inline"
+       transform="translate(-340.00001,-581)"
+       id="g4394"
+       clip-path="none">
+      <g
+         id="g855">
+        <g
+           inkscape:groupmode="maskhelper"
+           id="g870"
+           clip-path="url(#clipPath873)"
+           style="opacity:0.6;filter:url(#filter891)">
+          <circle
+             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
+             id="path844"
+             style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"
+             cx="252"
+             cy="552.36218"
+             r="12" />
+        </g>
+        <g
+           id="g862">
+          <circle
+             style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"
+             id="path4398"
+             transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)"
+             cx="252"
+             cy="552.36218"
+             r="12" />
+          <circle
+             transform="matrix(1.25,0,0,1.25,33,-100.45273)"
+             id="path4400"
+             style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"
+             cx="252"
+             cy="552.36218"
+             r="12" />
+          <path
+             sodipodi:type="star"
+             style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"
+             id="path4459"
+             sodipodi:sides="5"
+             sodipodi:cx="666.19574"
+             sodipodi:cy="589.50385"
+             sodipodi:r1="7.2431178"
+             sodipodi:r2="4.3458705"
+             sodipodi:arg1="1.0471976"
+             sodipodi:arg2="1.6755161"
+             inkscape:flatsided="false"
+             inkscape:rounded="0.1"
+             inkscape:randomized="0"
+             d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z"
+             transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/charms/layers/openmano/layer.yaml b/charms/layers/openmano/layer.yaml
new file mode 100644 (file)
index 0000000..469e7f3
--- /dev/null
@@ -0,0 +1,26 @@
+includes:
+  - 'layer:basic'
+  - 'interface:mysql'
+  - 'interface:openvim'
+  - 'interface:http'
+
+options:
+  basic:
+    packages:
+        - python-yaml
+        - python-bottle
+        - python-mysqldb
+        - python-jsonschema
+        - python-paramiko
+        - python-argcomplete
+        - python-requests
+        - python3-git
+
+        # These are for openstack as a VIM
+        # - python-novaclient
+        # - python-keystoneclient
+        # - python-glanceclient
+        # - python-neutronclient
+
+        # mysql client needed to install database
+        - mariadb-client
diff --git a/charms/layers/openmano/metadata.yaml b/charms/layers/openmano/metadata.yaml
new file mode 100644 (file)
index 0000000..f8b5c99
--- /dev/null
@@ -0,0 +1,21 @@
+name: openmano
+summary: OpenMANO
+maintainers:
+  - Adam Israel <adam@adamisrael.com>
+description: |
+  Installs and configures OpenMANO
+tags:
+  - nfv
+  - telco
+  - osm
+series:
+  - xenial
+subordinate: false
+requires:
+  db:
+    interface: mysql
+  openvim-controller:
+    interface: openvim
+provides:
+  openmano:
+    interface: http
diff --git a/charms/layers/openmano/reactive/layer_openmano.py b/charms/layers/openmano/reactive/layer_openmano.py
new file mode 100644 (file)
index 0000000..96bd420
--- /dev/null
@@ -0,0 +1,234 @@
+from git import Repo as gitrepo
+from shutil import rmtree
+
+import os
+import subprocess
+
+from charmhelpers.core import host
+from charmhelpers.core import hookenv
+from charmhelpers.core import templating
+from charmhelpers.core.unitdata import kv
+from charmhelpers.core.hookenv import (
+    config,
+    log,
+    open_port,
+    status_set,
+)
+
+from charmhelpers.core.host import (
+    chownr,
+)
+
+from charms.reactive import (
+    when,
+    when_not,
+    set_state,
+    is_state,
+)
+
+kvdb = kv()
+
+INSTALL_PATH = '/opt/openmano'
+USER = 'openmanod'
+
+
+@when('openmano.installed')
+@when('openmano.available')
+def openmano_available(openmano):
+    # TODO make this configurable via charm config
+    openmano.configure(port=9090)
+
+
+@when('openmano.installed')
+@when('db.available', 'db.installed')
+@when('openvim-controller.available')
+@when('openmano.running')
+def openvim_available(openvim, db):
+    for service in openvim.services():
+        for endpoint in service['hosts']:
+            host = endpoint['hostname']
+            port = endpoint['port']
+            user = endpoint['user']
+
+            openvim_uri = '{}:{}'.format(host, port)
+            if kvdb.get('openvim_uri') == openvim_uri:
+                return
+
+            import pdb; pdb.set_trace()
+            # TODO: encapsulate the logic in create-datacenter.sh into python
+            try:
+                cmd = './scripts/create-datacenter.sh {} {} {} {}'.format(
+                    host, port, user, kvdb.get('openmano-tenant'))
+                out, err = _run(cmd)
+            except subprocess.CalledProcessError as e:
+                # Ignore the error if the datacenter already exists.
+                if e.returncode != 153:
+                    raise
+
+            kvdb.set('openvim_uri', openvim_uri)
+            if not is_state('db.available'):
+                status_set('waiting', 'Waiting for database')
+            break
+        break
+
+
+@when('openmano.installed')
+@when('db.available', 'db.installed')
+@when('openvim-controller.available')
+@when_not('openmano.running')
+def start(*args):
+    # TODO: if the service fails to start, we should raise an error to the op
+    # Right now, it sets the state as running and the charm dies. Because
+    # service-openmano returns 0 when it fails.
+    cmd = "/home/{}/bin/service-openmano start".format(USER)
+    out, err = _run(cmd)
+
+    if not kvdb.get('openmano-tenant'):
+        out, err = _run('./scripts/create-tenant.sh')
+        kvdb.set('openmano-tenant', out.strip())
+
+    status_set(
+        'active',
+        'Up on {host}:{port}'.format(
+            host=hookenv.unit_public_ip(),
+            port='9090'))
+
+    set_state('openmano.running')
+
+
+@when('openmano.installed')
+@when('db.available')
+@when_not('db.installed')
+def setup_db(db):
+    """Setup the database
+
+    """
+    db_uri = 'mysql://{}:{}@{}:{}/{}'.format(
+        db.user(),
+        db.password(),
+        db.host(),
+        db.port(),
+        db.database(),
+    )
+
+    if kvdb.get('db_uri') == db_uri:
+        # We're already configured
+        return
+
+    status_set('maintenance', 'Initializing database')
+
+    try:
+        # HACK: use a packed version of init_mano_db until bug https://osm.etsi.org/bugzilla/show_bug.cgi?id=56 is fixed
+        # cmd = "{}/database_utils/init_mano_db.sh --createdb ".format(kvdb.get('repo'))
+        cmd = "./scripts//init_mano_db.sh --createdb "
+        cmd += "-u {} -p{} -h {} -d {} -P {}".format(
+            db.user(),
+            db.password(),
+            db.host(),
+            db.database(),
+            db.port(),
+        )
+        output, err = _run(cmd)
+    except subprocess.CalledProcessError:
+        # Eat this. init_mano_db.sh will return error code 1 on success
+        pass
+
+    context = {
+        'user': db.user(),
+        'password': db.password(),
+        'host': db.host(),
+        'database': db.database(),
+        'port': db.port(),
+    }
+    templating.render(
+        'openmanod.cfg',
+        os.path.join(kvdb.get('repo'), 'openmanod.cfg'),
+        context,
+        owner=USER,
+        group=USER,
+    )
+    kvdb.set('db_uri', db_uri)
+
+    status_set('active', 'Database installed.')
+    set_state('db.installed')
+
+@when_not('openvim-controller.available')
+def need_openvim():
+    status_set('waiting', 'Waiting for OpenVIM')
+
+
+@when_not('db.available')
+def need_db():
+    status_set('waiting', 'Waiting for database')
+
+
+@when_not('db.available')
+@when_not('openvim-controller.available')
+def need_everything():
+    status_set('waiting', 'Waiting for database and OpenVIM')
+
+
+@when_not('openmano.installed')
+def install_layer_openmano():
+    status_set('maintenance', 'Installing')
+
+    cfg = config()
+
+    # TODO change user home
+    # XXX security issue!
+    host.adduser(USER, password=USER)
+
+    if os.path.isdir(INSTALL_PATH):
+        rmtree(INSTALL_PATH)
+
+    gitrepo.clone_from(
+        cfg['repository'],
+        INSTALL_PATH,
+        branch=cfg['branch'],
+    )
+
+    chownr(
+        INSTALL_PATH,
+        owner=USER,
+        group=USER,
+        follow_links=False,
+        chowntopdir=True
+    )
+
+    os.mkdir(os.path.join(INSTALL_PATH, 'logs'))
+    chownr(INSTALL_PATH, USER, USER)
+    kvdb.set('repo', INSTALL_PATH)
+
+    os.mkdir('/home/{}/bin'.format(USER))
+
+    os.symlink(
+        "{}/openmano".format(INSTALL_PATH),
+        "/home/{}/bin/openmano".format(USER))
+    os.symlink(
+        "{}/scripts/openmano-report.sh".format(INSTALL_PATH),
+        "/home/{}/bin/openmano-report.sh".format(USER))
+    os.symlink(
+        "{}/scripts/service-openmano.sh".format(INSTALL_PATH),
+        "/home/{}/bin/service-openmano".format(USER))
+
+    open_port(9090)
+    set_state('openmano.installed')
+
+
+def _run(cmd, env=None):
+    if isinstance(cmd, str):
+        cmd = cmd.split() if ' ' in cmd else [cmd]
+
+    log(cmd)
+    p = subprocess.Popen(cmd,
+                         env=env,
+                         stdout=subprocess.PIPE,
+                         stderr=subprocess.PIPE)
+    stdout, stderr = p.communicate()
+    retcode = p.poll()
+    if retcode > 0:
+        raise subprocess.CalledProcessError(
+            returncode=retcode,
+            cmd=cmd,
+            output=stderr.decode("utf-8").strip())
+    return (stdout.decode('utf-8'), stderr.decode('utf-8'))
diff --git a/charms/layers/openmano/scripts/create-datacenter.sh b/charms/layers/openmano/scripts/create-datacenter.sh
new file mode 100755 (executable)
index 0000000..4b192e4
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+HOME=/home/openmanod
+OPENMANO=$HOME/bin/openmano
+export OPENMANO_TENANT=$4
+
+OPENMANO_DATACENTER=`$OPENMANO datacenter-list myov`
+if [ $? -ne 0 ]; then
+    # Make sure the datacenter is deleted
+    $OPENMANO datacenter-delete myov
+    OPENMANO_DATACENTER=`$OPENMANO datacenter-create myov http://$1:$2/openvim`
+fi
+export OPENMANO_DATACENTER=`echo $OPENMANO_DATACENTER |gawk '{print $1}'`
+
+#export OPENMANO_DATACENTER=`$OPENMANO datacenter-create myov http://$1:$2/openvim |gawk '{print $1}'`
+# FIXME: don't add this to .bashrc if it already exists.
+if ! grep -q "^export OPENMANO_DATACENTER" $HOME/.bashrc
+then
+    echo "export OPENMANO_DATACENTER=$OPENMANO_DATACENTER " >> $HOME/.bashrc
+fi
+
+# TODO: Test idempotency. We may need to check and remove existing data
+$OPENMANO datacenter-attach myov --vim-tenant-id $3
+$OPENMANO datacenter-netmap-import -f --datacenter $OPENMANO_DATACENTER
diff --git a/charms/layers/openmano/scripts/create-tenant.sh b/charms/layers/openmano/scripts/create-tenant.sh
new file mode 100755 (executable)
index 0000000..1cb644c
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+OPENMANO=/home/openmanod/bin/openmano
+OPENMANO_TENANT=`$OPENMANO tenant-create mytenant --description=mytenant`
+if [ $? -ne 0 ]; then
+    OPENMANO_TENANT=`$OPENMANO tenant-list mytenant`
+fi
+echo $OPENMANO_TENANT |gawk '{print $1}'
diff --git a/charms/layers/openmano/scripts/init_mano_db.sh b/charms/layers/openmano/scripts/init_mano_db.sh
new file mode 100755 (executable)
index 0000000..9d8b158
--- /dev/null
@@ -0,0 +1,142 @@
+#!/bin/bash
+
+##
+# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
+# This file is part of openmano
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact with: nfvlabs@tid.es
+##
+
+DBUSER="mano"
+DBPASS=""
+DBHOST="localhost"
+DBPORT="3306"
+DBNAME="mano_db"
+CREATEDB=""
+
+# Detect paths
+MYSQL=$(which mysql)
+AWK=$(which awk)
+GREP=$(which grep)
+#DIRNAME=`dirname $0`
+DIRNAME=/opt/openmano/database_utils
+
+function usage(){
+    echo -e "Usage: $0 OPTIONS"
+    echo -e "  Inits openmano database; deletes previous one and loads from ${DBNAME}_structure.sql"
+    echo -e "  OPTIONS"
+    echo -e "     -u USER  database user. '$DBUSER' by default. Prompts if DB access fails"
+    echo -e "     -p PASS  database password. 'No password' by default. Prompts if DB access fails"
+    echo -e "     -P PORT  database port. '$DBPORT' by default"
+    echo -e "     -h HOST  database host. '$DBHOST' by default"
+    echo -e "     -d NAME  database name. '$DBNAME' by default.  Prompts if DB access fails"
+    echo -e "     --help   shows this help"
+    echo -e "     --createdb   forces the deletion and creation of the database"
+}
+
+while getopts ":u:p:P:d:h:-:" o; do
+    case "${o}" in
+        u)
+            DBUSER="$OPTARG"
+            ;;
+        p)
+            DBPASS="$OPTARG"
+            ;;
+        P)
+            DBPORT="$OPTARG"
+            ;;
+        d)
+            DBNAME="$OPTARG"
+            ;;
+        h)
+            DBHOST="$OPTARG"
+            ;;
+        -)
+            if [ "${OPTARG}" == "help" ]; then
+                usage && exit 0
+            elif [ "${OPTARG}" == "createdb" ]; then
+                CREATEDB="yes"
+            else
+                echo "Invalid option: --$OPTARG" >&2 && usage  >&2
+                exit 1
+            fi
+            ;;
+        \?)
+            echo "Invalid option: -$OPTARG" >&2 && usage  >&2
+            exit 1
+            ;;
+        :)
+            echo "Option -$OPTARG requires an argument." >&2 && usage  >&2
+            exit 1
+            ;;
+        *)
+            usage >&2
+            exit -1
+            ;;
+    esac
+done
+shift $((OPTIND-1))
+
+#check and ask for database user password
+DBUSER_="-u$DBUSER"
+DBPASS_=""
+[ -n "$DBPASS" ] && DBPASS_="-p$DBPASS"
+DBHOST_="-h$DBHOST"
+DBPORT_="-P$DBPORT"
+
+TEMPFILE="$(mktemp -q --tmpdir "initmanodb.XXXXXX")"
+trap 'rm -f "$TEMPFILE"' EXIT SIGINT SIGTERM
+chmod 0600 "$TEMPFILE"
+cat >"$TEMPFILE" <<EOF
+[client]
+user="${DBUSER}"
+password="${DBPASS}"
+EOF
+DEF_EXTRA_FILE_PARAM="--defaults-extra-file=$TEMPFILE"
+
+while !  mysql $DEF_EXTRA_FILE_PARAM $DBHOST_ $DBPORT_ -e "quit" >/dev/null 2>&1
+do
+        [ -n "$logintry" ] &&  echo -e "\nInvalid database credentials!!!. Try again (Ctrl+c to abort)"
+        [ -z "$logintry" ] &&  echo -e "\nProvide database credentials"
+#        read -e -p "mysql database name($DBNAME): " KK
+#        [ -n "$KK" ] && DBNAME="$KK"
+        read -e -p "mysql user($DBUSER): " KK
+        [ -n "$KK" ] && DBUSER="$KK"
+        read -e -s -p "mysql password: " DBPASS
+        cat >"$TEMPFILE" <<EOF
+[client]
+user="${DBUSER}"
+password="${DBPASS}"
+EOF
+        logintry="yes"
+        echo
+done
+
+if [ -n "${CREATEDB}" ]; then
+    echo "    deleting previous database ${DBNAME}"
+    echo "DROP DATABASE IF EXISTS ${DBNAME}" | mysql $DEF_EXTRA_FILE_PARAM $DBHOST_ $DBPORT_
+    echo "    creating database ${DBNAME}"
+    mysqladmin $DEF_EXTRA_FILE_PARAM  $DBHOST_ $DBPORT_ -s create ${DBNAME} || exit 1
+fi
+
+echo "    loading ${DIRNAME}/${DBNAME}_structure.sql"
+#echo 'mysql '$DEF_EXTRA_FILE_PARAM' '$DBHOST_' '$DBPORT_' '$DBNAME' < '${DIRNAME}'/mano_db_structure.sql'
+mysql $DEF_EXTRA_FILE_PARAM $DBHOST_ $DBPORT_ $DBNAME < ${DIRNAME}/mano_db_structure.sql
+
+echo "    migrage database version"
+${DIRNAME}/migrate_mano_db.sh $DBHOST_ $DBPORT_ $DBUSER_ $DBPASS_ -d$DBNAME
+
diff --git a/charms/layers/openmano/templates/openmanod.cfg b/charms/layers/openmano/templates/openmanod.cfg
new file mode 100644 (file)
index 0000000..3dab15c
--- /dev/null
@@ -0,0 +1,45 @@
+##
+# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
+# This file is part of openmano
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact with: nfvlabs@tid.es
+##
+
+#HTTP Server parameters (MANO API). IP address and port where openmanod listens
+# IPtables/firewalld must allow this port
+# for CentOS/Redhad firewalld is configured at '/etc/firewalld/services/openmanod.xml'
+# edit this file and reload firewalld with 'firewall-cmd --reload' if port is changed
+http_host:       0.0.0.0      # IP address, (by default, 0.0.0.0 means that it will listen in all interfaces)
+http_port:       9090         # General port (by default, 9090)
+#http_admin_port: 9095        # Admin port where openmano is listening (when missing, no administration server is launched)
+                              # Not used in current version!
+
+# Ports to be used. Comma separated list. Can contain a {"from":<port>, "to":<port>} entry
+#e.g. from 9000 to 9005: [{"from":9000, "to":9005}], or also [9000,9001,9002,9003,9004,9005]
+#e.g. from 9000 to 9100 apart from 9050,9053: [{"from":9000, "to":9049},9051,9052,{"from":9054, "to":9099}]
+http_console_ports: [{"from":9096, "to":9110}]
+
+#Database parameters
+db_host:   {{host}}          # by default localhost
+db_user:   {{user}}               # DB user
+db_passwd: {{password}}             # DB password
+db_name:   {{database}}            # Name of the MANO DB
+
+#other MANO parameters
+#  Folder where the VNF descriptors will be stored
+#  The folder will be created in the execution folder if it does not exist
+vnf_repository: "./vnfrepo"   # Use an absolute path to avoid misunderstandings
diff --git a/charms/layers/openmano/tests/00-setup b/charms/layers/openmano/tests/00-setup
new file mode 100755 (executable)
index 0000000..f0616a5
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+sudo add-apt-repository ppa:juju/stable -y
+sudo apt-get update
+sudo apt-get install amulet python-requests -y
diff --git a/charms/layers/openmano/tests/10-deploy b/charms/layers/openmano/tests/10-deploy
new file mode 100755 (executable)
index 0000000..7dce664
--- /dev/null
@@ -0,0 +1,31 @@
+#!/usr/bin/python3
+
+import amulet
+import requests
+import unittest
+
+
+class TestCharm(unittest.TestCase):
+    def setUp(self):
+        self.d = amulet.Deployment()
+
+        self.d.add('layer-openmano')
+        self.d.expose('layer-openmano')
+
+        self.d.setup(timeout=900)
+        self.d.sentry.wait()
+
+        self.unit = self.d.sentry['layer-openmano'][0]
+
+    def test_service(self):
+        # test we can access over http
+        page = requests.get('http://{}'.format(self.unit.info['public-address']))
+        self.assertEqual(page.status_code, 200)
+        # Now you can use self.d.sentry[SERVICE][UNIT] to address each of the units and perform
+        # more in-depth steps. Each self.d.sentry[SERVICE][UNIT] has the following methods:
+        # - .info - An array of the information of that unit from Juju
+        # - .file(PATH) - Get the details of a file on that unit
+        # - .file_contents(PATH) - Get plain text output of PATH file from that unit
+        # - .directory(PATH) - Get details of directory
+        # - .directory_contents(PATH) - List files and folders in PATH on that unit
+        # - .relation(relation, service:rel) - Get relation data from return service