sudo snap install charm --classic
mkdir -p /bak/work/charms/layers
export JUJU_REPOSITORY=/bak/work/charms
export LAYER_PATH=$JUJU_REPOSITORY/layers
cd $LAYER_PATH
charm create simple
cd simple
sudo bash -c 'cat >layer.yaml' <<EOF
includes: ['layer:basic', 'layer:vnfproxy']
options:
basic:
use_venv: false
EOF
sudo bash -c 'cat >metadata.yaml' <<EOF
name: simple
summary: a simple vnf proxy charm
maintainer: hua <hua@localhost>
subordinate: false
series: ['xenial']
EOF
sudo bash -c 'cat >actions.yaml' <<EOF
touch:
description: "Touch a file on the VNF."
params:
filename:
description: "The name of the file to touch."
type: string
default: ""
required:
- filename
EOF
mkdir -p actions
sudo bash -c 'cat >actions/touch' <<EOF
#!/usr/bin/env python3
import sys
sys.path.append('lib')
from charms.reactive import main, set_flag
from charmhelpers.core.hookenv import action_fail, action_name
set_flag('actions.{}'.format(action_name()))
try:
main()
except Exception as e:
action_fail(repr(e))
EOF
sudo chmod +x actions/touch
sudo bash -c 'cat >reactive/simple.py' <<EOF
from charmhelpers.core.hookenv import (
action_get,
action_fail,
action_set,
status_set,
)
from charms.reactive import (
clear_flag,
set_flag,
when,
when_not,
)
import charms.sshproxy
# Set the charm’s state to active so the LCM knows it’s ready to work.
@when_not('simple.installed')
def install_simple_proxy_charm():
set_flag('simple.installed')
status_set('active', 'Ready!')
# Define what to do when the `touch` primitive is invoked.
@when('actions.touch')
def touch():
err = ''
try:
filename = action_get('filename')
cmd = ['touch {}'.format(filename)]
result, err = charms.sshproxy._run(cmd)
except:
action_fail('command failed:' + err)
else:
action_set({'output': result})
finally:
clear_flag('actions.touch')
EOF
charm build
vnfd file
vnfd:vnfd-catalog:
vnfd:
- id: hackfest3charmed-vnf
name: hackfest3charmed-vnf
vnf-configuration:
juju:
charm: simple
initial-config-primitive:
- seq: '1'
name: config
parameter:
- name: ssh-hostname
value: <rw_mgmt_ip>
- name: ssh-username
value: ubuntu
- name: ssh-password
value: osm4u
- seq: '2'
name: touch
parameter:
- name: filename
value: '/home/ubuntu/first-touch'
config-primitive:
- name: touch
parameter:
- name: filename
data-type: STRING
default-value: '/home/ubuntu/touched'
Reference
[1] https://osm.etsi.org/wikipub/index.php/Creating_your_VNF_Charm
juju reactive charm (by quqi99)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.