Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
vnf-onboarding
OSM Packages
Commits
c79a4c8a
Commit
c79a4c8a
authored
Nov 02, 2021
by
garciadav
Browse files
wip: add ns-level relation
parent
4a490d4a
Pipeline
#2718
failed with stage
in 29 seconds
Changes
54
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
498 additions
and
0 deletions
+498
-0
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/actions.yaml
...no_relation_vnf/charms/ops/sshproxy-operator/actions.yaml
+44
-0
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/charmcraft.yaml
...relation_vnf/charms/ops/sshproxy-operator/charmcraft.yaml
+34
-0
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/config.yaml
..._no_relation_vnf/charms/ops/sshproxy-operator/config.yaml
+40
-0
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/metadata.yaml
...o_relation_vnf/charms/ops/sshproxy-operator/metadata.yaml
+24
-0
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/requirements-dev.txt
...ion_vnf/charms/ops/sshproxy-operator/requirements-dev.txt
+2
-0
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/requirements.txt
...elation_vnf/charms/ops/sshproxy-operator/requirements.txt
+3
-0
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/run_tests
...mr_no_relation_vnf/charms/ops/sshproxy-operator/run_tests
+16
-0
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/src/charm.py
...no_relation_vnf/charms/ops/sshproxy-operator/src/charm.py
+102
-0
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/tests/__init__.py
...lation_vnf/charms/ops/sshproxy-operator/tests/__init__.py
+0
-0
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/tests/test_charm.py
...tion_vnf/charms/ops/sshproxy-operator/tests/test_charm.py
+34
-0
charm-packages/cmr_no_relation_vnf/charms/simple-requires.charm
...packages/cmr_no_relation_vnf/charms/simple-requires.charm
+0
-0
charm-packages/cmr_no_relation_vnf/charms/sshproxy.charm
charm-packages/cmr_no_relation_vnf/charms/sshproxy.charm
+0
-0
charm-packages/cmr_no_relation_vnf/cloud_init/cloud-config.txt
...-packages/cmr_no_relation_vnf/cloud_init/cloud-config.txt
+12
-0
charm-packages/cmr_no_relation_vnf/cmr_no_relation_vnfd.yaml
charm-packages/cmr_no_relation_vnf/cmr_no_relation_vnfd.yaml
+147
-0
charm-packages/cmr_no_relation_vnf/icons/osm.png
charm-packages/cmr_no_relation_vnf/icons/osm.png
+0
-0
charm-packages/cmr_no_relation_vnf/juju-bundles/bundle.yaml
charm-packages/cmr_no_relation_vnf/juju-bundles/bundle.yaml
+6
-0
charm-packages/cmr_no_relation_vnf/juju-bundles/charms/nginx.charm
...kages/cmr_no_relation_vnf/juju-bundles/charms/nginx.charm
+0
-0
charm-packages/cmr_no_relation_vnf/juju-bundles/charms/ops/nginx-k8s/charmcraft.yaml
...ion_vnf/juju-bundles/charms/ops/nginx-k8s/charmcraft.yaml
+34
-0
charm-packages/cmr_no_relation_vnf/juju-bundles/charms/ops/nginx-k8s/config.yaml
...elation_vnf/juju-bundles/charms/ops/nginx-k8s/config.yaml
+0
-0
charm-packages/cmr_no_relation_vnf/juju-bundles/charms/ops/nginx-k8s/metadata.yaml
...ation_vnf/juju-bundles/charms/ops/nginx-k8s/metadata.yaml
+0
-0
No files found.
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/actions.yaml
0 → 100644
View file @
c79a4c8a
# Copyright 2020 David Garcia
# See LICENSE file for licensing details.
#
# This is only an example, and you should edit to suit your needs.
# If you don't need actions, you can remove the file entirely.
# It ties in to the example _on_fortune_action handler in src/charm.py
touch
:
description
:
"
Touch
a
file
on
the
VNF."
params
:
filename
:
description
:
"
The
name
of
the
file
to
touch."
type
:
string
default
:
"
"
required
:
-
filename
# Standard OSM functions
start
:
description
:
"
Stop
the
service
on
the
VNF."
stop
:
description
:
"
Stop
the
service
on
the
VNF."
restart
:
description
:
"
Stop
the
service
on
the
VNF."
reboot
:
description
:
"
Reboot
the
VNF
virtual
machine."
upgrade
:
description
:
"
Upgrade
the
software
on
the
VNF."
# Required by charms.osm.sshproxy
run
:
description
:
"
Run
an
arbitrary
command"
params
:
command
:
description
:
"
The
command
to
execute."
type
:
string
default
:
"
"
required
:
-
command
generate-ssh-key
:
description
:
"
Generate
a
new
SSH
keypair
for
this
unit.
This
will
replace
any
existing
previously
generated
keypair."
verify-ssh-credentials
:
description
:
"
Verify
that
this
unit
can
authenticate
with
server
specified
by
ssh-hostname
and
ssh-username."
get-ssh-public-key
:
description
:
"
Get
the
public
SSH
key
for
this
unit."
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/charmcraft.yaml
0 → 100644
View file @
c79a4c8a
# Copyright 2021 Canonical Ltd.
#
# 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: legal@canonical.com
#
# To get in touch with the maintainers, please contact:
# osm-charmers@lists.launchpad.net
##
type
:
charm
bases
:
-
build-on
:
-
name
:
ubuntu
channel
:
"
20.04"
architectures
:
[
"
amd64"
]
run-on
:
-
name
:
ubuntu
channel
:
"
20.04"
architectures
:
[
amd64
]
parts
:
charm
:
build-packages
:
[
git
]
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/config.yaml
0 → 100644
View file @
c79a4c8a
# Copyright 2020 David Garcia
# See LICENSE file for licensing details.
#
# This is only an example, and you should edit to suit your needs.
# If you don't need config, you can remove the file entirely.
options
:
ssh-hostname
:
type
:
string
default
:
"
"
description
:
"
The
hostname
or
IP
address
of
the
machine
to"
ssh-username
:
type
:
string
default
:
"
"
description
:
"
The
username
to
login
as."
ssh-password
:
type
:
string
default
:
"
"
description
:
"
The
password
used
to
authenticate."
# ssh-private-key:
# type: string
# default: ""
# description: "DEPRECATED. The private ssh key to be used to authenticate."
ssh-public-key
:
type
:
string
default
:
"
"
description
:
"
The
public
key
of
this
unit."
ssh-key-type
:
type
:
string
default
:
"
rsa"
description
:
"
The
type
of
encryption
to
use
for
the
SSH
key."
ssh-key-bits
:
type
:
int
default
:
4096
description
:
"
The
number
of
bits
to
use
for
the
SSH
key."
apt-mirror
:
type
:
string
description
:
"
Apt
mirror.
Only
used
for
K8s
proxy
charms
with
Juju
version
lower
than
2.9.4"
security-apt-mirror
:
type
:
string
description
:
"
Security
Apt
mirror.
Only
used
for
K8s
proxy
charms
with
Juju
version
lower
than
2.9.4"
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/metadata.yaml
0 → 100644
View file @
c79a4c8a
# Copyright 2020 David Garcia
# See LICENSE file for licensing details.
name
:
sshproxy
description
:
|
This is a basic example of an SSHProxy Charm for OSM
summary
:
|
This charm should be used as a base for any Proxy Charm (SSH based)
series
:
# - focal
# - bionic
# - xenial
-
kubernetes
deployment
:
mode
:
operator
peers
:
proxypeer
:
interface
:
proxypeer
provides
:
interface
:
interface
:
interface
tags
:
-
osm
-
proxycharm
-
ssh
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/requirements-dev.txt
0 → 100644
View file @
c79a4c8a
-r requirements.txt
flake8
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/requirements.txt
0 → 100644
View file @
c79a4c8a
ops
packaging
git+https://github.com/charmed-osm/charms.osm#egg=charms.osm
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/run_tests
0 → 100755
View file @
c79a4c8a
#!/bin/sh -e
# Copyright 2020 David Garcia
# See LICENSE file for licensing details.
if
[
-z
"
$VIRTUAL_ENV
"
-a
-d
venv/
]
;
then
.
venv/bin/activate
fi
if
[
-z
"
$PYTHONPATH
"
]
;
then
export
PYTHONPATH
=
src
else
export
PYTHONPATH
=
"src:
$PYTHONPATH
"
fi
flake8
python3
-m
unittest
-v
"
$@
"
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/src/charm.py
0 → 100755
View file @
c79a4c8a
#!/usr/bin/env python3
# Copyright 2020 David Garcia
# See LICENSE file for licensing details.
from
ops.main
import
main
from
charms.osm.sshproxy
import
SSHProxyCharm
from
ops.model
import
(
ActiveStatus
,
MaintenanceStatus
,
)
class
SshproxyCharm
(
SSHProxyCharm
):
def
__init__
(
self
,
*
args
):
super
().
__init__
(
*
args
)
# An example of setting charm state
# that's persistent across events
self
.
state
.
set_default
(
is_started
=
False
)
if
not
self
.
state
.
is_started
:
self
.
state
.
is_started
=
True
# Register all of the events we want to observe
# Charm events
self
.
framework
.
observe
(
self
.
on
.
config_changed
,
self
.
on_config_changed
)
self
.
framework
.
observe
(
self
.
on
.
install
,
self
.
on_install
)
self
.
framework
.
observe
(
self
.
on
.
start
,
self
.
on_start
)
self
.
framework
.
observe
(
self
.
on
.
upgrade_charm
,
self
.
on_upgrade_charm
)
# Charm actions (primitives)
self
.
framework
.
observe
(
self
.
on
.
touch_action
,
self
.
on_touch_action
)
# OSM actions (primitives)
self
.
framework
.
observe
(
self
.
on
.
start_action
,
self
.
on_start_action
)
self
.
framework
.
observe
(
self
.
on
.
stop_action
,
self
.
on_stop_action
)
self
.
framework
.
observe
(
self
.
on
.
restart_action
,
self
.
on_restart_action
)
self
.
framework
.
observe
(
self
.
on
.
reboot_action
,
self
.
on_reboot_action
)
self
.
framework
.
observe
(
self
.
on
.
upgrade_action
,
self
.
on_upgrade_action
)
def
on_config_changed
(
self
,
event
):
"""Handle changes in configuration"""
super
().
on_config_changed
(
event
)
def
on_install
(
self
,
event
):
super
().
on_install
(
event
)
def
on_start
(
self
,
event
):
"""Called when the charm is being installed"""
super
().
on_start
(
event
)
def
on_upgrade_charm
(
self
,
event
):
"""Upgrade the charm."""
self
.
unit
.
status
=
MaintenanceStatus
(
"Upgrading charm"
)
# Do upgrade related stuff
self
.
unit
.
status
=
ActiveStatus
(
"Active"
)
def
on_touch_action
(
self
,
event
):
"""Touch a file."""
if
self
.
unit
.
is_leader
():
filename
=
event
.
params
[
"filename"
]
proxy
=
self
.
get_ssh_proxy
()
stdout
,
stderr
=
proxy
.
run
(
"touch {}"
.
format
(
filename
))
proxy
.
scp
(
"/etc/lsb-release"
,
"/home/ubuntu/scp_file"
)
event
.
set_results
({
"output"
:
stdout
})
else
:
event
.
fail
(
"Unit is not leader"
)
return
###############
# OSM methods #
###############
def
on_start_action
(
self
,
event
):
"""Start the VNF service on the VM."""
pass
def
on_stop_action
(
self
,
event
):
"""Stop the VNF service on the VM."""
pass
def
on_restart_action
(
self
,
event
):
"""Restart the VNF service on the VM."""
pass
def
on_reboot_action
(
self
,
event
):
"""Reboot the VM."""
if
self
.
unit
.
is_leader
():
proxy
=
self
.
get_ssh_proxy
()
stdout
,
stderr
=
proxy
.
run
(
"sudo reboot"
)
if
len
(
stderr
):
event
.
fail
(
stderr
)
else
:
event
.
fail
(
"Unit is not leader"
)
return
def
on_upgrade_action
(
self
,
event
):
"""Upgrade the VNF service on the VM."""
pass
if
__name__
==
"__main__"
:
main
(
SshproxyCharm
)
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/tests/__init__.py
0 → 100644
View file @
c79a4c8a
charm-packages/cmr_no_relation_vnf/charms/ops/sshproxy-operator/tests/test_charm.py
0 → 100644
View file @
c79a4c8a
# Copyright 2020 David Garcia
# See LICENSE file for licensing details.
import
unittest
from
unittest.mock
import
Mock
,
call
from
ops.testing
import
Harness
from
charm
import
SshproxyCharm
class
TestCharm
(
unittest
.
TestCase
):
@
unittest
.
mock
.
patch
(
"charms.osm.sshproxy.SSHProxy.run"
)
def
test_touch_action
(
self
,
mock_ssh_proxy
):
mock_ssh_proxy
.
return_value
=
(
"stdout"
,
None
)
harness
=
Harness
(
SshproxyCharm
)
harness
.
set_leader
(
is_leader
=
True
)
harness
.
begin
()
action_event
=
Mock
(
params
=
{
"filename"
:
"/home/ubuntu/asd"
})
harness
.
charm
.
on_touch_action
(
action_event
)
self
.
assertTrue
(
action_event
.
set_results
.
called
)
self
.
assertEqual
(
action_event
.
set_results
.
call_args
,
call
({
"output"
:
"stdout"
}),
)
def
test_touch_action_fail
(
self
):
harness
=
Harness
(
SshproxyCharm
)
harness
.
set_leader
(
is_leader
=
False
)
harness
.
begin
()
action_event
=
Mock
(
params
=
{
"filename"
:
"/home/ubuntu/asd"
})
harness
.
charm
.
on_touch_action
(
action_event
)
self
.
assertEqual
(
action_event
.
fail
.
call_args
,
[(
"Unit is not leader"
,)])
charm-packages/cmr_no_relation_vnf/charms/simple-requires.charm
0 → 100644
View file @
c79a4c8a
File added
charm-packages/cmr_no_relation_vnf/charms/sshproxy.charm
0 → 100644
View file @
c79a4c8a
File added
charm-packages/cmr_no_relation_vnf/cloud_init/cloud-config.txt
0 → 100755
View file @
c79a4c8a
#cloud-config
password: osm4u
chpasswd: { expire: False }
ssh_pwauth: True
write_files:
- content: |
# My new helloworld file
owner: root:root
permissions: '0644'
path: /root/helloworld.txt
charm-packages/cmr_no_relation_vnf/cmr_no_relation_vnfd.yaml
0 → 100644
View file @
c79a4c8a
vnfd
:
description
:
A VNF consisting of 1 VDU connected to two external VL, and one for
data and another one for management
df
:
-
id
:
default-df
instantiation-level
:
-
id
:
default-instantiation-level
vdu-level
:
-
number-of-instances
:
1
vdu-id
:
simple_requires
-
number-of-instances
:
1
vdu-id
:
simple_provides
vdu-profile
:
-
id
:
simple_requires
min-number-of-instances
:
1
-
id
:
simple_provides
min-number-of-instances
:
1
lcm-operations-configuration
:
operate-vnf-op-config
:
day1-2
:
-
id
:
cross_model_no_relation-vnf
config-access
:
ssh-access
:
default-user
:
ubuntu
required
:
true
execution-environment-list
:
-
id
:
simple-provides-proxy-ee
juju
:
charm
:
sshproxy.charm
proxy
:
true
cloud
:
k8s
external-connection-point-ref
:
provides-mgmt-ext
initial-config-primitive
:
-
seq
:
1
name
:
config
execution-environment-ref
:
simple-provides-proxy-ee
parameter
:
-
name
:
ssh-hostname
value
:
<rw_mgmt_ip>
-
name
:
ssh-username
value
:
ubuntu
-
seq
:
2
name
:
touch
execution-environment-ref
:
simple-provides-proxy-ee
parameter
:
-
data-type
:
STRING
name
:
filename
value
:
/home/ubuntu/first-touch
config-primitive
:
-
name
:
touch
execution-environment-ref
:
simple-provides-proxy-ee
parameter
:
-
data-type
:
STRING
default-value
:
/home/ubuntu/touched
name
:
filename
-
id
:
simple_requires
config-access
:
ssh-access
:
default-user
:
ubuntu
required
:
true
execution-environment-list
:
-
id
:
simple-requires-ee
juju
:
charm
:
simple-requires.charm
proxy
:
false
external-connection-point-ref
:
requires-mgmt-ext
initial-config-primitive
:
-
seq
:
1
name
:
touch
execution-environment-ref
:
simple-requires-ee
parameter
:
-
data-type
:
STRING
name
:
filename
value
:
/home/ubuntu/first-touch
config-primitive
:
-
name
:
touch
execution-environment-ref
:
simple-requires-ee
parameter
:
-
data-type
:
STRING
default-value
:
/home/ubuntu/touched
name
:
filename
ext-cpd
:
-
id
:
requires-mgmt-ext
int-cpd
:
cpd
:
simple_requires-eth0-int
vdu-id
:
simple_requires
-
id
:
provides-mgmt-ext
int-cpd
:
cpd
:
simple_provides-eth0-int
vdu-id
:
simple_provides
id
:
cross_model_no_relation-vnf
mgmt-cp
:
provides-mgmt-ext
product-name
:
cross_model_no_relation-vnf
sw-image-desc
:
-
id
:
ubuntu18.04
image
:
ubuntu18.04
name
:
ubuntu18.04
kdu
:
-
name
:
native-kdu
juju-bundle
:
bundle.yaml
vdu
:
-
cloud-init-file
:
cloud-config.txt
id
:
simple_requires
int-cpd
:
-
id
:
simple_requires-eth0-int
virtual-network-interface-requirement
:
-
name
:
simple_requires-eth0
position
:
1
virtual-interface
:
type
:
PARAVIRT
name
:
simple_requires
sw-image-desc
:
ubuntu18.04
virtual-compute-desc
:
simple_requires-compute
virtual-storage-desc
:
-
simple_requires-storage
-
cloud-init-file
:
cloud-config.txt
id
:
simple_provides
int-cpd
:
-
id
:
simple_provides-eth0-int
virtual-network-interface-requirement
:
-
name
:
simple_provides-eth0
position
:
1
virtual-interface
:
type
:
PARAVIRT
name
:
simple_provides
sw-image-desc
:
ubuntu18.04
virtual-compute-desc
:
simple_provides-compute
virtual-storage-desc
:
-
simple_provides-storage
version
:
1.0
virtual-compute-desc
:
-
id
:
simple_requires-compute
virtual-cpu
:
num-virtual-cpu
:
1
virtual-memory
:
size
:
1.0
-
id
:
simple_provides-compute
virtual-cpu
:
num-virtual-cpu
:
1
virtual-memory
:
size
:
1.0
virtual-storage-desc
:
-
id
:
simple_requires-storage
size-of-storage
:
10
-
id
:
simple_provides-storage
size-of-storage
:
10
charm-packages/cmr_no_relation_vnf/icons/osm.png
0 → 100644
View file @
c79a4c8a
54.6 KB
charm-packages/cmr_no_relation_vnf/juju-bundles/bundle.yaml
0 → 100644
View file @
c79a4c8a
description
:
Squid Bundle
bundle
:
kubernetes
applications
:
nginx
:
charm
:
'
./charms/nginx.charm'
scale
:
1
charm-packages/cmr_relation_vnf/juju-bundles/charms/nginx.charm
→
charm-packages/cmr_
no_
relation_vnf/juju-bundles/charms/nginx.charm
View file @
c79a4c8a
File moved
charm-packages/cmr_no_relation_vnf/juju-bundles/charms/ops/nginx-k8s/charmcraft.yaml
0 → 100644
View file @
c79a4c8a
# Copyright 2021 Canonical Ltd.
#
# 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: legal@canonical.com
#
# To get in touch with the maintainers, please contact:
# osm-charmers@lists.launchpad.net
##
type
:
charm
bases
:
-
build-on
:
-
name
:
ubuntu
channel
:
"
20.04"
architectures
:
[
"
amd64"
]
run-on
:
-
name
:
ubuntu
channel
:
"
20.04"
architectures
:
[
amd64
]
parts
:
charm
:
build-packages
:
[
git
]
charm-packages/cmr_relation_vnf/juju-bundles/charms/ops/nginx-k8s/config.yaml
→
charm-packages/cmr_
no_
relation_vnf/juju-bundles/charms/ops/nginx-k8s/config.yaml
View file @
c79a4c8a
File moved
charm-packages/cmr_relation_vnf/juju-bundles/charms/ops/nginx-k8s/metadata.yaml
→
charm-packages/cmr_
no_
relation_vnf/juju-bundles/charms/ops/nginx-k8s/metadata.yaml
View file @
c79a4c8a
File moved
Prev
1
2
3
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment