Commit 36bcc70b authored by Mark Beierl's avatar Mark Beierl
Browse files

Merge branch 'beierlm-virtualpc' into 'master'

Adding more commands

See merge request !134
parents f254c0b2 c1f96583
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+30 −0
Original line number Diff line number Diff line
@@ -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."

@@ -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."
+33 −5
Original line number Diff line number Diff line
@@ -20,7 +20,9 @@ from utils import (
    service_stop,
    service_restart,
    install_apt,
    remove_apt,
    shell,
    upgrade_apt,
)


@@ -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"
@@ -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
@@ -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")
@@ -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
+12 −4
Original line number Diff line number Diff line
@@ -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()
@@ -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:
+30 −0
Original line number Diff line number Diff line
@@ -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."

@@ -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