Adds SOL004 package validator with package examples and tests
[osm/common.git] / osm_common / tests / packages / native_charm_with_metadata_dir_vnf / Scripts / charms / simple / src / charm.py
diff --git a/osm_common/tests/packages/native_charm_with_metadata_dir_vnf/Scripts/charms/simple/src/charm.py b/osm_common/tests/packages/native_charm_with_metadata_dir_vnf/Scripts/charms/simple/src/charm.py
new file mode 100755 (executable)
index 0000000..409f286
--- /dev/null
@@ -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
+
+from ops.charm import CharmBase
+from ops.main import main
+from ops.model import ActiveStatus
+
+sys.path.append("lib")
+
+
+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)