-
Notifications
You must be signed in to change notification settings - Fork 1k
Description
Galaxy Admin Training - Issues
These are the issues I encountered during my Galaxy Admin Training Path tutorial runs between April and August 2025 on an Ubuntu 22.04 VM. This collection documents problems, workarounds, and suggestions for improvement across the complete Galaxy Admin Training learning pathway.
System Configuration:
Operating System: Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-143-generic x86_64)
VM Environment: openstack Nova
VM Specifications: 8 CPU cores, 15 GB RAM
Python Version: Python 3.10.12
Ansible Version: ansible [core 2.17.12]
STEP 1: ansible-galaxy
- ISSUE 1: Galaxy v23.2 requires miniconda version 25.3
- ISSUE 2: Failing to load welcome page in center panel
- ISSUE 3: "404 Not Found" error when using the display function ("eye icon")
STEP 2: backup-cleanup
- "Couldn't resolve module/action 'community.general.system.make'"
STEP 4: tus
- ISSUE 1: Set a fixed tusd version in order to avoid using a github token
- ISSUE 2: Galaxy v23.2 does not work with latest tusd version (v2.2.2)
STEP 9: data-library
- Library Permission Issues
STEP 12: job-destinations
- "Unhandled exception while caching job destination dynamic rule"
STEP 15: gxadmin
- "psql: error: connection to server [...] failed"
STEP 17: monitoring
- ISSUE 1: "ansible.builtin.include has been removed"
- ISSUE 2: "Failed to update apt cache"
- ISSUE 3: "ansible.builtin.include has been removed"
- ISSUE 4: "Timeout when waiting for 0.0.0.0:3000"
STEP 18: tiaas
- ISSUE 1: "Source /srv/galaxy/server/static/style/base.css not found"
- ISSUE 2:
Server Error (500)when accessing database - ISSUE 3: "Unable to run this job due to a cluster error"
- ISSUE 4: Order of roles
- ISSUE 5: Incomplete link
STEP 19: sentry
- ISSUE 1: "'AnsibleUndefinedVariable: ''sentry_domain'' is undefined'"
- ISSUE 2: "Configuration error - kwargs_from_env() got an unexpected keyword argument 'ssl_version'"
- ISSUE 3: "TypeError: kwargs_from_env() got an unexpected keyword argument 'ssl_version'"
- ISSUE 4: "'vault_sentry_password'' is undefined'"
- ISSUE 5: "Error: User: [email protected] exists, use --force-update to force."
- ISSUE 6: "SSL: no alternative certificate subject name matches target host name 'sentry."
- ISSUE 7: No
<my-domain>/errorlogs in Sentry - ISSUE 8:
Test Job Propertiestool does not appear in the tool list
STEP 20: ftp
- ISSUE 1: "ansible.builtin.include has been removed."
- ISSUE 2: "Unable to start service proftpd"
STEP 21: beacon
- ISSUE 1: "msg: No package matching 'python39' is available"
- ISSUE 2: "msg: No package matching 'cronie' is available"
- ISSUE 3: "msg: 'No such file or directory: b''/usr/bin/pip3.9'''"
- ISSUE 4: "msg: 'Could not find the requested service crond: host'"
- ISSUE 5: Calling
<my-domain>/beacon-->404 Not found
Step 1 ansible-galaxy
ISSUE 1
ERROR
LibMambaUnsatisfiableError: Encountered problems while solving:
- package conda-23.9.0-py310hff52083_0 requires python >=3.10,<3.11.0a0, but none of the providers can be installed"
SOLUTION
Switch to galaxy_commit_id: release_23.2 in ./group_vars/galaxyservers.yml
also ref. to Step 4 / Issue 2
ISSUE 2
also documented here:
Failing to load welcome page in center panel after Ansible playbook deployment (404 Not Found) #6009
ERROR
After deploying Galaxy via the official Galaxy Admin tutorial playbook (Revision: 102, Last modification: Apr 8, 2025), the welcome page fails to load inside the main panel of the Galaxy UI. Instead, the browser displays a 404 Not Found error:
SOLUTION
./galaxy/roles/galaxyproject.nginx/templates/nginx/galaxy.j2
Switch from alias {{ galaxy_server_dir }}/static/welcome.html.sample; to alias {{ galaxy_server_dir }}/static/welcome.sample.html;
ISSUE 3
Also documented here
404 Not Found" error when displaying datasets #6212
ERROR
404 Not Found error (e.g. when trying to display a dataset using the "eye icon" in the history column)
404 Not Found
The resource could not be found.
No route for /_x_accel_redirect/data/datasets/1/3/e/dataset_xyz.datSOLUTION
Replace the following block in ./templates/nginx/galaxy.j2:
location /_x_accel_redirect {
internal;
alias /;
}with
location /_x_accel_redirect/ {
internal;
alias /;
# Add upstream response headers that would otherwise be omitted
add_header Access-Control-Allow-Origin $upstream_http_access_control_allow_origin;
add_header Access-Control-Allow-Methods $upstream_http_access_control_allow_methods;
}RESOURCES
https://help.galaxyproject.org/t/404-not-found-error-no-route-for-x-accel-redirect/7507
https://docs.galaxyproject.org/en/master/admin/nginx.html#sending-files-with-nginx
Step 2 backup-cleanup
ERROR
ERROR! couldn't resolve module/action 'community.general.system.make'. This often indicates a misspelling, missing collection, or incorrect module path.
The error appears to be in '/home/ubuntu/galaxy/roles/galaxyproject.gxadmin/tasks/main.yml': line 16, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: Compile gxadmin when there are updates
^ hereSOLUTION
Switch to community.general.make in galaxy/roles/galaxyproject.gxadmin/tasks/main.yml': line 16, column 3
Step 4 tus
ISSUE 1
ERROR
GitHub has rate limited the automated access and requires now a token authentification access:
SOLUTION
The tusd role contains
when: tusd_version == 'latest'so the playbook alway tries to get the latest version of tusd and therefore has to access Github. This can be avoided by overwriting the tusd version in group_vars/galaxyservers.yml:
galaxy_tusd_port: 1080
galaxy_tus_upload_store: /data/tus
tusd_version: "v1.7.3"ISSUE 2
ERROR
Already described here:
Galaxy 23.2 does not work with latest tusd (v2.2.2) #17570
WORKAROUND
Ref to. Issue 1:
Set a known version to work (tusd v1.7.3)
(Potential) TO DO
Figure out the latest combination of Galaxy and tusd to work.
Step 9 data-library
ERROR
Executing
set-library-permissions -g http(s)://<your_host_IP> -a <api-key> LIBRARY --roles ROLES role1,role2,role3
throws the error:
Traceback (most recent call last):
File "/home/ubuntu/ephemeris_venv/bin/set-library-permissions", line 8, in <module>
sys.exit(main())
File "/home/ubuntu/ephemeris_venv/lib/python3.10/site-packages/ephemeris/set_library_permissions.py", line 119, in main
args.roles = [r.strip() for r in args.roles.split(",")]
AttributeError: 'list' object has no attribute 'split'
SOLUTION
?
Step 12 job-destinations
ERROR
Job Resource Selectors error. The job executed with personal parameter setting Cores = 2 fails:
`Encountered an unhandled exception while caching job destination dynamic rule.`
WORKAROUND
Uncommented rule in files/galaxy/config/tpv_rules_local.yml:
.*testing.*:
cores: 2
mem: cores * 4
rules:
- id: admin_only_testing_tool
if: |
# Only allow the tool to be executed if the user is an admin
admin_users = app.config.admin_users
# last line in block must evaluate to a value - which determines whether the TPV if conditional matches or not
not user or user.email not in admin_users
fail: Unauthorized. Only admins can execute this tool.
# - id: resource_params_defined
# if: |
# param_dict = job.get_param_values(app)
# param_dict.get('__job_resource', {}).get('__job_resource__select') == 'yes'
# cores: int(job.get_param_values(app)['__job_resource']['cores'])
# params:
# walltime: "{int(job.get_param_values(app)['__job_resource']['time'])}"Step 15 gxadmin
ERROR
$ gxadmin query old-histories 10
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "ubuntu" does not existSOLUTION
Use sudo -u galaxy gxadmin query latest-users
Step 17 monitoring
ISSUE 1
ERROR
$ ansible-playbook monitoring.yml
ERROR! [DEPRECATED]: ansible.builtin.include has been removed. Use include_tasks or import_tasks instead. This feature was removed from ansible-core in a release after 2023-05-16. Please update your playbooks.
The error appears to be in '/home/ubuntu/galaxy/roles/usegalaxy_eu.influxdb/tasks/main.yml': line 25, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: Configure collectd
^ here
SOLUTION
Replace - include: with include_tasks: in galaxy/roles/usegalaxy_eu.influxdb/tasks/main.yml:
- name: Configure collectd
include_tasks: collectd.yml
when: influxdb_collectd_enabled == "true"
- include_tasks: install-download.yml
when: influxdb_install_method == "download"
tags:
- influxdb
- include_tasks: install-debian.yml
when: influxdb_install_method == "repository" and ansible_distribution in ["Debian", "Ubuntu"]
tags:
- influxdb
- include_tasks: install-rhel.yml
when: influxdb_install_method == "repository" and ansible_distribution in ["Enterprise Linux", "CentOS"]
tags:
- influxdbISSUE 2
ERROR
TASK [usegalaxy_eu.influxdb : Add InfluxData repository] *************************************************************************************************************************************************
fatal: [<my-domain>]: FAILED! => changed=false
msg: 'Failed to update apt cache: W:GPG error: https://repos.influxdata.com/ubuntu jammy InRelease: The following signatures couldn''t be verified because the public key is not available: NO_PUBKEY D8FF8E1F7DF8B07E, E:The repository ''https://repos.influxdata.com/ubuntu jammy InRelease'' is not signed., W:Updating from such a repository can''t be done securely, and is therefore disabled by default., W:See apt-secure(8) manpage for repository creation and user configuration details., W:https://apt.bi.denbi.de/repos/apt/jammy/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details., W:https://ppa.launchpadcontent.net/apptainer/ppa/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details., W:https://cvmrepo.web.cern.ch/cvmrepo/apt/dists/jammy-prod/Release.gpg: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg),
see the DEPRECATION section in apt-key(8) for details., W:https://ppa.launchpadcontent.net/natefoo/slurm-drmaa/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.'
(TEMPORARY) SOLUTION
After manually running
$ wget -q https://repos.influxdata.com/influxdata-archive.key
$ gpg --show-keys --with-fingerprint --with-colons ./influxdata-archive.key 2>&1 | grep -q '^fpr:\+24C975CBA61A024EE1B631787C3D57159FC2F927:$' && cat influxdata-archive.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive.gpg > /dev/null
$ echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.listSource: https://repos.influxdata.com/
ISSUE 3
$ ansible-playbook monitoring.yml
ERROR! [DEPRECATED]: ansible.builtin.include has been removed. Use include_tasks or import_tasks instead. This feature was removed from ansible-core in a release after 2023-05-16. Please update your playbooks.
The error appears to be in '/home/ubuntu/galaxy/roles/cloudalchemy.grafana/tasks/main.yml': line 17, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- include: preflight.yml
^ here
SOLUTION
Replace all include_tasks with import_tasks in galaxy/roles/cloudalchemy.grafana/tasks/main.yml.
ISSUE 4
ERROR
When running the monitoring notebook monitoring.yml the start up process of Grafana exits with a time out error:
TASK [cloudalchemy.grafana : Wait for grafana to start] **************************************************************************************************
fatal: [<my-domain>]: FAILED! => changed=false
elapsed: 300
msg: Timeout when waiting for 0.0.0.0:3000
SOLUTION
Replacing
# Alerting
[alerting]
{% if grafana_alerting != {} %}
enabled = truewith
# Alerting
[unified_alerting]
{% if grafana_alerting != {} %}
enabled = truein roles/cloudalchemy.grafana/templates/grafana.ini.j2 works.
Step 18 tiaas
ISSUE 1
ERROR
TASK [galaxyproject.tiaas2 : Copy Galaxy's stylesheet] ***************************************************************************************************
fatal: [<my-domain>]: FAILED! => changed=false
msg: Source /srv/galaxy/server/static/style/base.css not found
SOLUTION
The correct path to base.css is
tiaas_galaxy_stylesheet: "{{ galaxy_server_dir }}/static/dist/base.css
for which the role should be modified in ./galaxy/roles/galaxyproject.tiaas2/defaults/main.yml
ISSUE 2
ERROR
After finishing the playboook the static website (<my-domain>/tiaas) worked but all applications using the database (e.g. when trying to login as admin (<my-domain>/tiaas/admin) or accessing the calendar) led to an Server Error (500).
WORKAROUND
- Set
tiaas_tiaas_use_sqlite: falseinroles/galaxyproject.tiaas2/defaults/main.yml. - I also had to manually create a
tiaasdb in PostgreSQL.
ISSUE 3
ERROR
Executing a job directed to slurm inside the training role throws the error:
Unable to run this job due to a cluster error
WORKAROUND
I had to set --mem=1 for native_specification: --nodes=1 --ntasks=1 --mem=1 --cpus-per-task={cores} --time=00:30:00 in files/galaxy/config/tpv_rules_local.yml as set in the node configuration:
$ scontrol show nodes
NodeName=localhost Arch=x86_64 CoresPerSocket=1
[...]
CfgTRES=cpu=2,mem=1M,billing=2
[...]
ISSUE 4
"4. We need to add the `galaxyproject.tiaas2` role before the `nginx` role, as TIaaS defines variables that Nginx needs. "
```YAML
-- a/galaxy.yml
++ b/galaxy.yml
@ -47,6 +47,7 @@
- galaxyproject.nginx
- geerlingguy.docker
- usegalaxy_eu.rabbitmqserver
- galaxyproject.tiaas2
- galaxyproject.gxadmin
- galaxyproject.cvmfs
- dj-wasabi.telegrafThe tiaas2 role in the code template is still located after the nginx role.
ISSUE 5
The link to the page in section 4. Monitor TIaaS status (Hands On: Using TIaaS) is incomplete:
/join-training/gat should read /join-training/gat/status
Step 19 sentry
ISSUE 1
ERROR
The playbook run breaks throwing the error that the sentry_domain (= sentry.<my-domain>.de) is not defined:
TASK [galaxyproject.nginx : Install SSL vhost configs] **********************************************************************************************************
ok: [<my-domain>] => (item=galaxy)
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ansible.errors.AnsibleUndefinedVariable: 'sentry_domain' is undefined
failed: [<my-domain>] (item=sentry) => changed=false
ansible_loop_var: item
item: sentry
msg: 'AnsibleUndefinedVariable: ''sentry_domain'' is undefined'
WORKAROUND
The root cause might be:
Galaxy needs to know the sentry domain in order to deploy the nginx config. If, however, the sentry playbook is not executed before the galaxy playbook, the playbook breaks during the task galaxyproject.nginx : Install SSL vhost configs. Therefore, I had to hardcode the domain here: sentry_domain: sentry.<my-domain>.de in group_vars/galaxyservers.yml.
ISSUE 2
ERROR
The playbook run breaks with
TASK [mvdbeek.sentry_selfhosted : Start sentry self hosted docker-compose project] *********************************************************
fatal: [sentry.<my-domain>]: FAILED! => changed=false
msg: Configuration error - kwargs_from_env() got an unexpected keyword argument 'ssl_version'
SOLUTION
The sentry task (./galaxy/roles/mvdbeek.sentry_selfhosted/tasks/main.yml --> Start sentry self hosted docker-compose project) in the tutorial is
- name: Start sentry self hosted docker-compose project
docker_compose:
project_src: "{{ sentry_docker_compose_project_folder }}"
remove_orphans: true
state: presentdocker_compose is referring to docker-compose version 1 which is depricated since 2023 (Issue 3194).
Ansible release > 9.2.0 requires docker compose V2 which should be implemented as described in community.docker.docker_compose_v2 module
- name: Start sentry self hosted docker-compose project
community.docker.docker_compose_v2:
project_src: "{{ sentry_docker_compose_project_folder }}"
remove_orphans: true
state: presentISSUE 3
ERROR
The same issue from above occurs also in the next task:
TASK [mvdbeek.sentry_selfhosted : Add sentry super users] **********************************************************************************
failed: [sentry.<my-domain>] (item={'email': '[email protected]', 'password': '<password>'}) => changed=true
[...]
stderr: |-
Traceback (most recent call last):
File "/usr/local/bin/docker-compose", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.10/dist-packages/compose/cli/main.py", line 81, in main
command_func()
File "/usr/local/lib/python3.10/dist-packages/compose/cli/main.py", line 200, in perform_command
project = project_from_options('.', options)
File "/usr/local/lib/python3.10/dist-packages/compose/cli/command.py", line 60, in project_from_options
return get_project(
File "/usr/local/lib/python3.10/dist-packages/compose/cli/command.py", line 152, in get_project
client = get_client(
File "/usr/local/lib/python3.10/dist-packages/compose/cli/docker_client.py", line 41, in get_client
client = docker_client(
File "/usr/local/lib/python3.10/dist-packages/compose/cli/docker_client.py", line 124, in docker_client
kwargs = kwargs_from_env(environment=environment, ssl_version=tls_version)
TypeError: kwargs_from_env() got an unexpected keyword argument 'ssl_version'
stderr_lines: <omitted>
stdout: ''
stdout_lines: <omitted>
...ignoring
SOLUTION
Change the docker command part in ./galaxy/roles/mvdbeek.sentry_selfhosted/tasks/main.yml --> Add sentry super users from
docker-compose run --rm web createuserto
docker compose run --rm web createuser(w/o hyphen) according to the new docker compose V2 release:
- name: Add sentry super users
command:
chdir: "{{ sentry_docker_compose_project_folder }}"
cmd: >
docker compose run --rm web createuser
--email "{{ item.email }}"
--password "{{ item.password }}"
--superuser
--no-input
loop: "{{ sentry_superusers }}"
ignore_errors: trueISSUE 4
ERROR
TASK [mvdbeek.sentry_selfhosted : Add sentry super users] *******************************************************************************************************
fatal: [sentry.<my-domain>]: FAILED! =>
msg: '[{''email'': ''[email protected]'', ''password'': ''{{ vault_sentry_password }}''}]: ''vault_sentry_password'' is undefined'
...ignoring
SOLUTION
There is no reference to the group_vars/secret.yml vault file in the sentry.yml playbook.
Adding the reference solves this issue:
- hosts: sentryservers
vars_files:
- group_vars/secret.yml
become: true
pre_tasks:
- pip:
name: docker-compose
roles:
- mvdbeek.sentry_selfhostedISSUE 5
After running the sentry.yml playbook you might encounter the error:
TASK [mvdbeek.sentry_selfhosted : Add sentry super users] *******************************************************************************************************
failed: [sentry.<my-domain>] (item={'email': '[email protected]', 'password': '<my-password>'}) => changed=true
[...]
Container sentry-self-hosted-redis-1 Healthy
Container sentry-self-hosted-redis-1 Healthy
/usr/local/lib/python3.8/site-packages/memcache.py:1303: SyntaxWarning: "is" with a literal. Did you mean "=="?
if key is '':
/usr/local/lib/python3.8/site-packages/memcache.py:1304: SyntaxWarning: "is" with a literal. Did you mean "=="?
if key_extra_len is 0:
Error: User: [email protected] exists, use --force-update to force.
stderr_lines: <omitted>
stdout: |-
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
13:25:28 [INFO] sentry.plugins.github: apps-not-configured
stdout_lines: <omitted>
...ignoring
SOLUTION
Add --force-update to roles/mvdbeek.sentry_selfhosted/tasks/main.yml:
- name: Add sentry super users
command:
chdir: "{{ sentry_docker_compose_project_folder }}"
cmd: >
docker compose run --rm web createuser
--email "{{ item.email }}"
--password "{{ item.password }}"
--superuser
--no-input
--force-update
loop: "{{ sentry_superusers }}"
ignore_errors: trueISSUE 6
ERROR
Calling the sentry.<my-domain> subdomain does not create a secure connection saying that there is no valid certificate.
curl -v "https://sentry.<my-domain>" -o /dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 100.113.16.120:443...
* Connected to sentry.<my-domain> (100.113.16.120) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
[...]
* Server certificate:
* subject: CN=<my-domain>
* start date: Jul 8 12:35:22 2025 GMT
* expire date: Oct 6 12:35:21 2025 GMT
* subjectAltName does not match sentry.<my-domain>
* SSL: no alternative certificate subject name matches target host name 'sentry.<my-domain>'
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
* Closing connection 0
[]
curl: (60) SSL: no alternative certificate subject name matches target host name 'sentry.<my-domain>'
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
WORKAROUND
According to tutorial I don't need a new certificate for the subdomain, which did not work in my case. Although the vault_galaxy_sentry_dsn entry in group_vars/secret.yml was ...@localhost:9000/2 a secure connection was not possible with all browsers and on the terminal level using curl.
Adding the subdomain to the certbot_domains in group_vars/galaxyservers.yml
certbot_domains:
- "{{ inventory_hostname }}"
- "{{ sentry_domain }}"and deleting the folder /etc/letsencrypt + rerunning the playbooks finally created a new certificate including the new subdomain sentry.<my-domain>
ISSUE 7
ERROR
Probably related to ISSUE 6:
The logs of the /error route to intentionally create a fake error cannot be seen in Sentry.
WORKAROUND
The Sentry DSN (Data Source Name) entry in group_vars/secrets.yml according to the tutorial is:
vault_galaxy_sentry_dsn: 'https://KEY@sentry.<my-domain>:9000/2'.
This is telling Galaxy to connect directly to port 9000 on sentry., but port 9000 is only listening for HTTP connections (not HTTPS) (--> nginx config: proxy_pass "http://localhost:9000";). The nginx proxy handles the SSL termination on port 443:
# Listen on port 443
listen *:443 ssl;
# The virtualhost is our domain name
server_name "sentry.<my-domain>";Removing the ':9000' port from the DSN vault_galaxy_sentry_dsn: 'https://KEY@sentry.<my-domain>/2' resolved the SSL error.
ISSUE 8
ERROR
The Test Job Properties tool to send failing tool errors to Sentry does not appear in the tool list.
SOLUTION
The XML code does not work. Here is a working version:
<tool id="job_properties" name="Test Job Properties" version="1.0.0">
<stdio>
<exit_code range="127" level="fatal" description="Failing exit code." />
</stdio>
<version_command>echo 'v1.1'</version_command>
<command><![CDATA[
#if $thebool
echo 'The bool is true' &&
echo 'The bool is really true' 1>&2 &&
echo 'This is a line of text.' > '$out_file1' &&
cp '$out_file1' '$one' &&
cp '$out_file1' '$two' &&
sleep $sleepsecs
#else
echo 'The bool is not true' &&
echo 'The bool is very not true' 1>&2 &&
echo 'This is a different line of text.' > '$out_file1' &&
sleep $sleepsecs &&
sh -c 'exit 2'
#end if
#if $failbool
; exit 127
#end if
]]></command>
<inputs>
<param name="sleepsecs" type="integer" value="0" label="Sleep this many seconds"/>
<param name="thebool" type="boolean" label="The boolean property" />
<param name="failbool" type="boolean" label="The failure property" checked="false" />
</inputs>
<outputs>
<data name="out_file1" format="txt" />
<collection name="list_output" type="list" label="A list output">
<data name="one" format="txt" />
<data name="two" format="txt" />
</collection>
</outputs>
<tests>
<test>
<param name="thebool" value="true" />
<output name="out_file1" file="simple_line.txt" />
<assert_stdout>
<has_line line="The bool is true" />
</assert_stdout>
<assert_stderr>
<has_line line="The bool is really true" />
</assert_stderr>
<assert_command_version>
<has_text text="v1.1" />
</assert_command_version>
</test>
<test expect_exit_code="2">
<param name="thebool" value="false" />
<output name="out_file1" file="simple_line_alternative.txt" />
<assert_command>
<has_text text="very not" />
</assert_command>
<assert_stdout>
<has_line line="The bool is not true" />
</assert_stdout>
<assert_stderr>
<has_line line="The bool is very not true" />
</assert_stderr>
</test>
<test expect_exit_code="127" expect_failure="true">
<param name="thebool" value="true" />
<param name="failbool" value="true" />
</test>
</tests>
<help>
</help>
</tool>Step 20 FTP
ISSUE 1
ERROR
ERROR! [DEPRECATED]: ansible.builtin.include has been removed. Use include_tasks or import_tasks instead. This feature was removed from ansible-core in a release after 2023-05-16. Please update your playbooks.
The error appears to be in '/home/ubuntu/galaxy/roles/galaxyproject.proftpd/tasks/main.yml': line 7, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: Include initial OS-specific tasks
^ here
and
The error appears to be in '/home/ubuntu/galaxy/roles/galaxyproject.proftpd/tasks/main.yml': line 58, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
and so on.
SOLUTION
Exchange the include: tasks in /galaxy/roles/galaxyproject.proftpd/tasks/main.yml role with include_tasks:, which are dynamic (the variable will be defined dynamically during the playbook run and is not predefined [ref. to https://serverfault.com/questions/875247/whats-the-difference-between-include-tasks-and-import-tasks])
- name: Include initial OS-specific tasks
import_tasks: "{{ ansible_os_family | lower}}.yml"and
- name: Include tasks for TLS configuration
include_tasks: tls.ymland
- name: Include tasks for Galaxy authentication
include_tasks: galaxy_auth.ymlISSUE 2
ERROR
RUNNING HANDLER [galaxyproject.proftpd : restart proftpd] **********************************************************************************************
fatal: [<my-domain>]: FAILED! => changed=false
msg: |-
Unable to start service proftpd: Job for proftpd.service failed because the control process exited with error code.
See "systemctl status proftpd.service" and "journalctl -xeu proftpd.service" for details.
SOLUTION
The mod_tls.c module has to be loaded in order to connect via TLS/SSL. This has to do with this task in the galaxyproject.proftpd role ./galaxy/roles/galaxyproject.proftpd/tasks/galaxy_auth.yml:
- name: Uncomment LoadModule directives for Galaxy
lineinfile:
name: "{{ proftpd_modules_config_file }}"
regexp: '^#\s*(LoadModule\s+{{ item }}.*)$'
backrefs: yes
line: '\1 # uncommented by Ansible'
backup: yes
with_items: "{{ proftpd_galaxy_modules }}"
notify:
- reload proftpdThe variable proftpd_galaxy_modules is defined by the settings in ./galaxy/roles/galaxyproject.proftpd/defaults/main.yml (original):
proftpd_galaxy_modules:
- mod_sql.c
- mod_sql_passwd.c
- mod_sql_postgres.cThe required module mod_tls.c is missing and therefore the task will skip to uncomment this module in /etc/proftpd/modules.conf. Adding mod_tls.c to the list proftpd_galaxy_modules will uncomment the module during the playbook run.
Step 21 beacon
ISSUE 1
ERROR
TASK [paprikant.beacon-importer : Install python] ******************************************************************************************
failed: [<my-domain>] (item=python39) => changed=false
ansible_loop_var: item
item: python39
msg: No package matching 'python39' is available
ok: [<my-domain>] => (item=python3-pip)
ok: [<my-domain>] => (item=python3-setuptools)
SOLUTION
Changed to python3 in ../galaxy/roles/paprikant.beacon-importer/tasks/main.yml:
- name: Install python
ansible.builtin.package:
name: "{{ item }}"
state: present
loop:
- python3
- python3-pip
- python3-setuptoolsISSUE 2
ERROR
TASK [paprikant.beacon-importer : Install cronie] ******************************************************************************************
fatal: [<my-domain>]: FAILED! => changed=false
msg: No package matching 'cronie' is available
SOLUTION
cronie is the standard cron daemon for RedHat-based systems—RHEL, CentOS, Fedora, etc.) but the training platform runs on Ubuntu and cronie is not available.
We have to ensure that cron, the Debian-based cron-daemon, is present.
(Code taken from https://galaxy.ansible.com/ui/standalone/roles/buluma/netdata/documentation)
I also had to comment update_cache: true
in ./roles/paprikant.beacon-importer/tasks/main.yml:
ansible.builtin.apt:
name: cron
#update_cache: true
become: true
when: ansible_os_family == "Debian"ISSUE 3
ERROR
TASK [paprikant.beacon-importer : Install python deps] *************************************************************************************
fatal: [<my-domain>]: FAILED! => changed=false
cmd: /usr/bin/pip3.9 list --format=freeze
msg: '[Errno 2] No such file or directory: b''/usr/bin/pip3.9'''
rc: 2
stderr: ''
stderr_lines: <omitted>
stdout: ''
stdout_lines: <omitted>
SOLUTION
Switch to /usr/bin/pip3.10 in ./roles/paprikant.beacon-importer/tasks/main.yml:
- name: Install python deps
ansible.builtin.pip:
requirements: "{{ script_dir }}/requirements.txt"
#executable: /usr/bin/pip3.9
executable: /usr/bin/pip3.10ISSUE 4
ERROR
TASK [paprikant.beacon-importer : Make sure crond is started and enabled] ******************************************************************
fatal: [<my-domain>]: FAILED! => changed=false
msg: 'Could not find the requested service crond: host'
SOLUTION
Switch to cron.service in ./roles/paprikant.beacon-importer/tasks/main.yml:
- name: Make sure cron.service is started and enabled
ansible.builtin.systemd:
#name: crond
name: cron.service
state: started
enabled: yesISSUE 5
ERROR
Calling <my-domain>/beacon --> 404 Not found
SOLUTION
In ./galaxy/templates/nginx/galaxy.j2 the nginx entry
proxy_pass http://{{ groups['beacon_server'][0] }}:5050;
translates into
proxy_pass http://<my-domain>:5050; which does not work.
Changing the entry to
proxy_pass http://localhost:5050; or
proxy_pass http://127.0.0.1:5050; and
setting a slash after the page entry like
location /beacon/ {
(otherwise the address <my-domain>/beacon will fail or one must set the slash in the address like <my-domain>/beacon/)