- [Enhancement] Enable
show_in_read_only_mode
XBlock attribute to allow instuctors to use this XBlock while masquerading as a specific learner.
- [Enhancement] Add support for the Open edX Redwood release.
- [Enhancement] Update to a newer Twisted version.
- [Enhancement] Update to a newer Paramiko version.
- [Bug fix] Stop installing the XBlock in editable mode with
-e .
- [Enhancement] Add better error handling for missing Provider configuration.
- [Enhancement] Add support for Python 3.12.
- [Bug fix] Don't allow accessing a fullscreen lab directly from a URL, when the user is unauthenticated. Return a 401 right away when attempted.
- [Enhancement] Add support for Apache Guacamole 1.5.4; make it the new default version.
- [Enhancement] Update requirements for Open edX Quince release.
- [Bug fix] Include missing XBlock attributes in a course export.
- [Bug fix] Fix
enable_fullscreen
setting overrides via the XBlock attribute.
- [Enhancement] Add an option to launch the lab in a new window.
- [Bug fix] Fix private key getting lost after a stack resume failure. Make sure we keep the stack key in place when running cleanup on a stack that failed to resume.
- [Bug fix] Fix editing the
stack_key_type
field in Studio; include the attribute in Studio export. - [Bug fix] Add better handling for SSH key cleanup when deleting stacks.
- [Bug fix] Fix resuming a lab stack when the
stack_key_type
attribute is used and the SSH key for the lab is generated by the XBlock. - [Bug fix] Restrict Twisted dependency to
twisted<23.8.0
to remain installable on Python 3.8 and 3.9.
- [Enhancement] Add support for Ed25519 SSH keys by introducing
a new optional XBlock attribute
stack_key_type
. When used, it is possible to generate eitherRSA
orEd25519
key for the lab. If set toNone
(default), the key handling should be done via the lab template, as it has been so far.
- [Enhancement] Add support for Apache Guacamole 1.5.2; make it the new default version.
- [Enhancement] Update requirements for Open edX Olive release.
- [Bug fix] Restore the
paste
functionality by addressing the related changes in theguacamole-js
library. - [Enhancement] Add support for copying text out from the terminal using the Async Clipboard API. This works on Mozilla Firefox at this time. Support in other browsers may follow.
- [Enhancement] Add internationalization support.
- [Enhancement] Add learner email to stacklist view in the admin page and include it in searchable fields.
-
[Enhancement] Add custom actions to the admin interface to
- clear the stacklog for selected stack(s),
- set status to
SUSPEND_COMPLETE
for selected stack(s).
Clearing the stacklog will be particulary useful in cases we need to "reset" a lab usage timer, since the time is accumulated by the stacklog entries. Setting a status to
SUSPEND_COMPLETE
is a common fix for stacks that end up in unexpected states.
- [Bug fix] Retry
read_from_contentstore()
. Usetenacity
's retry functionality for getting course information from contentstore.
- [Bug fix] From Celery 5.0.0 the legacy task API was discontinued. This meant that the Task base class no longer automatically registered child tasks in Open edX Nutmeg (which uses Celery 5.2.6). Manually register the class-based tasks on the Celery app instance.
- [BREAKING CHANGE] Update the
hastexo_guacamole_client
to Channels 3. The asgi root application (ASGI_APPLICATION
) is now defined in theasgi.py
file instead ofrouting.py
file. The asgi application now also checks for allowed hosts, meaning if you want to allow the LMS to connect to labs via thehastexo_guacamole_client
, the LMS host has to be listed inALLOWED_HOSTS
athastexo_guacamole_client.settings.py
. - [Documentation] Remove obsolete deployment instructions for the old “native” (Ansible-based) installation, and the old Devstack.
- [Enhancement] Add an option to override the
suspend_timeout
global setting via an XBlock attribute, in seconds.
- [Bug fix] Fix migrations around the
lab_usage_limit
feature introduced in 6.1.0. This unbreaks migrations in the event that some stacks cannot be linked to an existing user account.
- [Bug fix] Bring back
asgiref
constraint and lowerDjango
constraint. These need to be in sync with thechannels
version requirements.
- [Bug fix] Add a check to the
add_user_foreign_key
migration file to find stacks that are missing a link to a real user account. If such stack(s) exist, do not attempt to apply the migration, instead raise an exception and provide an error message with guidance on how to proceed.
- [Enhancement] Install a newer version of the Paramiko library.
- [Bug fix] Set upper bounds for the
install_requires
list insetup.py
, to match those set inrequirements.txt
. This fixes a version incompatibility problem when the package is installed by pip version 20 and earlier, which would lead topkg_resources.ContextualVersionConflict
errors when deployed on Open edX Maple. - [Testing] Enhance the test matrix to include the pip versions used in Open edX Maple (20.0.2) and Nutmeg (22.0.4), and use pipdeptree to automatically flag dependency version inconsistencies.
- [Enhancement] Add
hidden
option for spinning up a lab environment in the background while the lab itself is hidden.
- [Enhancement] Be more specific when raising the exception for restricting lab access due to lab usage limit being reached.
- [Enhancement] Add an option to track and limit a learners lab
usage. To support time tracking, link a learner to their stacks
across the platform by adding a Foreign Key field for user to
the Stack object.
Add configuration options for setting a time limit for using labs
(
lab_usage_limit
) in seconds and how to handle a breach of the set limit (lab_usage_limit_breach_policy
). - [Testing] Include XBlock 1.6 in the test matrix.
- [Documentation] Update README with improved instructions for Open edX Maple (using Tutor) and Lilac (using edx-configuration).
- [Bug fix] Don't fail to run if a listed provider is not configured. Allow to move on to the next provider and log a warning message for the provider initialisation failure.
- [BREAKING CHANGE] Update the
GUACD_*
environment variables to better suit a Tutor deployment. Rename the variables toGUACD_SERVICE_HOST
andGUACD_SERVICE_PORT
to directly read values set for the guacd service with thetutor k8s
deployment. Update the default values to support thetutor local
/tutor dev
deployment. - [BREAKING CHANGE] Update dependencies that should be in sync with
edx-platform
to support theMaple
release. As of 6.0, this XBlock only supports Open edX versions Maple and higher. As the community has switched the supported deployment method from edx-configuration playbooks to Tutor, this XBlock can also be deployed with Tutor only. Instructions for the latter can be found in the README. - [Enhancement] Add support for Tutor deployment, by dropping the
wait_for_ping
logic. - [Enhancement] Add support for Apache Guacamole version
1.4.0
, make it the new default. - [Enhancement] Make the
guacamole-common-js
library version configurable by theguacamole_js_version
setting. - [Bug fix] Fix unbalanced tags (
<p>
vs.<div>
) in the staticmain.html
template. - [Testing] Add basic HTML validation for static templates.
- [Enhancement] Add constraints to Django version requirement for
the
hastexo_guacamole_client
.
- [Bug fix] Make sure that any error message that is added to the
error_msg
field of a stack, gets truncated before a stack update. - [Testing] Include XBlock 1.5 in the test matrix, remove XBlock 1.3.
- [Testing] Include Python 3.9 in the test matrix, remove remnants of Python 3.5 test coverage.
- [Bug fix] Truncate the error message for
LaunchError
to fit 256 characters and thus, could be added to theerror_msg
field of aStack
.
- [Bug fix] Make XBlock exports (from Studio or its REST API) deterministic and predictable.
- [Enhancement] Add tests for the new export/import logic.
- [Bug fix] Restrict stack names to ASCII characters and digits.
- [Bug fix] Fix RDP connectivity check for IPv6 stacks.
- [Enhancement] Speed up progress checks by reducing the sleep time when waiting for a remote execution of a command to finish.
- [Bug fix] Add constraints to
dogpile.cache
andcliff
, so that our OpenStack client libraries will not have dependency conflicts.
- [Enhancement] Relax version constraints in
requirements/base.txt
so that the OpenStack Train release becomes our reference point for OpenStack client libraries. Simultaneously, relax the version constraints for Paramiko and Tenacity.
- [Enhancement] Display the "check progress" button (if enabled) in blue, to provide greater contrast to the red reset button.
- [Enhancement] Make the warning learners see when they reset a lab more verbose. Also, add a specific warning in case the XBlock is being displayed in a timed exam, indicating that the exam timer will continue to run while the lab is being reset.
- [Bug fix] Revert previous unsuccessful attempt to refactor Celery logic.
- [Bug fix] Use the "old" Celery Task base class, which our tasks were originally built on.
Do not use this release. This contains a change breaking Celery task invocation, and was never published on PyPI.
- [Bug fix] Refactor Celery tasks logic to define a Celery app and register our class based tasks to that app.
- [Bug fix] Refactor closing ssh connection in
finally
blocks.
- [Bug fix] Add
null=True
forkey
andpassword
in the Stack model. The fix in 5.0.4 does not lead to the desired schema update on MariaDB 10.2 (it does not change the schema at all), so rather than using a default, allow NULL values instead.
- [Enhancement] Use full names for common.djangoapps imports from edx-platform.
- [Enhancement] Update requirements for Open EdX Koa release.
- [Bug fix] Fix two missing defaults in the Stack model.
- [Bug fix] Update test dependencies to address CVE-2021-3281.
- [Enhancement] Add logging to provider actions, to make interactions with cloud platforms more easily traceable.
- [Bug fix] Make Paramiko SSH connections more robust against socket timeouts (and retry the connection if it runs into one).
- [DEPRECATION] As of this release, the previous implementation that
relied on the Guacamole Tomcat servlet is deprecated. A
stable-4.1
branch exists that might still receive bugfixes for some time, but do not count on this being supported any longer than the lifetime of the Open edX Koa release. The Ansible playbooks that tie intoedx-configuration
have been updated to “do the right thing” based on the hastexo XBlock version being deployed: for version 5 and up, they deploy Daphne and pyguacamole; for earlier versions, they continue to deploy Tomcat and the Guacamole servlet.
- [Bug fix] Add a default
port
value forrdp
connections.
- Merge recent changes from 4.1 into 5.0 RC branch.
- [Bug fix] Fix
read_only
modekey
andmouse
event filtering logic.
- [Enhancement] Implement the
read_only
mode in the websocket consumer by not passing anykey
ormouse
events toguacamole
when set toTrue
. - [Bug fix] Include
stack_protocol
attribute when initializing the javascript code so that the terminal height value will be calculated correctly. - [Bug fix] Refactor asyncio task creation logic to also work with python3.5.
- [Bug fix] Add missing dependencies for
hastexo_guacamole_client
.
- [Enhancement] Allow overriding settings for the
hastexo_guacamole_client
from a configuration file by defining it asHASTEXO_GUACAMOLE_CFG
.
- [BREAKING CHANGE] Replace Guacamole servlet with a Django ASGI
application, which uses Django-Channels and the
pyguacamole library.
As of 5.0, deployment of this XBlock will no longer rely on the Apache Tomcat servlet container, which Guacamole normally uses, but instead on the Daphne ASGI server. If you have been deploying this XBlock with the modified edx-configuration playbooks as explained in the README, deployment should still be automatic for you. It is, however, strongly advised that you respin your app servers from scratch, in order to keep any residual Tomcat servlet configuration from lingering on them.
- [Bug fix] When deleting learner state, the
stack_name
value gets wiped out. If we then try to update the stack (for example viakeepalive
) we getStack.DoesNotExist
error. Check ifstack_name
has a value before attempting to update and if not, set it again.
- [Bug fix] Implement more of
ScorableXBlockMixin
functionality for using the grading related instructor tasks like overriding and rescoring learner's submissions.
- [Bug fix] Make the XBlock a subclass of
ScorableXBlockMixin
so grades would be calculated correctly for each subsection. - [Enhancement] Make progress check wait dialog wording more general and more suitable for different progress check configurations.
[Bug fix] Fix export error, when provider attributes are not defined.
[Enhancement] Make the progress check result header configurable and allow to enable/disable showing feedback for task completion.
[Enhancement] Allow to enable/disable displaying test stderr output streams as hints. [Enhancement] Make the progress check button label configurable.
- [Bug fix] Fix ICMP connectivity check for IPv6-only stacks.
- [Enhancement] Run integration tests in GitHub Actions, rather than Travis CI.
- [Bug fix] Only add
template
andenvironment
attributes to a provider during course export and import when they have a value. Adding anull
orNone
values can cause breakage with spinning up labs. - [Enhancement] Update test requirements.
- [Enhancement] Add a
read_only
XBlock attribute which, when set, blocks all keyboard and mouse interaction with the Guacamole terminal (effectively rendering it read-only). Defaults tofalse
, meaning the terminal is rendered with full interactivity by default.
- [Bug fix] The XBlock allows to configure the layout for lab instructions to be either above, below, left or right from the terminal. However, that configuration was not working properly for lab instructions that are in a nested block.
- [Bug fix] Correct the erroneous Maven
pom.xml
that accidentally bumped 4.0.0 references to 4.1.0 in the prior release. It should obviously have only bumped the package's own<version>
string, and not the model version, schema, or namespace reference.
Do not use this release. An erroneous invocation of bumpversion
resulted in a Maven pom.xml
that renders the Guacamole subsystem
.war
file impossible to build.
- [Enhancement] Refactor course export/import logic. XBlock editable
fields are added as attributes to the element in a
vertical block.
hook_events
,ports
,providers
andtests
are exported to a separate xml file. This does not affect existing deployed courses using the XBlock, but might possibly require some tweaking to automated deployment pipelines that rely on import and export. - [Bug fix] Fix support for nested
<video>
elements. - [Enhancement] Support
<markdown>
(from the markdown-xblock package) as an additional nested element (in addition to<html>
,<pdf>
, and<video>
).
- [Enhancement] Enable overriding 'delete_age' via XBlock attribute in seconds. The global settings still only accepts 'delete_age' value in days but is now converted to seconds internally. In future releases the settings will begin to support suffixes 'd', 'h', 'm' and 's'.
- [BACKWARD INCOMPATIBLE] This release removes Python 2.7 from the test matrix. This in turn means that we have also removed XBlock 1.1 and XBlock 1.2 from the test matrix (both of which rely on Python 2).
- [Testing] Include XBlock 1.4 in the test matrix.
- [Testing] Include a .gitlab-ci.yml file for running CI tests when mirroring this repository onto a public or private GitLab instance.
- [UI change] Disable page auto-scroll when terminal gets focused
- [Bug fix] Minor style fixes for layout options
- [Enhancement] Make instructions layout configurable (experimental)
- [Bug fix] Terminal font size configuration value type fix
- [Enhancement] Make Guacamole terminal color scheme and font configurable
- [Bug fix] Correctly include the "reaper" and "suspender" manage.py commands in packaging.
- [Testing] Include unit tests for the manage.py commands.
- [Bug fix] Always display lab progress check hints as human readable strings
- [Testing] Drop XBlock 1.1 from the test matrix
- [Testing] Match up XBlock and Python version according to Open edX named releases
- [Testing] Fix Python 3.5 tests
This is the last release to be tested against Python 2.7. Any subsequent releases will support Python 3 only.
- [Enhancement] Support XBlock 1.3 (Python 3 only)
- [Enhancement] Refactor database error retries, using tenacity
- [Documentation] Update README
- [Bug fix] Retry database query to fetch per-provider stack count
- [Documentation] Add documentation for maintainers (on how to cut a release)
- [Documentation] Include README.md in the package’s PyPI description
- [Bug fix] Always, rather than selectively, retry failed database updates from Celery tasks
- [Enhancement] Allow nested blocks
- [Bug fix] Include suspended stacks in count to assess provider capacity and utilization
- [Enhancement] Retry failed database updates from Celery tasks
- [Security fix] test: Require django>=1.11.27 (CVE-2019-19844)
- [Enhancement] Bump XBlock 1.2 version to 1.2.9
- [Enhancement] Add Python 3.8 to test matrix
- [Bug fix] Use empty JSONFields instead of "null"
- [Enhancement] Refactor stack state variables
- [Bug fix] Add missing valid state, LAUNCH_TIMEOUT
- [Enhancement] Show coverage report at test end
- [Bug fix] Fix error handling when waiting for state change
- [Enhancement] Create admin page for stacks
- [Bug fix] Avoid unhandled exception on SSH close
- [Enhancement] Relax dependency constraints
- [Bug fix] Fix JSONField model and migration
- [Bug fix] Handle null
hook_events
properly
- [Enhancement] tox: Bump xblock12 env to XBlock 1.2.3
- [Enhancement] Add Python 3.7 to Travis configuration
- [Enhancement] tasks.py: continue on specific EnvironmentErrors during SSH connection
- [Enhancement] Update devstack documentation
- [Enhancement] Task hooks
- [DEPRECATION]
reboot_on_resume
will be removed in a future release, as its intended purpose is now better served by task hooks. - [CONFIGURATION] The
suspend_in_parallel
configuration option is now a NOOP, as suspension now always happens in parallel via simultaneously running Celery tasks.
- [Bug fix] Fix XML parsing backward compatibility
- [BACKWARD INCOMPATIBLE FOR GCP LABS ONLY] Encode GCP stack names
- [Enhancement] Provider stack listing
- [Enhancement] Reaper zombie destroyer
- [Enhancement] Add Python 3.7 test target
- [Bug fix] Fix database logging
- [Enhancement] Improve suspender and reaper database logging
- [Enhancement] Refactor OpenStack client wrappers
- [Enhancement] Multi-cloud support
- [Enhancement] Introduce Gcloud provider driver
- [Bug fix] Fix Python 2-isms
- [Enhancement] Configurable guacd settings
- [Enhancement] Add docker support for guacamole app
- [Enhancement] Bump keystoneauth1
- [Bug fix] Fix app label
- [Enhancement] Bump os-client-config
- [Bug fix] Àdd missing init parameters to OpenStack wrappers
- [Enhancement] Avoid known stack suspension failure states
- [Enhancement] Progress check hints via stderr
- [Enhancement] Track XBlock-SDK master branch in test matrix
- [Bug fix] Python 3.6 compatibility
- [Enhancement] Managed package versions
- [Enhancement] Improve learner-facing warning messages
- [Enhancement] Continue SSH verification on EOFError
- [Enhancement] Also handle keystone HTTP exceptions
- [Bug fix] Fail if environment not found or template not provided
- [Bug fix] Handle all exceptions when suspending or reaping
- [Bug fix] Don't suspend or reap stacks with no provider
- [Bug fix] Don't delete manually resumed stacks
- [Bug fix] Refresh database connection on every run
- [Enhancement] Allow
launch_timeout
to be set per course - [Enhancement] Allow CMS editing of ports, provider, tests
- [Enhancement] Wait for RDP connection
- [Enhancement] Deprecate custom XML parsing
- [Enhancement] Parse stack ports from XML
- [Enhancement] Handle all Heat HTTP exceptions
- [Enhancement] Don't create records implicitly
- [Bug fix] Wait for commit on LaunchStackTask()
- [Bug fix] Reset
error_msg
on stack launch - [Bug fix] Only update necessary fields
- [Bug fix] Update provider in real time
- [Bug fix] Implement proper locking of
get_user_stack_status
- [Bug fix] Roll back race condition check
- [Bug fix] Don't try to retrieve empty paths
- [Bug fix] Don't send reset request twice simultaneously
- [Bug fix] Avoid QuerySet cache
- [Bug fix] Avoid launch race condition
- [Bug fix] Don't update database from tasks.py
- [Bug fix] Stop browser timers on errors
- [Enhancement] Multiple provider support
- [Enhancement] Bump XBlock 1.2 testing to version 1.2.2
- [Security fix] Bump paramiko version
- [Enhancement] Update OpenStack client libraries
- [Enhancement] Hawthorn compatibility updates
- [Security fix] Address CVE-2018-7750
- [Enhancement] Handle general SSH exceptions gracefully
- [Enhancement] Use module constants for flags
- [Enhancement] Indirection and unit tests for
check_stack()
- [Security fix] Tomcat8 CVE-2018-8014
- [Bug Fix] Fix the reaper's "MySQL has gone away" error
- [Enhancement] Rename 'Undertaker' to 'Reaper'
- [Enhancement] Use soft task timeouts
- [Enhancement] Implement stack deleter
- [Enhancement] Log stack model changes
- [Enhancement] Enforce task timeouts
- [Enhancement] Only log status changes
- [Enhancement] Retry stack deletion
- [Enhancement] Separate suspender program
- [Bug fix] Fuzz recurring poll timeouts
- [Bug fix] Don't send keepalives after guac error
- [Bug fix] Marginally improve the client's handling of Guacamole server errors
- [Security fix] Do not expose server-side configuration
- [Enhancement] Introduce reboot on resume
- [Bug fix] Disconnect immediately when idle
- [Enhancement] Fix unit tests
- [Bug fix] Fix typo in stack parameters invocation
- [Enhancement] Provide "run" parameter to stack templates
- [Enhancement] Multi-port support
- [Enhancement] Guacamole rewrite
- [Enhancement] Expand provider settings scope
- [Enhancement] Bump swift client to 3.3.0
- [Enhancement] Add XBlock 1.0.0 and Python 3.5 to the test matrix
- [Enhancement] Add mock to test requirements
- [Bug fix] Avoid another contextual version conflict
- [Bug fix] Freeze oslo requirements
- [Enhancement] PEP-8 compliance and flake8 testing
- [Enhancement] Enable automated testing via travis-ci
- [Enhancement] Tune requirements for latest edx-platform
- [Enhancement] Upgrade Heat wrapper
- [Bug fix] Freeze oslo
- [Enhancement] Add PyPI metadata
- [Bug fix] Fix ssh connection failure when a provider is set
- [Bug fix] Always download key during progress check
- [Bug fix] Fix check progress endless hang
- [Settings change] Multiple cloud providers
- [Breaks backward compatibility] Remove support for markdown instructions
- [Testing] Improve unit tests
- [UI change] Improve idle message
- [UI change] Implement reset button
- [UI change] Hide check progress button if there are no tests
- [Logging] Restructure log levels