diff --git a/.gitmodules b/.gitmodules index 09e21d2a1901f27612ea2ffc75fe6a83bc9b1b8e..7b3df422931185047a86787c42f1312ac133d9a7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -28,3 +28,6 @@ [submodule "charm-packages/k8s_proxy_charm_vnf/charms/simple/mod/operator"] path = charm-packages/k8s_proxy_charm_vnf/charms/simple/mod/operator url = https://github.com/canonical/operator +[submodule "charm-packages/native_charm_vnf/charms/simple/mod/operator"] + path = charm-packages/native_charm_vnf/charms/simple/mod/operator + url = https://github.com/canonical/operator diff --git a/charm-packages/native_charm_ns/icons/osm.png b/charm-packages/native_charm_ns/icons/osm.png new file mode 100644 index 0000000000000000000000000000000000000000..62012d2a2b491bdcd536d62c3c3c863c0d8c1b33 Binary files /dev/null and b/charm-packages/native_charm_ns/icons/osm.png differ diff --git a/charm-packages/native_charm_ns/native_charm_nsd.yaml b/charm-packages/native_charm_ns/native_charm_nsd.yaml new file mode 100755 index 0000000000000000000000000000000000000000..579508a3bc38cfa4c8936d50aafbcea03dfad0e2 --- /dev/null +++ b/charm-packages/native_charm_ns/native_charm_nsd.yaml @@ -0,0 +1,39 @@ +nsd:nsd-catalog: + nsd: + - id: native_charm-ns + name: native_charm-ns + short-name: native_charm-ns + description: NS with 2 VNFs with cloudinit connected by datanet and mgmtnet VLs + version: '1.0' + logo: osm.png + constituent-vnfd: + - vnfd-id-ref: native_charm-vnf + member-vnf-index: '1' + - vnfd-id-ref: native_charm-vnf + member-vnf-index: '2' + vld: + - id: mgmtnet + name: mgmtnet + short-name: mgmtnet + type: ELAN + mgmt-network: 'true' + vim-network-name: osm-ext + vnfd-connection-point-ref: + - vnfd-id-ref: native_charm-vnf + member-vnf-index-ref: '1' + vnfd-connection-point-ref: vnf-mgmt + - vnfd-id-ref: native_charm-vnf + member-vnf-index-ref: '2' + vnfd-connection-point-ref: vnf-mgmt + - id: datanet + name: datanet + short-name: datanet + type: ELAN + vnfd-connection-point-ref: + - vnfd-id-ref: native_charm-vnf + member-vnf-index-ref: '1' + vnfd-connection-point-ref: vnf-data + - vnfd-id-ref: native_charm-vnf + member-vnf-index-ref: '2' + vnfd-connection-point-ref: vnf-data + diff --git a/charm-packages/native_charm_vnf/charms/simple/actions.yaml b/charm-packages/native_charm_vnf/charms/simple/actions.yaml new file mode 100644 index 0000000000000000000000000000000000000000..53a706b4eba7347764c4711b7077146e72241de4 --- /dev/null +++ b/charm-packages/native_charm_vnf/charms/simple/actions.yaml @@ -0,0 +1,25 @@ +## +# Copyright 2020 Canonical Ltd. +# 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. +## +touch: + description: "Touch a file on the VNF." + params: + filename: + description: "The name of the file to touch." + type: string + default: "" + required: + - filename diff --git a/charm-packages/native_charm_vnf/charms/simple/config.yaml b/charm-packages/native_charm_vnf/charms/simple/config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2be62318c6ce27156e4af585494b36d0c2b802f8 --- /dev/null +++ b/charm-packages/native_charm_vnf/charms/simple/config.yaml @@ -0,0 +1,17 @@ +## +# Copyright 2020 Canonical Ltd. +# 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. +## +options: {} \ No newline at end of file diff --git a/charm-packages/native_charm_vnf/charms/simple/hooks/install b/charm-packages/native_charm_vnf/charms/simple/hooks/install new file mode 120000 index 0000000000000000000000000000000000000000..25b1f68fa39d58d33c08ca420c3d439d19be0c55 --- /dev/null +++ b/charm-packages/native_charm_vnf/charms/simple/hooks/install @@ -0,0 +1 @@ +../src/charm.py \ No newline at end of file diff --git a/charm-packages/native_charm_vnf/charms/simple/hooks/start b/charm-packages/native_charm_vnf/charms/simple/hooks/start new file mode 120000 index 0000000000000000000000000000000000000000..25b1f68fa39d58d33c08ca420c3d439d19be0c55 --- /dev/null +++ b/charm-packages/native_charm_vnf/charms/simple/hooks/start @@ -0,0 +1 @@ +../src/charm.py \ No newline at end of file diff --git a/charm-packages/native_charm_vnf/charms/simple/hooks/upgrade-charm b/charm-packages/native_charm_vnf/charms/simple/hooks/upgrade-charm new file mode 120000 index 0000000000000000000000000000000000000000..25b1f68fa39d58d33c08ca420c3d439d19be0c55 --- /dev/null +++ b/charm-packages/native_charm_vnf/charms/simple/hooks/upgrade-charm @@ -0,0 +1 @@ +../src/charm.py \ No newline at end of file diff --git a/charm-packages/native_charm_vnf/charms/simple/lib/ops b/charm-packages/native_charm_vnf/charms/simple/lib/ops new file mode 120000 index 0000000000000000000000000000000000000000..d93419320c2e0d3133a0bc8059e2f259bf5bb213 --- /dev/null +++ b/charm-packages/native_charm_vnf/charms/simple/lib/ops @@ -0,0 +1 @@ +../mod/operator/ops \ No newline at end of file diff --git a/charm-packages/native_charm_vnf/charms/simple/metadata.yaml b/charm-packages/native_charm_vnf/charms/simple/metadata.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5e832fb61f0c21dd8c17f06822679164f855e0c8 --- /dev/null +++ b/charm-packages/native_charm_vnf/charms/simple/metadata.yaml @@ -0,0 +1,25 @@ +## +# Copyright 2020 Canonical Ltd. +# 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. +## + +name: simple-native +summary: A simple native charm +description: | + Simple native charm +series: + - bionic + - xenial + - focal \ No newline at end of file diff --git a/charm-packages/native_charm_vnf/charms/simple/mod/operator b/charm-packages/native_charm_vnf/charms/simple/mod/operator new file mode 160000 index 0000000000000000000000000000000000000000..a84ce8776b368a8b2bccdb173716e342db9a6b36 --- /dev/null +++ b/charm-packages/native_charm_vnf/charms/simple/mod/operator @@ -0,0 +1 @@ +Subproject commit a84ce8776b368a8b2bccdb173716e342db9a6b36 diff --git a/charm-packages/native_charm_vnf/charms/simple/src/charm.py b/charm-packages/native_charm_vnf/charms/simple/src/charm.py new file mode 100755 index 0000000000000000000000000000000000000000..9ef7d07286257338ea1ef940fb34f67a9052f998 --- /dev/null +++ b/charm-packages/native_charm_vnf/charms/simple/src/charm.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +## +# Copyright 2020 Canonical Ltd. +# 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. +## + +import sys +import subprocess + +sys.path.append("lib") + +from ops.charm import CharmBase +from ops.main import main +from ops.model import ActiveStatus + +class MyNativeCharm(CharmBase): + + def __init__(self, framework, key): + super().__init__(framework, key) + + # Listen to 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) + + # Listen to the touch action event + self.framework.observe(self.on.touch_action, self.on_touch_action) + + def on_config_changed(self, event): + """Handle changes in configuration""" + self.model.unit.status = ActiveStatus() + + def on_install(self, event): + """Called when the charm is being installed""" + self.model.unit.status = ActiveStatus() + + def on_start(self, event): + """Called when the charm is being started""" + self.model.unit.status = ActiveStatus() + + def on_touch_action(self, event): + """Touch a file.""" + + filename = event.params["filename"] + try: + subprocess.run(["touch", filename], check=True) + event.set_results({"created": True, "filename": filename}) + except subprocess.CalledProcessError as e: + event.fail("Action failed: {}".format(e)) + self.model.unit.status = ActiveStatus() + + +if __name__ == "__main__": + main(MyNativeCharm) + diff --git a/charm-packages/native_charm_vnf/cloud_init/cloud-config.txt b/charm-packages/native_charm_vnf/cloud_init/cloud-config.txt new file mode 100755 index 0000000000000000000000000000000000000000..36c8d1bf2cdebbc4e50d1e8348003f64f419cd0b --- /dev/null +++ b/charm-packages/native_charm_vnf/cloud_init/cloud-config.txt @@ -0,0 +1,12 @@ +#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 diff --git a/charm-packages/native_charm_vnf/icons/osm.png b/charm-packages/native_charm_vnf/icons/osm.png new file mode 100644 index 0000000000000000000000000000000000000000..62012d2a2b491bdcd536d62c3c3c863c0d8c1b33 Binary files /dev/null and b/charm-packages/native_charm_vnf/icons/osm.png differ diff --git a/charm-packages/native_charm_vnf/native_charm_vnfd.yaml b/charm-packages/native_charm_vnf/native_charm_vnfd.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e9a9f007ef5d29f21118896b9b02d7b3719ea2ea --- /dev/null +++ b/charm-packages/native_charm_vnf/native_charm_vnfd.yaml @@ -0,0 +1,63 @@ +vnfd:vnfd-catalog: + vnfd: + - id: native_charm-vnf + name: native_charm-vnf + short-name: native_charm-vnf + version: 1.0 + description: A VNF consisting of 1 VDU connected to two external VL, and one for data and another one for management + logo: osm.png + connection-point: + - id: vnf-mgmt + name: vnf-mgmt + short-name: vnf-mgmt + type: VPORT + - id: vnf-data + name: vnf-data + short-name: vnf-data + type: VPORT + mgmt-interface: + cp: vnf-mgmt + vdu: + - id: mgmtVM + name: mgmtVM + image: ubuntu18.04 + count: 1 + vm-flavor: + vcpu-count: 1 + memory-mb: 1024 + storage-gb: 10 + interface: + - name: mgmtVM-eth0 + position: 1 + type: EXTERNAL + virtual-interface: + type: PARAVIRT + external-connection-point-ref: vnf-mgmt + - name: dataVM-xe0 + position: 2 + type: EXTERNAL + virtual-interface: + type: PARAVIRT + external-connection-point-ref: vnf-data + cloud-init-file: cloud-config.txt + vdu-configuration: + juju: + charm: simple + proxy: false + config-access: + ssh-access: + required: True + default-user: ubuntu + initial-config-primitive: + - seq: 1 + name: touch + parameter: + - name: filename + data-type: STRING + value: '/home/ubuntu/first-touch' + config-primitive: + - name: touch + parameter: + - name: filename + data-type: STRING + default-value: '/home/ubuntu/touched'