diff --git a/.gitmodules b/.gitmodules index c3297a169c0486dc568ddaed6dec0cd8c566af86..3613fb5ed360a86ba0e157e513bfa121ce1555a5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -67,3 +67,6 @@ [submodule "charm-packages/native_k8s_scale_charm_vnf/charms/nginx-k8s/mod/operator"] path = charm-packages/native_k8s_scale_charm_vnf/charms/nginx-k8s/mod/operator url = https://github.com/canonical/operator +[submodule "charm-packages/native_manual_scale_charm_vnf/charms/simple/mod/operator"] + path = charm-packages/native_manual_scale_charm_vnf/charms/simple/mod/operator + url = https://github.com/canonical/operator.git diff --git a/charm-packages/native_manual_scale_charm_ns/icons/osm.png b/charm-packages/native_manual_scale_charm_ns/icons/osm.png new file mode 100644 index 0000000000000000000000000000000000000000..62012d2a2b491bdcd536d62c3c3c863c0d8c1b33 Binary files /dev/null and b/charm-packages/native_manual_scale_charm_ns/icons/osm.png differ diff --git a/charm-packages/native_manual_scale_charm_ns/native_charm_nsd.yaml b/charm-packages/native_manual_scale_charm_ns/native_charm_nsd.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2754bbd4c1c41b45a28b78613bfae9358f6f89ff --- /dev/null +++ b/charm-packages/native_manual_scale_charm_ns/native_charm_nsd.yaml @@ -0,0 +1,26 @@ +nsd: + nsd: + - description: NS with 1 VNFs with cloudinit connected by datanet and mgmtnet VLs + df: + - id: default-df + vnf-profile: + - id: '1' + virtual-link-connectivity: + - constituent-cpd-id: + - constituent-base-element-id: '1' + constituent-cpd-id: vnf-mgmt-ext + virtual-link-profile-id: mgmtnet + - constituent-cpd-id: + - constituent-base-element-id: '1' + constituent-cpd-id: vnf-data-ext + virtual-link-profile-id: datanet + vnfd-id: native_manual_scale_charm-vnf + id: native_manual_scale_charm-ns + name: native_manual_scale_charm-ns + version: '1.0' + virtual-link-desc: + - id: mgmtnet + mgmt-network: 'true' + - id: datanet + vnfd-id: + - native_manual_scale_charm-vnf diff --git a/charm-packages/native_manual_scale_charm_vnf/charms/simple/actions.yaml b/charm-packages/native_manual_scale_charm_vnf/charms/simple/actions.yaml new file mode 100644 index 0000000000000000000000000000000000000000..53a706b4eba7347764c4711b7077146e72241de4 --- /dev/null +++ b/charm-packages/native_manual_scale_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_manual_scale_charm_vnf/charms/simple/config.yaml b/charm-packages/native_manual_scale_charm_vnf/charms/simple/config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2be62318c6ce27156e4af585494b36d0c2b802f8 --- /dev/null +++ b/charm-packages/native_manual_scale_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_manual_scale_charm_vnf/charms/simple/hooks/install b/charm-packages/native_manual_scale_charm_vnf/charms/simple/hooks/install new file mode 120000 index 0000000000000000000000000000000000000000..25b1f68fa39d58d33c08ca420c3d439d19be0c55 --- /dev/null +++ b/charm-packages/native_manual_scale_charm_vnf/charms/simple/hooks/install @@ -0,0 +1 @@ +../src/charm.py \ No newline at end of file diff --git a/charm-packages/native_manual_scale_charm_vnf/charms/simple/hooks/start b/charm-packages/native_manual_scale_charm_vnf/charms/simple/hooks/start new file mode 120000 index 0000000000000000000000000000000000000000..25b1f68fa39d58d33c08ca420c3d439d19be0c55 --- /dev/null +++ b/charm-packages/native_manual_scale_charm_vnf/charms/simple/hooks/start @@ -0,0 +1 @@ +../src/charm.py \ No newline at end of file diff --git a/charm-packages/native_manual_scale_charm_vnf/charms/simple/hooks/upgrade-charm b/charm-packages/native_manual_scale_charm_vnf/charms/simple/hooks/upgrade-charm new file mode 120000 index 0000000000000000000000000000000000000000..25b1f68fa39d58d33c08ca420c3d439d19be0c55 --- /dev/null +++ b/charm-packages/native_manual_scale_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_manual_scale_charm_vnf/charms/simple/lib/ops b/charm-packages/native_manual_scale_charm_vnf/charms/simple/lib/ops new file mode 120000 index 0000000000000000000000000000000000000000..d93419320c2e0d3133a0bc8059e2f259bf5bb213 --- /dev/null +++ b/charm-packages/native_manual_scale_charm_vnf/charms/simple/lib/ops @@ -0,0 +1 @@ +../mod/operator/ops \ No newline at end of file diff --git a/charm-packages/native_manual_scale_charm_vnf/charms/simple/metadata.yaml b/charm-packages/native_manual_scale_charm_vnf/charms/simple/metadata.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5e832fb61f0c21dd8c17f06822679164f855e0c8 --- /dev/null +++ b/charm-packages/native_manual_scale_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_manual_scale_charm_vnf/charms/simple/mod/operator b/charm-packages/native_manual_scale_charm_vnf/charms/simple/mod/operator new file mode 160000 index 0000000000000000000000000000000000000000..a84ce8776b368a8b2bccdb173716e342db9a6b36 --- /dev/null +++ b/charm-packages/native_manual_scale_charm_vnf/charms/simple/mod/operator @@ -0,0 +1 @@ +Subproject commit a84ce8776b368a8b2bccdb173716e342db9a6b36 diff --git a/charm-packages/native_manual_scale_charm_vnf/charms/simple/src/charm.py b/charm-packages/native_manual_scale_charm_vnf/charms/simple/src/charm.py new file mode 100755 index 0000000000000000000000000000000000000000..9ef7d07286257338ea1ef940fb34f67a9052f998 --- /dev/null +++ b/charm-packages/native_manual_scale_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_manual_scale_charm_vnf/cloud_init/cloud-config.txt b/charm-packages/native_manual_scale_charm_vnf/cloud_init/cloud-config.txt new file mode 100755 index 0000000000000000000000000000000000000000..36c8d1bf2cdebbc4e50d1e8348003f64f419cd0b --- /dev/null +++ b/charm-packages/native_manual_scale_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_manual_scale_charm_vnf/icons/osm.png b/charm-packages/native_manual_scale_charm_vnf/icons/osm.png new file mode 100644 index 0000000000000000000000000000000000000000..62012d2a2b491bdcd536d62c3c3c863c0d8c1b33 Binary files /dev/null and b/charm-packages/native_manual_scale_charm_vnf/icons/osm.png differ diff --git a/charm-packages/native_manual_scale_charm_vnf/native_charm_vnfd.yaml b/charm-packages/native_manual_scale_charm_vnf/native_charm_vnfd.yaml new file mode 100644 index 0000000000000000000000000000000000000000..40c5956629107b6d6a1c7ea8a176415076e868a8 --- /dev/null +++ b/charm-packages/native_manual_scale_charm_vnf/native_charm_vnfd.yaml @@ -0,0 +1,103 @@ +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: 2 + vdu-id: mgmtVM + scaling-aspect: + - id: manual-scaling_mgmtVM + aspect-delta-details: + deltas: + - id: mgmtVM_manual-scaling + vdu-delta: + - id: mgmtVM + number-of-instances: 1 + name: manual-scaling_mgmtVM + vdu-profile: + - id: mgmtVM + min-number-of-instances: 2 + lcm-operations-configuration: + operate-vnf-op-config: + day1-2: + - config-access: + ssh-access: + default-user: ubuntu + required: true + config-primitive: + - name: touch + execution-environment-ref: simple-ee + parameter: + - data-type: STRING + default-value: /home/ubuntu/touched + name: filename + id: mgmtVM + execution-environment-list: + - id: simple-ee + juju: + charm: simple + proxy: false + initial-config-primitive: + - name: touch + execution-environment-ref: simple-ee + parameter: + - data-type: STRING + name: filename + value: /home/ubuntu/first-touch + seq: 1 + ext-cpd: + - id: vnf-mgmt-ext + int-cpd: + cpd: mgmtVM-eth0-int + vdu-id: mgmtVM + - id: vnf-data-ext + int-cpd: + cpd: dataVM-xe0-int + vdu-id: mgmtVM + id: native_manual_scale_charm-vnf + mgmt-cp: vnf-mgmt-ext + product-name: native_manual_scale_charm-vnf + sw-image-desc: + - id: ubuntu18.04 + image: ubuntu18.04 + name: ubuntu18.04 + - id: ubuntu18.04-azure + name: ubuntu18.04-azure + image: Canonical:UbuntuServer:18.04-LTS:latest + vim-type: azure + vdu: + - cloud-init-file: cloud-config.txt + id: mgmtVM + int-cpd: + - id: mgmtVM-eth0-int + virtual-network-interface-requirement: + - name: mgmtVM-eth0 + position: 1 + virtual-interface: + type: PARAVIRT + - id: dataVM-xe0-int + virtual-network-interface-requirement: + - name: dataVM-xe0 + position: 2 + virtual-interface: + type: PARAVIRT + name: mgmtVM + sw-image-desc: ubuntu18.04 + alternative-sw-image-desc: + - ubuntu18.04-azure + virtual-compute-desc: mgmtVM-compute + virtual-storage-desc: + - mgmtVM-storage + version: 1.0 + virtual-compute-desc: + - id: mgmtVM-compute + virtual-cpu: + num-virtual-cpu: 1 + virtual-memory: + size: 1.0 + virtual-storage-desc: + - id: mgmtVM-storage + size-of-storage: 10