From bfabfab93f28e2ef6b0ea9ae377bc57760a242ac Mon Sep 17 00:00:00 2001 From: Matt Thompson Date: Thu, 17 Mar 2016 15:15:49 +0000 Subject: [PATCH] Standardise installation-related task files Most IRR roles have identical pre_install and install YAML task files. This makes it easy to change them across the board. Horizon, however, has a number of tasks in the pre_install YAML file where on the other roles these tasks lie in the install YAML. This commit moves the following from horizon_pre_install to horizon_install.yml: Install requires pip packages Get local venv checksum Get remote venv checksum Attempt venv download Set horizon get_venv fact Remove existing venv Create horizon venv dir Unarchive pre-built venv Update virtualenv path Create horizon venv Create horizon links for venv Create static horizon dir Additionally, we delete the 'Create horizon venv' task as there should be no reason to install horizon_requires_pip_packages into the venv itself. This also requires moving 'Create horizon links for venv' and 'Create static horizon dir' to the end of horizon_install.yml since the venv does not exist at this point as the 'Install pip packages (venv)' still needs to run. With this change in place, it becomes easier to make changes across all roles as they should now all follow a similar pattern. Change-Id: Ie22b2ccdfb5e1f58b09c6740d16c9b538521143c --- tasks/horizon_install.yml | 145 ++++++++++++++++++++++++++++++ tasks/horizon_pre_install.yml | 161 ---------------------------------- 2 files changed, 145 insertions(+), 161 deletions(-) diff --git a/tasks/horizon_install.yml b/tasks/horizon_install.yml index 54c13e3d..faf78834 100644 --- a/tasks/horizon_install.yml +++ b/tasks/horizon_install.yml @@ -65,6 +65,121 @@ - horizon-install - horizon-apt-packages +- name: Install requires pip packages + pip: + name: "{{ item }}" + state: present + extra_args: "{{ pip_install_options|default('') }}" + register: install_packages + until: install_packages|success + retries: 5 + delay: 2 + with_items: + - "{{ horizon_requires_pip_packages }}" + tags: + - horizon-pip-packages + +- name: Get local venv checksum + stat: + path: "/var/cache/{{ horizon_venv_download_url | basename }}" + get_md5: False + when: + - not horizon_developer_mode | bool + - horizon_venv_enabled | bool + register: local_venv_stat + tags: + - horizon-install + - horizon-pip-packages + +- name: Get remote venv checksum + uri: + url: "{{ horizon_venv_download_url | replace('tgz', 'checksum') }}" + return_content: True + when: + - not horizon_developer_mode | bool + - horizon_venv_enabled | bool + register: remote_venv_checksum + tags: + - horizon-install + - horizon-pip-packages + +# TODO: When project moves to ansible 2 we can pass this a sha256sum which will: +# a) allow us to remove force: yes +# b) allow the module to calculate the checksum of dest file which would +# result in file being downloaded only if provided and dest sha256sum +# checksums differ +- name: Attempt venv download + get_url: + url: "{{ horizon_venv_download_url }}" + dest: "/var/cache/{{ horizon_venv_download_url | basename }}" + force: yes + ignore_errors: true + register: get_venv + when: + - not horizon_developer_mode | bool + - horizon_venv_enabled | bool + - (local_venv_stat.stat.exists == False or + {{ local_venv_stat.stat.checksum is defined and local_venv_stat.stat.checksum != remote_venv_checksum.content | trim }}) + tags: + - horizon-install + - horizon-pip-packages + +- name: Set horizon get_venv fact + set_fact: + horizon_get_venv: "{{ get_venv }}" + when: horizon_venv_enabled | bool + tags: + - horizon-install + - horizon-pip-packages + +- name: Remove existing venv + file: + path: "{{ horizon_venv_bin | dirname }}" + state: absent + when: + - horizon_venv_enabled | bool + - horizon_get_venv | changed + tags: + - horizon-install + - horizon-pip-packages + +- name: Create horizon venv dir + file: + path: "{{ horizon_venv_bin | dirname }}" + state: directory + when: + - not horizon_developer_mode | bool + - horizon_venv_enabled | bool + - horizon_get_venv | changed + tags: + - horizon-install + - horizon-pip-packages + +- name: Unarchive pre-built venv + unarchive: + src: "/var/cache/{{ horizon_venv_download_url | basename }}" + dest: "{{ horizon_venv_bin | dirname }}" + copy: "no" + when: + - not horizon_developer_mode | bool + - horizon_venv_enabled | bool + - horizon_get_venv | changed + notify: Restart apache2 + tags: + - horizon-install + - horizon-pip-packages + +- name: Update virtualenv path + command: > + virtualenv-tools --update-path=auto {{ horizon_venv_bin | dirname }} + when: + - not horizon_developer_mode | bool + - horizon_venv_enabled | bool + - horizon_get_venv | success + tags: + - horizon-install + - horizon-pip-packages + - name: Install pip packages (venv) pip: name: "{{ item }}" @@ -100,3 +215,33 @@ notify: Restart apache2 tags: - horizon-pip-packages + +- name: Create horizon links for venv + file: + src: "{{ item.src }}" + dest: "{{ item.dest }}" + owner: "{{ horizon_system_user_name }}" + group: "{{ horizon_system_group_name }}" + state: "link" + with_items: + - src: "{{ horizon_lib_dir | dirname }}/site-packages" + dest: "{{ horizon_lib_dir }}" + when: + - horizon_venv_enabled | bool + tags: + - horizon-install + - horizon-configs + +- name: Create static horizon dir + file: + path: "{{ item.path }}" + state: "directory" + owner: "{{ item.owner|default(horizon_system_user_name) }}" + group: "{{ item.group|default(horizon_system_group_name) }}" + with_items: + - { path: "{{ horizon_lib_dir }}/static", mode: "2755" } + - { path: "{{ horizon_lib_dir }}/openstack_dashboard", mode: "2755" } + - { path: "{{ horizon_lib_dir }}/openstack_dashboard/local", mode: "2755" } + - { path: "{{ horizon_lib_dir }}/openstack_dashboard/local/enabled", mode: "2755" } + tags: + - horizon-dirs diff --git a/tasks/horizon_pre_install.yml b/tasks/horizon_pre_install.yml index 34a8a5ff..efb06794 100644 --- a/tasks/horizon_pre_install.yml +++ b/tasks/horizon_pre_install.yml @@ -58,167 +58,6 @@ tags: - horizon-dirs -- name: Install requires pip packages - pip: - name: "{{ item }}" - state: present - extra_args: "{{ pip_install_options|default('') }}" - register: install_packages - until: install_packages|success - retries: 5 - delay: 2 - with_items: - - "{{ horizon_requires_pip_packages }}" - tags: - - horizon-pip-packages - -- name: Get local venv checksum - stat: - path: "/var/cache/{{ horizon_venv_download_url | basename }}" - get_md5: False - when: - - not horizon_developer_mode | bool - - horizon_venv_enabled | bool - register: local_venv_stat - tags: - - horizon-install - - horizon-pip-packages - -- name: Get remote venv checksum - uri: - url: "{{ horizon_venv_download_url | replace('tgz', 'checksum') }}" - return_content: True - when: - - not horizon_developer_mode | bool - - horizon_venv_enabled | bool - register: remote_venv_checksum - tags: - - horizon-install - - horizon-pip-packages - -# TODO: When project moves to ansible 2 we can pass this a sha256sum which will: -# a) allow us to remove force: yes -# b) allow the module to calculate the checksum of dest file which would -# result in file being downloaded only if provided and dest sha256sum -# checksums differ -- name: Attempt venv download - get_url: - url: "{{ horizon_venv_download_url }}" - dest: "/var/cache/{{ horizon_venv_download_url | basename }}" - force: yes - ignore_errors: true - register: get_venv - when: - - not horizon_developer_mode | bool - - horizon_venv_enabled | bool - - (local_venv_stat.stat.exists == False or - {{ local_venv_stat.stat.checksum is defined and local_venv_stat.stat.checksum != remote_venv_checksum.content | trim }}) - tags: - - horizon-install - - horizon-pip-packages - -- name: Set horizon get_venv fact - set_fact: - horizon_get_venv: "{{ get_venv }}" - when: horizon_venv_enabled | bool - tags: - - horizon-install - - horizon-pip-packages - -- name: Remove existing venv - file: - path: "{{ horizon_venv_bin | dirname }}" - state: absent - when: - - horizon_venv_enabled | bool - - horizon_get_venv | changed - tags: - - horizon-install - - horizon-pip-packages - -- name: Create horizon venv dir - file: - path: "{{ horizon_venv_bin | dirname }}" - state: directory - when: - - not horizon_developer_mode | bool - - horizon_venv_enabled | bool - - horizon_get_venv | changed - tags: - - horizon-install - - horizon-pip-packages - -- name: Unarchive pre-built venv - unarchive: - src: "/var/cache/{{ horizon_venv_download_url | basename }}" - dest: "{{ horizon_venv_bin | dirname }}" - copy: "no" - when: - - not horizon_developer_mode | bool - - horizon_venv_enabled | bool - - horizon_get_venv | changed - notify: Restart apache2 - tags: - - horizon-install - - horizon-pip-packages - -- name: Update virtualenv path - command: > - virtualenv-tools --update-path=auto {{ horizon_venv_bin | dirname }} - when: - - not horizon_developer_mode | bool - - horizon_venv_enabled | bool - - horizon_get_venv | success - tags: - - horizon-install - - horizon-pip-packages - -- name: Create horizon venv - pip: - name: "{{ item }}" - state: present - virtualenv: "{{ horizon_venv_bin | dirname }}" - virtualenv_site_packages: "no" - extra_args: "{{ pip_install_options|default('') }}" - with_items: - - "{{ horizon_requires_pip_packages }}" - when: - - horizon_venv_enabled | bool - - horizon_get_venv | failed or horizon_developer_mode | bool - tags: - - horizon-install - - horizon-pip-packages - -- name: Create horizon links for venv - file: - src: "{{ item.src }}" - dest: "{{ item.dest }}" - owner: "{{ horizon_system_user_name }}" - group: "{{ horizon_system_group_name }}" - state: "link" - with_items: - - src: "{{ horizon_lib_dir | dirname }}/site-packages" - dest: "{{ horizon_lib_dir }}" - when: - - horizon_venv_enabled | bool - tags: - - horizon-install - - horizon-configs - -- name: Create static horizon dir - file: - path: "{{ item.path }}" - state: "directory" - owner: "{{ item.owner|default(horizon_system_user_name) }}" - group: "{{ item.group|default(horizon_system_group_name) }}" - with_items: - - { path: "{{ horizon_lib_dir }}/static", mode: "2755" } - - { path: "{{ horizon_lib_dir }}/openstack_dashboard", mode: "2755" } - - { path: "{{ horizon_lib_dir }}/openstack_dashboard/local", mode: "2755" } - - { path: "{{ horizon_lib_dir }}/openstack_dashboard/local/enabled", mode: "2755" } - tags: - - horizon-dirs - - name: Test for log directory or link shell: | if [ -h "/var/log/horizon" ]; then