Hello! I reproduced the user story that Dmitriy R. stated in this bug. Thanks for that Dmitriy R. anyway!
I did it in one fresh osa-master installation.
Just a few notes:
1. First, I added a new empty variable in /etc/ansible/roles/os_horizon called "horizon_custom_theme_path:".
2. In /etc/openstack_deploy/ I created a directory called "horizon_custom_theme" and inside it I put a copy of the available themes in "{{ horizon_lib_dir }}/openstack_dashboard/themes" (just to see the files being copied i.e /etc/openstack_deploy/horizon_custom_theme/custom/* )
4. In /etc/ansible/roles/os_horizon/tasks/horizon_post_install.yml I added the following task after "Drop horizon customization module" task, like:
- name: Drop horizon custom themes
synchronize:
src: "{{ horizon_custom_theme_path }}/{{ item.value.theme_name }}"
dest: "{{ horizon_lib_dir }}/openstack_dashboard/{{ item.value.theme_path }}"
times: yes
archive: no
recursive: yes
delete: yes
checksum: yes
with_dict: "{{ horizon_custom_themes }}"
notify: Restart apache2
when: horizon_custom_themes is defined
obs: I don't see reasons to add the task "Setting horizon permissions" right after "Drop horizon custom themes" task as the custom themes directories located in "{{ horizon_lib_dir }}/openstack_dashboard/themes" has root:root by default, didn't any effect changing to horizon:horizon, so my suggestion is to remove this task to avoid unnecessary tasks.
5. Then, I executed the setup-openstack.yml (with clean horizon container) and the custom theme were deployed correct in the right path inside horizon venv.
As mentioned in my 2nd step, I got the error bellow I think because I didn't manage to correct create the custom theme directory:
TASK [os_horizon : Ensure static files are collected and compressed] ********************************************************************************************************************
changed: [aio1_horizon_container-4d604984] => (item={'_ansible_no_log': False, 'item': '/openstack/venvs/horizon-18.0.0.0b3/bin/horizon-manage.py collectstatic --noinput', 'started': 1, '_ansible_ignore_errors': None, 'results_file': '/var/lib/horizon/.ansible_async/390504259645.12638', '_ansible_item_result': True, '_ansible_notify': ['Restart apache2'], 'ansible_job_id': '390504259645.12638', 'failed': False, 'changed': False, 'finished': 0, '_ansible_parsed': True})
FAILED - RETRYING: Ensure static files are collected and compressed (300 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (299 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (298 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (297 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (296 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (295 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (294 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (293 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (292 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (291 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (290 retries left).
failed: [aio1_horizon_container-4d604984] (item={'_ansible_no_log': False, 'item': '/openstack/venvs/horizon-18.0.0.0b3/bin/horizon-manage.py compress --force', 'started': 1, '_ansible_ignore_errors': None, 'results_file': '/var/lib/horizon/.ansible_async/715886674328.12728', '_ansible_item_result': True, '_ansible_notify': ['Restart apache2'], 'ansible_job_id': '715886674328.12728', 'failed': False, 'changed': False, 'finished': 0, '_ansible_parsed': True}) => {"ansible_job_id": "715886674328.12728", "attempts": 12, "changed": true, "cmd": ["/openstack/venvs/horizon-18.0.0.0b3/bin/horizon-manage.py", "compress", "--force"], "delta": "0:01:06.313143", "end": "2018-06-30 01:26:41.509463", "finished": 1, "item": {"ansible_job_id": "715886674328.12728", "changed": false, "failed": false, "finished": 0, "item": "/openstack/venvs/horizon-18.0.0.0b3/bin/horizon-manage.py compress --force", "results_file": "/var/lib/horizon/.ansible_async/715886674328.12728", "started": 1}, "msg": "non-zero return code", "rc": 1, "start": "2018-06-30 01:25:35.196320", "stderr": "CommandError: An error occurred during rendering /openstack/venvs/horizon-18.0.0.0b3/lib/python2.7/site-packages/openstack_dashboard/templates/_stylesheets.html: Couldn't find anything to import: /themes/custom/variables\nExtensions: <NamespaceAdapterExtension>, <DjangoExtension>, <CompassExtension>\nSearch path:\n \non line 1 of u'string:af878a4429fc501a:\\n // My Themes\\n@import \"/themes/custom/variables\";\\n\\n// Horizon\\n@import \"/dashboard/scss/horizon.s'", "stderr_lines": ["CommandError: An error occurred during rendering /openstack/venvs/horizon-18.0.0.0b3/lib/python2.7/site-packages/openstack_dashboard/templates/_stylesheets.html: Couldn't find anything to import: /themes/custom/variables", "Extensions: <NamespaceAdapterExtension>, <DjangoExtension>, <CompassExtension>", "Search path:", " ", "on line 1 of u'string:af878a4429fc501a:\\n // My Themes\\n@import \"/themes/custom/variables\";\\n\\n// Horizon\\n@import \"/dashboard/scss/horizon.s'"], "stdout": "Found 'compress' tags in:\n\t/openstack/venvs/horizon-18.0.0.0b3/lib/python2.7/site-packages/openstack_dashboard/templates/horizon/_scripts.html\n\t/openstack/venvs/horizon-18.0.0.0b3/lib/python2.7/site-packages/openstack_dashboard/templates/_stylesheets.html\n\t/openstack/venvs/horizon-18.0.0.0b3/lib/python2.7/site-packages/openstack_dashboard/templates/serial_console.html\n\t/openstack/venvs/horizon-18.0.0.0b3/lib/python2.7/site-packages/openstack_dashboard/templates/horizon/_conf.html\nCompressing... ", "stdout_lines": ["Found 'compress' tags in:", "\t/openstack/venvs/horizon-18.0.0.0b3/lib/python2.7/site-packages/openstack_dashboard/templates/horizon/_scripts.html", "\t/openstack/venvs/horizon-18.0.0.0b3/lib/python2.7/site-packages/openstack_dashboard/templates/_stylesheets.html", "\t/openstack/venvs/horizon-18.0.0.0b3/lib/python2.7/site-packages/openstack_dashboard/templates/serial_console.html", "\t/openstack/venvs/horizon-18.0.0.0b3/lib/python2.7/site-packages/openstack_dashboard/templates/horizon/_conf.html", "Compressing... "]}
Hello! I reproduced the user story that Dmitriy R. stated in this bug. Thanks for that Dmitriy R. anyway!
I did it in one fresh osa-master installation.
Just a few notes:
1. First, I added a new empty variable in /etc/ansible/ roles/os_ horizon called "horizon_ custom_ theme_path: ".
2. In /etc/openstack_ deploy/ I created a directory called "horizon_ custom_ theme" and inside it I put a copy of the available themes in "{{ horizon_lib_dir }}/openstack_ dashboard/ themes" (just to see the files being copied i.e /etc/openstack_ deploy/ horizon_ custom_ theme/custom/ * )
obs: As stated here https:/ /docs.openstack .org/horizon/ latest/ configuration/ themes. html#inherit- from-an- existing- theme, the right way is to run "python manage.py collectstatic" after create your custom theme directory, but I didn't manage it to do it.
3. In /etc/openstack_ deploy/ user_variables. yml I added the following variables:
- horizon_ custom_ theme_path: "/etc/openstack _deploy/ horizon_ custom_ theme/"
- horizon_ default_ theme: "custom"
-horizon_ custom_ themes:
theme_ label: "Custom"
custom_theme:
theme_name: "custom"
theme_path: "themes/"
4. In /etc/ansible/ roles/os_ horizon/ tasks/horizon_ post_install. yml I added the following task after "Drop horizon customization module" task, like:
- name: Drop horizon custom themes custom_ theme_path }}/{{ item.value. theme_name }}" dashboard/ {{ item.value. theme_path }}" custom_ themes }}" custom_ themes is defined
synchronize:
src: "{{ horizon_
dest: "{{ horizon_lib_dir }}/openstack_
times: yes
archive: no
recursive: yes
delete: yes
checksum: yes
with_dict: "{{ horizon_
notify: Restart apache2
when: horizon_
obs: I don't see reasons to add the task "Setting horizon permissions" right after "Drop horizon custom themes" task as the custom themes directories located in "{{ horizon_lib_dir }}/openstack_ dashboard/ themes" has root:root by default, didn't any effect changing to horizon:horizon, so my suggestion is to remove this task to avoid unnecessary tasks.
5. Then, I executed the setup-openstack.yml (with clean horizon container) and the custom theme were deployed correct in the right path inside horizon venv.
As mentioned in my 2nd step, I got the error bellow I think because I didn't manage to correct create the custom theme directory:
TASK [os_horizon : Ensure static files are collected and compressed] ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* **** container- 4d604984] => (item={ '_ansible_ no_log' : False, 'item': '/openstack/ venvs/horizon- 18.0.0. 0b3/bin/ horizon- manage. py collectstatic --noinput', 'started': 1, '_ansible_ ignore_ errors' : None, 'results_file': '/var/lib/ horizon/ .ansible_ async/390504259 645.12638' , '_ansible_ item_result' : True, '_ansible_notify': ['Restart apache2'], 'ansible_job_id': '390504259645. 12638', 'failed': False, 'changed': False, 'finished': 0, '_ansible_parsed': True}) container- 4d604984] (item={ '_ansible_ no_log' : False, 'item': '/openstack/ venvs/horizon- 18.0.0. 0b3/bin/ horizon- manage. py compress --force', 'started': 1, '_ansible_ ignore_ errors' : None, 'results_file': '/var/lib/ horizon/ .ansible_ async/715886674 328.12728' , '_ansible_ item_result' : True, '_ansible_notify': ['Restart apache2'], 'ansible_job_id': '715886674328. 12728', 'failed': False, 'changed': False, 'finished': 0, '_ansible_parsed': True}) => {"ansible_job_id": "715886674328. 12728", "attempts": 12, "changed": true, "cmd": ["/openstack/ venvs/horizon- 18.0.0. 0b3/bin/ horizon- manage. py", "compress", "--force"], "delta": "0:01:06.313143", "end": "2018-06-30 01:26:41.509463", "finished": 1, "item": {"ansible_job_id": "715886674328. 12728", "changed": false, "failed": false, "finished": 0, "item": "/openstack/ venvs/horizon- 18.0.0. 0b3/bin/ horizon- manage. py compress --force", "results_file": "/var/lib/ horizon/ .ansible_ async/715886674 328.12728" , "started": 1}, "msg": "non-zero return code", "rc": 1, "start": "2018-06-30 01:25:35.196320", "stderr": "CommandError: An error occurred during rendering /openstack/ venvs/horizon- 18.0.0. 0b3/lib/ python2. 7/site- packages/ openstack_ dashboard/ templates/ _stylesheets. html: Couldn't find anything to import: /themes/ custom/ variables\ nExtensions: <NamespaceAdapt erExtension> , <DjangoExtension>, <CompassExtensi on>\nSearch path:\n \non line 1 of u'string: af878a4429fc501 a:\\n // My Themes\\n@import \"/themes/ custom/ variables\ ";\\n\\ n// Horizon\\n@import \"/dashboard/ scss/horizon. s'", "stderr_lines": ["CommandError: An error occurred during rendering /openstack/ venvs/horizon- 18.0.0. 0b3/lib/ python2. 7/site- packages/ openstack_ dashboard/ templates/ _stylesheets. html: Couldn't find anything to import: /themes/ custom/ variables" , "Extensions: <NamespaceAdapt erExtension> , <DjangoExtension>, <CompassExtensi on>", "Search path:", " ", "on line 1 of u'string: af878a4429fc501 a:\\n // My Themes\\n@import \"/themes/ custom/ variables\ ";\\n\\ n// Horizon\\n@import \"/dashboard/ scss/horizon. s'"], "stdout": "Found 'compress' tags in:\n\t/ openstack/ venvs/horizon- 18.0.0. 0b3/lib/ python2. 7/site- packages/ openstack_ dashboard/ templates/ horizon/ _scripts. html\n\ t/openstack/ venvs/horizon- 18.0.0. 0b3/lib/ python2. 7/site- packages/ openstack_ dashboard/ templates/ _stylesheets. html\n\ t/openstack/ venvs/horizon- 18.0.0. 0b3/lib/ python2. 7/site- packages/ openstack_ dashboard/ templates/ serial_ console. html\n\ t/openstack/ venvs/horizon- 18.0.0. 0b3/lib/ python2. 7/site- packages/ openstack_ dashboard/ templates/ horizon/ _conf.html\ nCompressing. .. ", "stdout_lines": ["Found 'compress' tags in:", "\t/openstack/ venvs/horizon- 18.0.0. 0b3/lib/ python2. 7/site- packages/ openstack_ dashboard/ templates/ horizon/ _scripts. html", "\t/openstack/ venvs/horizon- 18.0.0. 0b3/lib/ python2. 7/site- packages/ openstack_ dashboard/ templates/ _stylesheets. html", "\t/openstack/ venvs/horizon- 18.0.0. 0b3/lib/ python2. 7/site- packages/ openstack_ dashboard/ templates/ serial_ console. html", "\t/openstack/ venvs/horizon- 18.0.0. 0b3/lib/ python2. 7/site- packages/ openstack_ dashboard/ templates/ horizon/ _conf.html" , "Compressing... "]}
changed: [aio1_horizon_
FAILED - RETRYING: Ensure static files are collected and compressed (300 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (299 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (298 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (297 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (296 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (295 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (294 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (293 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (292 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (291 retries left).
FAILED - RETRYING: Ensure static files are collected and compressed (290 retries left).
failed: [aio1_horizon_
RUNNING HANDLER [os_horizon : Restart apache2] ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ***** container- 4d604984]
changed: [aio1_horizon_
PLAY RECAP ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ******* ****** container- 4d604984 : ok=48 changed=6 unreachable=0 failed=1
aio1_horizon_