+#!/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)