Skip to content
Snippets Groups Projects
Commit c1f96583 authored by Mark Beierl's avatar Mark Beierl
Browse files

Adding more commands


Signed-off-by: default avatarbeierlm <mark.beierl@canonical.com>
parent f254c0b2
No related branches found
No related tags found
1 merge request!134Adding more commands
Pipeline #266 passed with stage
in 2 minutes and 16 seconds
......@@ -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
......
......@@ -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."
......@@ -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
......
......@@ -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:
......
......@@ -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."
......@@ -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
......
......@@ -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:
......
......@@ -17,7 +17,7 @@ vnfd:
ssh-access:
default-user: ubuntu
required: true
id: virtual-pc
id: hackfest_virtual-pc_vnf
execution-environment-list:
- id: virtual-pc-ee
juju:
......@@ -33,6 +33,16 @@ vnfd:
parameter:
- data-type: STRING
name: package
- name: add-snap
execution-environment-ref: virtual-pc-ee
parameter:
- data-type: STRING
name: package
- name: announce
execution-environment-ref: virtual-pc-ee
parameter:
- data-type: STRING
name: message
- name: reboot
execution-environment-ref: virtual-pc-ee
- name: remove-package
......@@ -40,6 +50,11 @@ vnfd:
parameter:
- data-type: STRING
name: package
- name: remove-snap
execution-environment-ref: virtual-pc-ee
parameter:
- data-type: STRING
name: package
- name: update-system
execution-environment-ref: virtual-pc-ee
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment