diff --git a/charm-packages/k8s_proxy_charm_day1_and_day2_ns/icons/osm.png b/charm-packages/k8s_proxy_charm_day1_and_day2_ns/icons/osm.png new file mode 100644 index 0000000000000000000000000000000000000000..62012d2a2b491bdcd536d62c3c3c863c0d8c1b33 Binary files /dev/null and b/charm-packages/k8s_proxy_charm_day1_and_day2_ns/icons/osm.png differ diff --git a/charm-packages/k8s_proxy_charm_day1_and_day2_ns/k8s_proxy_charm_day1_and_day2_nsd.yaml b/charm-packages/k8s_proxy_charm_day1_and_day2_ns/k8s_proxy_charm_day1_and_day2_nsd.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7c84bf26e99d7c1c95a983eea331e67fecba7a3e --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_and_day2_ns/k8s_proxy_charm_day1_and_day2_nsd.yaml @@ -0,0 +1,38 @@ +nsd: + nsd: + - description: NS with 2 VNFs with cloudinit connected by datanet and mgmtnet VLs + df: + - id: default-df + vnf-profile: + - id: vnf1 + virtual-link-connectivity: + - constituent-cpd-id: + - constituent-base-element-id: vnf1 + constituent-cpd-id: vnf-mgmt-ext + virtual-link-profile-id: mgmtnet + - constituent-cpd-id: + - constituent-base-element-id: vnf1 + constituent-cpd-id: vnf-data-ext + virtual-link-profile-id: datanet + vnfd-id: k8s_proxy_charm_day1_only-vnf + - id: vnf2 + virtual-link-connectivity: + - constituent-cpd-id: + - constituent-base-element-id: vnf2 + constituent-cpd-id: vnf-mgmt-ext + virtual-link-profile-id: mgmtnet + - constituent-cpd-id: + - constituent-base-element-id: vnf2 + constituent-cpd-id: vnf-data-ext + virtual-link-profile-id: datanet + vnfd-id: k8s_proxy_charm-vnf + id: k8s_proxy_charm_day1_and_day2-ns + name: k8s_proxy_charm_day1_and_day2-ns + version: 1.0 + virtual-link-desc: + - id: mgmtnet + mgmt-network: true + - id: datanet + vnfd-id: + - k8s_proxy_charm_day1_only-vnf + - k8s_proxy_charm-vnf diff --git a/charm-packages/k8s_proxy_charm_day1_only_ns/icons/osm.png b/charm-packages/k8s_proxy_charm_day1_only_ns/icons/osm.png new file mode 100644 index 0000000000000000000000000000000000000000..62012d2a2b491bdcd536d62c3c3c863c0d8c1b33 Binary files /dev/null and b/charm-packages/k8s_proxy_charm_day1_only_ns/icons/osm.png differ diff --git a/charm-packages/k8s_proxy_charm_day1_only_ns/k8s_proxy_charm_day1_only_nsd.yaml b/charm-packages/k8s_proxy_charm_day1_only_ns/k8s_proxy_charm_day1_only_nsd.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c38ddd136695d6e9fbc57e000c5a4ba03ac30f7f --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_ns/k8s_proxy_charm_day1_only_nsd.yaml @@ -0,0 +1,37 @@ +nsd: + nsd: + - description: NS with 2 VNFs with cloudinit connected by datanet and mgmtnet VLs + df: + - id: default-df + vnf-profile: + - id: vnf1 + virtual-link-connectivity: + - constituent-cpd-id: + - constituent-base-element-id: vnf1 + constituent-cpd-id: vnf-mgmt-ext + virtual-link-profile-id: mgmtnet + - constituent-cpd-id: + - constituent-base-element-id: vnf1 + constituent-cpd-id: vnf-data-ext + virtual-link-profile-id: datanet + vnfd-id: k8s_proxy_charm_day1_only-vnf + - id: vnf2 + virtual-link-connectivity: + - constituent-cpd-id: + - constituent-base-element-id: vnf2 + constituent-cpd-id: vnf-mgmt-ext + virtual-link-profile-id: mgmtnet + - constituent-cpd-id: + - constituent-base-element-id: vnf2 + constituent-cpd-id: vnf-data-ext + virtual-link-profile-id: datanet + vnfd-id: k8s_proxy_charm_day1_only-vnf + id: k8s_proxy_charm_day1_only-ns + name: k8s_proxy_charm_day1_only-ns + version: 1.0 + virtual-link-desc: + - id: mgmtnet + mgmt-network: true + - id: datanet + vnfd-id: + - k8s_proxy_charm_day1_only-vnf diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/actions.yaml b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/actions.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f9882c47bba960254e0381e5b5ab1c0688de6cf5 --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/actions.yaml @@ -0,0 +1,54 @@ +## +# 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 + +# 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." diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/config.yaml b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..93e3cab01c0843418c57e4bc918eb933f2daf934 --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/config.yaml @@ -0,0 +1,41 @@ +## +# 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: + 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-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." diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/hooks/install b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/hooks/install new file mode 120000 index 0000000000000000000000000000000000000000..25b1f68fa39d58d33c08ca420c3d439d19be0c55 --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/hooks/install @@ -0,0 +1 @@ +../src/charm.py \ No newline at end of file diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/hooks/start b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/hooks/start new file mode 120000 index 0000000000000000000000000000000000000000..25b1f68fa39d58d33c08ca420c3d439d19be0c55 --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/hooks/start @@ -0,0 +1 @@ +../src/charm.py \ No newline at end of file diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/hooks/upgrade-charm b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/hooks/upgrade-charm new file mode 120000 index 0000000000000000000000000000000000000000..25b1f68fa39d58d33c08ca420c3d439d19be0c55 --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/hooks/upgrade-charm @@ -0,0 +1 @@ +../src/charm.py \ No newline at end of file diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/lib/charms b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/lib/charms new file mode 120000 index 0000000000000000000000000000000000000000..bbb3079ba31017d6958b659dc899d072b1c8e724 --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/lib/charms @@ -0,0 +1 @@ +../mod/charms.osm/charms \ No newline at end of file diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/lib/ops b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/lib/ops new file mode 120000 index 0000000000000000000000000000000000000000..d93419320c2e0d3133a0bc8059e2f259bf5bb213 --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/lib/ops @@ -0,0 +1 @@ +../mod/operator/ops \ No newline at end of file diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/metadata.yaml b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/metadata.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4b5b352850eb98a4e2028942957cebc622a2395e --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/metadata.yaml @@ -0,0 +1,28 @@ +## +# 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-k8s-proxy +summary: A simple example proxy charm +description: | + Simple proxy charm is an example charm used in OSM Hackfests +series: + - kubernetes +peers: + proxypeer: + interface: proxypeer +deployment: + mode: operator \ No newline at end of file diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/src/charm.py b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/src/charm.py new file mode 100755 index 0000000000000000000000000000000000000000..e23b12b7bcfddfd49d4efbc1b0ac72d92579778a --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_vnf/charms/simple/src/charm.py @@ -0,0 +1,65 @@ +#!/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 + +sys.path.append("lib") + +from charms.osm.sshproxy import SSHProxyCharm +from ops.main import main + +class MySSHProxyCharm(SSHProxyCharm): + + 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""" + super().on_config_changed(event) + + def on_install(self, event): + """Called when the charm is being installed""" + super().on_install(event) + + def on_start(self, event): + """Called when the charm is being started""" + super().on_start(event) + + def on_touch_action(self, event): + """Touch a file.""" + + if self.model.unit.is_leader(): + filename = event.params["filename"] + proxy = self.get_ssh_proxy() + stdout, stderr = proxy.run("touch {}".format(filename)) + event.set_results({"output": stdout}) + else: + event.fail("Unit is not leader") + return + +if __name__ == "__main__": + main(MySSHProxyCharm) + diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/cloud_init/cloud-config.txt b/charm-packages/k8s_proxy_charm_day1_only_vnf/cloud_init/cloud-config.txt new file mode 100755 index 0000000000000000000000000000000000000000..36c8d1bf2cdebbc4e50d1e8348003f64f419cd0b --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_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/k8s_proxy_charm_day1_only_vnf/icons/osm.png b/charm-packages/k8s_proxy_charm_day1_only_vnf/icons/osm.png new file mode 100644 index 0000000000000000000000000000000000000000..62012d2a2b491bdcd536d62c3c3c863c0d8c1b33 Binary files /dev/null and b/charm-packages/k8s_proxy_charm_day1_only_vnf/icons/osm.png differ diff --git a/charm-packages/k8s_proxy_charm_day1_only_vnf/k8s_proxy_charm_day1_only_vnfd.yaml b/charm-packages/k8s_proxy_charm_day1_only_vnf/k8s_proxy_charm_day1_only_vnfd.yaml new file mode 100644 index 0000000000000000000000000000000000000000..717bd5068c7813e8a223c80f25aa41ad1ea7b41b --- /dev/null +++ b/charm-packages/k8s_proxy_charm_day1_only_vnf/k8s_proxy_charm_day1_only_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: 1 + vdu-id: mgmtVM + vdu-profile: + - id: mgmtVM + min-number-of-instances: 1 + lcm-operations-configuration: + operate-vnf-op-config: + day1-2: + - config-access: + ssh-access: + default-user: ubuntu + required: true + execution-environment-list: + - id: simple-ee + juju: + charm: simple + cloud: k8s + id: k8s_proxy_charm_day1_only-vnf + initial-config-primitive: + - name: config + execution-environment-ref: simple-ee + parameter: + - name: ssh-hostname + value: + - name: ssh-username + value: ubuntu + - name: ssh-password + value: osm4u + seq: 1 + - name: touch + execution-environment-ref: simple-ee + parameter: + - data-type: STRING + name: filename + value: /home/ubuntu/first-touch + seq: 2 + 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: k8s_proxy_charm_day1_only-vnf + mgmt-cp: vnf-mgmt-ext + product-name: k8s_proxy_charm_day1_only-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 + - id: ubuntu18.04-gcp + name: ubuntu18.04-gcp + image: ubuntu-os-cloud:image-family:ubuntu-1804-lts + vim-type: gcp + 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 + - ubuntu18.04-gcp + 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