From bb9f83caad0d76277144d53caabe43fd317ce268 Mon Sep 17 00:00:00 2001 From: Harry Huang Date: Mon, 22 Jan 2018 12:12:08 +0800 Subject: Add workaround for horizon image upload issue JIRA: COMPASS-573 1. With HORIZON_IMAGES_UPLOAD_MODE set to direct Horizon provides the endpoint for Glance based on OPENSTACK_ENDPOINT_TYPE. If OPENSTACK_ENDPOINT_TYPE is set to internalURL any browser outside the internal network is unable to upload image. Add ansible task to set HORIZON_IMAGES_UPLOAD_MODE to legacy as a workaround. 2. Add ansible lookup plugin to get openstack release 3. set openstack_release into group_vars/all in config-osa to make this variable readable for other tasks Change-Id: I9ef358e1f4acb0c329a032e18359de12284f3b56 Signed-off-by: Harry Huang --- .../ansible/roles/config-osa/tasks/main.yml | 2 + .../config-osa/tasks/set_openstack_release.yml | 15 ++++++ .../ansible/roles/config-osa/vars/main.yml | 3 ++ .../ansible/roles/post-openstack/tasks/main.yml | 17 +++++++ deploy/ansible_plugins/lookup/yamlfile.py | 55 ++++++++++++++++++++++ .../ansible_cfg/HA-ansible-multinodes.tmpl | 1 + 6 files changed, 93 insertions(+) create mode 100644 deploy/adapters/ansible/roles/config-osa/tasks/set_openstack_release.yml create mode 100644 deploy/ansible_plugins/lookup/yamlfile.py diff --git a/deploy/adapters/ansible/roles/config-osa/tasks/main.yml b/deploy/adapters/ansible/roles/config-osa/tasks/main.yml index 74d930e2..5f4f2fb2 100755 --- a/deploy/adapters/ansible/roles/config-osa/tasks/main.yml +++ b/deploy/adapters/ansible/roles/config-osa/tasks/main.yml @@ -366,3 +366,5 @@ copy: src: redhat-7.yml dest: /etc/ansible/roles/os_tacker/vars/redhat-7.yml + +- include: set_openstack_release.yml diff --git a/deploy/adapters/ansible/roles/config-osa/tasks/set_openstack_release.yml b/deploy/adapters/ansible/roles/config-osa/tasks/set_openstack_release.yml new file mode 100644 index 00000000..c886eabf --- /dev/null +++ b/deploy/adapters/ansible/roles/config-osa/tasks/set_openstack_release.yml @@ -0,0 +1,15 @@ +############################################################################ +# Copyright (c) 2018 HUAWEI TECHNOLOGIES CO.,LTD and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +--- +- name: set openstack release + lineinfile: + dest: "{{ run_dir }}/group_vars/all" + line: "openstack_release: {{ openstack_release }}" + +- meta: refresh_inventory diff --git a/deploy/adapters/ansible/roles/config-osa/vars/main.yml b/deploy/adapters/ansible/roles/config-osa/vars/main.yml index 0b3b0c1e..65f67c18 100644 --- a/deploy/adapters/ansible/roles/config-osa/vars/main.yml +++ b/deploy/adapters/ansible/roles/config-osa/vars/main.yml @@ -11,3 +11,6 @@ LOCAL_REPOSITORY_IP: "192.168.137.222" ceph_host: "{{ hostvars[inventory_hostname]['groups']['ceph_osd'][0] }}" repo_dest_path: "/var/www/repo/os-releases/15.1.4/ubuntu-16.04-x86_64/" networking_sfc_version: 4.0.0 +# yamllint disable rule:line-length +openstack_release: "{{ lookup('yamlfile', '/opt/openstack-ansible/group_vars/all/all.yml key=openstack_release') }}" +# yamllint enable rule:line-length diff --git a/deploy/adapters/ansible/roles/post-openstack/tasks/main.yml b/deploy/adapters/ansible/roles/post-openstack/tasks/main.yml index fb0dc67d..d5582391 100644 --- a/deploy/adapters/ansible/roles/post-openstack/tasks/main.yml +++ b/deploy/adapters/ansible/roles/post-openstack/tasks/main.yml @@ -69,3 +69,20 @@ flat: "yes" when: - inventory_hostname == groups['network_hosts'][0] + +# yamllint disable rule:line-length +- name: fix horizon upload image issue + lineinfile: + dest: "/openstack/venvs/horizon-{{ openstack_release }}/lib/python2.7/site-packages/openstack_dashboard/local/local_settings.py" + regexp: "^HORIZON_IMAGES_UPLOAD_MODE" + line: "HORIZON_IMAGES_UPLOAD_MODE = 'legacy'" + when: + - inventory_hostname in groups['dashboard_containers'] +# yamllint enable rule:line-length + +- name: restart apache2 + service: + name: apache2 + state: restarted + when: + - inventory_hostname in groups['dashboard_containers'] diff --git a/deploy/ansible_plugins/lookup/yamlfile.py b/deploy/ansible_plugins/lookup/yamlfile.py new file mode 100644 index 00000000..c915adc7 --- /dev/null +++ b/deploy/ansible_plugins/lookup/yamlfile.py @@ -0,0 +1,55 @@ +#!/bin/venv python + +import yaml +import sys + +compass_bin = "/opt/compass/bin" +sys.path.append(compass_bin) +import switch_virtualenv # noqa: F401 + +from ansible.errors import AnsibleError # noqa: E402 +from ansible.plugins.lookup import LookupBase # noqa: E402 + + +class LookupModule(LookupBase): + + def read_yaml(self, yaml_path, key, default=None): + if not key: + return None + + with open(yaml_path) as fd: + yaml_data = yaml.safe_load(fd) + + if key in yaml_data: + return yaml_data[key] + else: + return default + + def run(self, terms, variables=None, **kwargs): + res = [] + if not isinstance(terms, list): + terms = [terms] + + for term in terms: + params = term.split() + yaml_path = params[0] + + param_dict = { + 'key': None, + 'default': None + } + + try: + for param in params[1:]: + key, value = param.split('=') + assert(key in param_dict) + param_dict[key] = value + except (AttributeError, AssertionError), e: + raise AnsibleError(e) + + data = self.read_yaml(yaml_path, + param_dict['key'], + param_dict['default']) + res.append(data) + + return res diff --git a/deploy/compass_conf/templates/ansible_installer/openstack_pike/ansible_cfg/HA-ansible-multinodes.tmpl b/deploy/compass_conf/templates/ansible_installer/openstack_pike/ansible_cfg/HA-ansible-multinodes.tmpl index 1d0d6478..6fdb6b16 100755 --- a/deploy/compass_conf/templates/ansible_installer/openstack_pike/ansible_cfg/HA-ansible-multinodes.tmpl +++ b/deploy/compass_conf/templates/ansible_installer/openstack_pike/ansible_cfg/HA-ansible-multinodes.tmpl @@ -4,6 +4,7 @@ log_path = /var/ansible/run/openstack_pike-$cluster_name/ansible.log host_key_checking = False callback_whitelist = playbook_done, status_callback callback_plugins = /opt/ansible_plugins/callback +lookup_plugins = /opt/ansible_plugins/lookup forks=100 [ssh_connection] -- cgit 1.2.3-korg