Loading hackfest_virtual-pc_ns/hackfest_virtual-pc_nsd.yaml +1 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ # under the License. nsd: nsd: - description: Virtual Desktop Computer with Xubuntu Desktop and RDP - description: Virtual Desktop Computer with Mate Desktop and RDP designer: OSM df: - id: default-df Loading hackfest_virtual-pc_vnfd/charms/virtual-pc-src/actions.yaml +30 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,26 @@ add-package: required: - package add-snap: description: "Adds software packages from snap store." params: package: description: "Names of packages to add, comma delimited." type: string default: "" required: - package announce: description: "Sends a message to logged in users" params: message: description: "Message to send" type: string default: "" required: - message reboot: description: "Reboots the server." Loading @@ -28,6 +48,16 @@ remove-package: required: - package remove-snap: description: "Adds software packages from snap store." params: package: description: "Names of packages to add, comma delimited." type: string default: "" required: - package update-system: description: "Updates all software to latest version." hackfest_virtual-pc_vnfd/charms/virtual-pc-src/src/charm.py +33 −5 Original line number Diff line number Diff line Loading @@ -20,7 +20,9 @@ from utils import ( service_stop, service_restart, install_apt, remove_apt, shell, upgrade_apt, ) Loading @@ -31,16 +33,19 @@ APT_PROXY_PATH = "/etc/apt/apt.conf.d/99-HIVE-apt-proxy" APT_PROXY_TEMPLATE = "./templates/proxy" APT_REQUIREMENTS = [ "firefox", "mate-desktop", # 469 packages "indicator-applet-session", "libnotify-bin", "mate-desktop", "mate-applets", "mate-applet-brisk-menu", "mate-indicator-applet", "mate-notification-daemon", "mate-session-manager", "mate-terminal", "xrdp", ] SNAP_INSTALLS = [ "code --classic", #"code --classic", ] POLKIT_TEMPLATE = "./templates/color.pkla" POLKIT_PATH = "/etc/polkit-1/localauthority/50-local.d/color.pkla" Loading Loading @@ -69,8 +74,11 @@ class VirtualPCCharm(CharmBase, InstallProgress): # Actions hooks self.framework.observe(self.on["add-package"].action, self._add_package) self.framework.observe(self.on["add-snap"].action, self._add_snap) self.framework.observe(self.on["announce"].action, self._announce) self.framework.observe(self.on["reboot"].action, self._reboot) self.framework.observe(self.on["remove-package"].action, self._remove_package) self.framework.observe(self.on["remove-snap"].action, self._remove_snap) self.framework.observe(self.on["update-system"].action, self._update_system) # Relations hooks Loading Loading @@ -116,6 +124,7 @@ class VirtualPCCharm(CharmBase, InstallProgress): polkit.write(content) self._stored.installed = True self.unit.status = self._get_current_status() def _on_start(self, _): self.unit.status = MaintenanceStatus("Starting XRDP server") Loading @@ -135,25 +144,44 @@ class VirtualPCCharm(CharmBase, InstallProgress): self.unit.status = self._get_current_status() # Action hooks def _add_package(self, _): def _add_package(self, event): self.unit.status = MaintenanceStatus("Installing apt packages") install_apt(packages=event.params["package"].split(','), update=True, progress=self) self.unit.status = self._get_current_status() def _add_snap(self, event): self.unit.status = MaintenanceStatus("Installing snaps") for snap in event.params["package"].split(','): shell("sudo snap install " + snap) self.unit.status = self._get_current_status() def _announce(self, event): self.unit.status = MaintenanceStatus("Announce") shell("su - ubuntu -c 'XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send \"" + message + "\"'") self.unit.status = self._get_current_status() def _reboot(self, _): self.unit.status = MaintenanceStatus("Rebooting server") shell("reboot --reboot") shell("su - ubuntu -c 'XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send \"System is going down for reboot in 60 seconds\" -u critical'") shell("shutdown -r +1") self.unit.status = self._get_current_status() def _remove_package(self, _): def _remove_package(self, event): self.unit.status = MaintenanceStatus("Removing apt packages") remove_apt(packages=event.params["package"].split(','), update=True, progress=self) self.unit.status = self._get_current_status() def _remove_snap(self, event): self.unit.status = MaintenanceStatus("Removing snaps") for snap in event.params["package"].split(','): shell("sudo snap remove" + snap) self.unit.status = self._get_current_status() def _update_system(self, _): self.unit.status = MaintenanceStatus("Updating system") upgrade_apt(update=True, progress=self) self.unit.status = self._get_current_status() # Relation hooks Loading hackfest_virtual-pc_vnfd/charms/virtual-pc-src/src/utils.py +12 −4 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ def all_values_set(dictionary: Dict[str, str]) -> bool: def install_apt(packages: List, update: bool = False, progress=None) -> NoReturn: cache = apt.cache.Cache() if update: cache.update() Loading @@ -31,16 +30,25 @@ def install_apt(packages: List, update: bool = False, progress=None) -> NoReturn cache.commit(install_progress=progress) def remove_apt(packages: List, update: bool = False) -> NoReturn: def remove_apt(packages: List, update: bool = False, progress=None) -> NoReturn: cache = apt.cache.Cache() if update: cache.update() cache.open() for package in packages: pkg = cache[package] if not pkg.is_installed: if pkg.is_installed: pkg.mark_delete() cache.commit() cache.commit(install_progress=progress) def upgrade_apt(update: bool = False, progress=None) -> NoReturn: cache = apt.cache.Cache() if update: cache.update() cache.open() cache.upgrade(dist_upgrade=True) cache.commit(install_progress=progress) def shell(command: str) -> NoReturn: Loading hackfest_virtual-pc_vnfd/charms/virtual-pc/actions.yaml +30 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,26 @@ add-package: required: - package add-snap: description: "Adds software packages from snap store." params: package: description: "Names of packages to add, comma delimited." type: string default: "" required: - package announce: description: "Sends a message to logged in users" params: message: description: "Message to send" type: string default: "" required: - message reboot: description: "Reboots the server." Loading @@ -28,6 +48,16 @@ remove-package: required: - package remove-snap: description: "Adds software packages from snap store." params: package: description: "Names of packages to add, comma delimited." type: string default: "" required: - package update-system: description: "Updates all software to latest version." Loading
hackfest_virtual-pc_ns/hackfest_virtual-pc_nsd.yaml +1 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ # under the License. nsd: nsd: - description: Virtual Desktop Computer with Xubuntu Desktop and RDP - description: Virtual Desktop Computer with Mate Desktop and RDP designer: OSM df: - id: default-df Loading
hackfest_virtual-pc_vnfd/charms/virtual-pc-src/actions.yaml +30 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,26 @@ add-package: required: - package add-snap: description: "Adds software packages from snap store." params: package: description: "Names of packages to add, comma delimited." type: string default: "" required: - package announce: description: "Sends a message to logged in users" params: message: description: "Message to send" type: string default: "" required: - message reboot: description: "Reboots the server." Loading @@ -28,6 +48,16 @@ remove-package: required: - package remove-snap: description: "Adds software packages from snap store." params: package: description: "Names of packages to add, comma delimited." type: string default: "" required: - package update-system: description: "Updates all software to latest version."
hackfest_virtual-pc_vnfd/charms/virtual-pc-src/src/charm.py +33 −5 Original line number Diff line number Diff line Loading @@ -20,7 +20,9 @@ from utils import ( service_stop, service_restart, install_apt, remove_apt, shell, upgrade_apt, ) Loading @@ -31,16 +33,19 @@ APT_PROXY_PATH = "/etc/apt/apt.conf.d/99-HIVE-apt-proxy" APT_PROXY_TEMPLATE = "./templates/proxy" APT_REQUIREMENTS = [ "firefox", "mate-desktop", # 469 packages "indicator-applet-session", "libnotify-bin", "mate-desktop", "mate-applets", "mate-applet-brisk-menu", "mate-indicator-applet", "mate-notification-daemon", "mate-session-manager", "mate-terminal", "xrdp", ] SNAP_INSTALLS = [ "code --classic", #"code --classic", ] POLKIT_TEMPLATE = "./templates/color.pkla" POLKIT_PATH = "/etc/polkit-1/localauthority/50-local.d/color.pkla" Loading Loading @@ -69,8 +74,11 @@ class VirtualPCCharm(CharmBase, InstallProgress): # Actions hooks self.framework.observe(self.on["add-package"].action, self._add_package) self.framework.observe(self.on["add-snap"].action, self._add_snap) self.framework.observe(self.on["announce"].action, self._announce) self.framework.observe(self.on["reboot"].action, self._reboot) self.framework.observe(self.on["remove-package"].action, self._remove_package) self.framework.observe(self.on["remove-snap"].action, self._remove_snap) self.framework.observe(self.on["update-system"].action, self._update_system) # Relations hooks Loading Loading @@ -116,6 +124,7 @@ class VirtualPCCharm(CharmBase, InstallProgress): polkit.write(content) self._stored.installed = True self.unit.status = self._get_current_status() def _on_start(self, _): self.unit.status = MaintenanceStatus("Starting XRDP server") Loading @@ -135,25 +144,44 @@ class VirtualPCCharm(CharmBase, InstallProgress): self.unit.status = self._get_current_status() # Action hooks def _add_package(self, _): def _add_package(self, event): self.unit.status = MaintenanceStatus("Installing apt packages") install_apt(packages=event.params["package"].split(','), update=True, progress=self) self.unit.status = self._get_current_status() def _add_snap(self, event): self.unit.status = MaintenanceStatus("Installing snaps") for snap in event.params["package"].split(','): shell("sudo snap install " + snap) self.unit.status = self._get_current_status() def _announce(self, event): self.unit.status = MaintenanceStatus("Announce") shell("su - ubuntu -c 'XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send \"" + message + "\"'") self.unit.status = self._get_current_status() def _reboot(self, _): self.unit.status = MaintenanceStatus("Rebooting server") shell("reboot --reboot") shell("su - ubuntu -c 'XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send \"System is going down for reboot in 60 seconds\" -u critical'") shell("shutdown -r +1") self.unit.status = self._get_current_status() def _remove_package(self, _): def _remove_package(self, event): self.unit.status = MaintenanceStatus("Removing apt packages") remove_apt(packages=event.params["package"].split(','), update=True, progress=self) self.unit.status = self._get_current_status() def _remove_snap(self, event): self.unit.status = MaintenanceStatus("Removing snaps") for snap in event.params["package"].split(','): shell("sudo snap remove" + snap) self.unit.status = self._get_current_status() def _update_system(self, _): self.unit.status = MaintenanceStatus("Updating system") upgrade_apt(update=True, progress=self) self.unit.status = self._get_current_status() # Relation hooks Loading
hackfest_virtual-pc_vnfd/charms/virtual-pc-src/src/utils.py +12 −4 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ def all_values_set(dictionary: Dict[str, str]) -> bool: def install_apt(packages: List, update: bool = False, progress=None) -> NoReturn: cache = apt.cache.Cache() if update: cache.update() Loading @@ -31,16 +30,25 @@ def install_apt(packages: List, update: bool = False, progress=None) -> NoReturn cache.commit(install_progress=progress) def remove_apt(packages: List, update: bool = False) -> NoReturn: def remove_apt(packages: List, update: bool = False, progress=None) -> NoReturn: cache = apt.cache.Cache() if update: cache.update() cache.open() for package in packages: pkg = cache[package] if not pkg.is_installed: if pkg.is_installed: pkg.mark_delete() cache.commit() cache.commit(install_progress=progress) def upgrade_apt(update: bool = False, progress=None) -> NoReturn: cache = apt.cache.Cache() if update: cache.update() cache.open() cache.upgrade(dist_upgrade=True) cache.commit(install_progress=progress) def shell(command: str) -> NoReturn: Loading
hackfest_virtual-pc_vnfd/charms/virtual-pc/actions.yaml +30 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,26 @@ add-package: required: - package add-snap: description: "Adds software packages from snap store." params: package: description: "Names of packages to add, comma delimited." type: string default: "" required: - package announce: description: "Sends a message to logged in users" params: message: description: "Message to send" type: string default: "" required: - message reboot: description: "Reboots the server." Loading @@ -28,6 +48,16 @@ remove-package: required: - package remove-snap: description: "Adds software packages from snap store." params: package: description: "Names of packages to add, comma delimited." type: string default: "" required: - package update-system: description: "Updates all software to latest version."