X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=charms%2Flayers%2Fvnfproxy%2FREADME.md;fp=charms%2Flayers%2Fvnfproxy%2FREADME.md;h=8379e50c6cd7ee6649e84bbfe311722bc526ad23;hb=a2a2d89587a21693f398ce77f8c049805150c368;hp=0000000000000000000000000000000000000000;hpb=d3bbe5cc32a34e4eb19df3337cd68efd3fd43866;p=osm%2FSO.git diff --git a/charms/layers/vnfproxy/README.md b/charms/layers/vnfproxy/README.md new file mode 100644 index 00000000..8379e50c --- /dev/null +++ b/charms/layers/vnfproxy/README.md @@ -0,0 +1,172 @@ +# vnfproxy + +## Overview + +This charm layer is intended for use by vendors who wish to integrate with +OSM. The current release of OSM only supports a lightweight version of Juju +charms, which we will refer to as "proxy charms". Consider the diagram below: + +``` ++---------------------+ +---------------------+ +| <----+ | +| Resource | | Service | +| Orchestrator (RO) +----> Orchestrator (SO) | +| | | | ++------------------+--+ +-------+----^--------+ + | | | + | | | + | | | + +-----v-----+ +-v----+--+ + | <-------+ | + | Virtual | | Proxy | + | Machine | | Charm | + | +-------> | + +-----------+ +---------+ +``` + +The Virtual Machine (VM) is created by the Resource Orchestrator (RO), at the +request of the Service Orchestrator (SO). Once the VM has been created, a +"proxy charm" is deployed in order to facilitate operations between the SO and +your service running within the VM. + +As such, a proxy charm will expose a number of "actions" that are run via the +SO. By default, the following actions are exposed: + +```bash +actions +├── reboot +├── restart +├── run +├── start +└── stop +``` + +Some actions, such as `run` and `reboot`, do not require any additional configuration. `start`, `stop` and `restart`, however, will require you to +implement the command(s) required to interact with your service. + +## Usage + +Create the framework for your proxy charm: + +```bash +$ charm create pingpong +$ cd pingpong +``` + +Modify `layer.yaml` to the following: +```yaml +includes: + - layer:basic + - layer:vnfproxy +``` + +The `metadata.yaml` describes your service. It should look similar to the following: + +```yaml +name: vnfproxy +summary: A layer for developing OSM "proxy" charms. +maintainer: Adam Israel +description: | + VNF "proxy" charms are a lightweight version of a charm that, rather than + installing software on the same machine, execute commands over an ssh channel. +series: + - trusty + - xenial +tags: + - osm + - vnf +subordinate: false +``` + +Implement the default action(s) you wish to support by adding the following code to reactive/pingpong.py and fill in the cmd to be run: + +```python +@when('actions.start') +def start(): + err = '' + try: + cmd = "" + result, err = charms.sshproxy._run(cmd) + except: + action_fail('command failed:' + err) + else: + action_set({'outout': result}) + finally: + remove_flag('actions.start') + + +@when('actions.stop') +def stop(): + err = '' + try: + # Enter the command to stop your service(s) + cmd = "service myname stop" + result, err = charms.sshproxy._run(cmd) + except: + action_fail('command failed:' + err) + else: + action_set({'outout': result}) + finally: + remove_flag('actions.stop') + + +@when('actions.restart') +def restart(): + err = '' + try: + # Enter the command to restart your service(s) + cmd = "service myname restart" + result, err = charms.sshproxy._run(cmd) + except: + action_fail('command failed:' + err) + else: + action_set({'outout': result}) + finally: + remove_flag('actions.restart') +``` + +Rename `README.ex` to `README.md` and describe your application and its usage. + +-- fix this. there are cases where the config is useful -- Delete `config.yaml`, since the charm's configuration will be driven by the SO. + +Create the `actions.yaml` file; this will describe the additional operations you would like to perform on or against your service. + +```yaml +set-server: + description: "Set the target IP address and port" + params: + server-ip: + description: "IP on which the target service is listening." + type: string + default: "" + server-port: + description: "Port on which the target service is listening." + type: integer + default: 5555 + required: + - server-ip +set-rate: + description: "Set the rate of packet generation." + params: + rate: + description: "Packet rate." + type: integer + default: 5 +get-stats: + description: "Get the stats." +get-state: + description: "Get the admin state of the target service." +get-rate: + description: "Get the rate set on the target service." +get-server: + description: "Get the target server and IP set" +``` + + +Once you've implemented your actions, you need to compile the various charm layers: +```bash +$ charm build + +``` + +## Contact