Skip to content

Commit 640e6cd

Browse files
Change Gateway offline install method to use pip wheel/download (#287)
* Change offline install method to use pip wheel/download * Update docs * Drop support for old Gateway versions * Remove separate Gateway Ansible install tasks since Ansible is installed automatically when installing the Gateway wheel
1 parent a5443c8 commit 640e6cd

27 files changed

Lines changed: 607 additions & 731 deletions

README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -573,8 +573,8 @@ all:
573573
hosts:
574574
example2.host.com:
575575
vars:
576-
gateway_release: 2023.1
577-
gateway_whl_file: automation_gateway-3.227.0+2023.1.9-py3-none-any.whl
576+
gateway_release: 4.3
577+
gateway_whl_file: automation_gateway-4.3.56-py3-none-any.whl
578578
```
579579
580580
### Run the Itential Deployer
@@ -735,8 +735,8 @@ all:
735735
hosts:
736736
example2.host.com:
737737
vars:
738-
gateway_release: 2023.1
739-
gateway_whl_file: automation_gateway-3.227.0+2023.1.9-py3-none-any.whl
738+
gateway_release: 4.3
739+
gateway_whl_file: automation_gateway-4.3.56-py3-none-any.whl
740740
```
741741
742742
### Minimal Architecture Inventory
@@ -775,8 +775,8 @@ all:
775775
hosts:
776776
automation-gateway.host.com:
777777
vars:
778-
gateway_release: 2023.1
779-
gateway_whl_file: automation_gateway-3.227.0+2023.1.9-py3-none-any.whl
778+
gateway_release: 4.3
779+
gateway_whl_file: automation_gateway-4.3.56-py3-none-any.whl
780780
```
781781
782782
### Highly Available Architecture Inventory
@@ -829,8 +829,8 @@ all:
829829
hosts:
830830
automation-gateway1.host.com:
831831
vars:
832-
gateway_release: 2023.1
833-
gateway_whl_file: automation_gateway-3.227.0+2023.1.9-py3-none-any.whl
832+
gateway_release: 4.3
833+
gateway_whl_file: automation_gateway-4.3.56-py3-none-any.whl
834834
```
835835
836836
### Highly Available Architecture Inventory leveraging external dependencies
@@ -871,8 +871,8 @@ all:
871871
hosts:
872872
automation-gateway1.host.com:
873873
vars:
874-
gateway_release: 2023.1
875-
gateway_whl_file: automation_gateway-3.227.0+2023.1.9-py3-none-any.whl
874+
gateway_release: 4.3
875+
gateway_whl_file: automation_gateway-4.3.56-py3-none-any.whl
876876
```
877877
878878
### Active/Standby Architecture Inventory
@@ -964,8 +964,8 @@ all:
964964
hosts:
965965
datacenter2.automation-gateway1.host.com:
966966
vars:
967-
gateway_release: 2023.1
968-
gateway_whl_file: automation_gateway-3.227.0+2023.1.9-py3-none-any.whl
967+
gateway_release: 4.3
968+
gateway_whl_file: automation_gateway-4.3.56-py3-none-any.whl
969969
```
970970
971971
## Component Guides

docs/itential_gateway_guide.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ all:
134134
<host1>:
135135
ansible_host: <addr1>
136136
vars:
137-
gateway_release: 2023.1
137+
gateway_release: 4.3
138138
gateway_whl_file: <wheel-file>
139139
```
140140
@@ -151,7 +151,7 @@ all:
151151
<host1>:
152152
ansible_host: <addr1>
153153
vars:
154-
gateway_release: 2023.1
154+
gateway_release: 4.3
155155
gateway_whl_file: <wheel-file>
156156
gateway_https: true
157157
```
@@ -169,7 +169,7 @@ all:
169169
<host1>:
170170
ansible_host: <addr1>
171171
vars:
172-
gateway_release: 2023.1
172+
gateway_release: 4.3
173173
gateway_whl_file: <wheel-file>
174174
gateway_haproxy_enabled: true
175175
```

docs/patch_itential_gateway_guide.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ all:
3333
<host1:
3434
ansible_host: <host1-ip>
3535
vars:
36-
gateway_release: 2023.1
37-
gateway_whl_file: automation_gateway-3.227.0+2023.1.9-py3-none-any.whl
36+
gateway_release: 4.3
37+
gateway_whl_file: <wheel-file>
3838
```
3939
4040
#### Example: Patch Upgrade Inventory
@@ -47,8 +47,8 @@ all:
4747
<host1:
4848
ansible_host: <host1-ip>
4949
vars:
50-
gateway_release: 2023.1
51-
gateway_whl_file: automation_gateway-3.227.0+2023.1.52-py3-none-any.whl
50+
gateway_release: 4.3
51+
gateway_whl_file: <wheel-file>
5252
```
5353
5454
### Run Patch IAG Playbook

roles/gateway/tasks/create-gateway-archive.yml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,6 @@
2727
state: present
2828
virtualenv: "{{ gateway_pkgs_temp_dir.path }}/offline_install"
2929

30-
- name: Install Ansible
31-
ansible.builtin.pip:
32-
name: "{{ gateway_ansible_version }}"
33-
state: present
34-
virtualenv: "{{ gateway_pkgs_temp_dir.path }}/offline_install"
35-
when: gateway_enable_ansible | bool
36-
3730
- name: Copy IAG wheel file to target node
3831
ansible.builtin.copy:
3932
src: "{{ gateway_whl_file }}"

roles/gateway/tasks/download-build-rpms.yml

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,6 @@
11
# Copyright (c) 2024, Itential, Inc
22
# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
33
---
4-
- name: Download Gateway build RPMs
5-
ansible.builtin.import_role:
6-
name: offline
7-
tasks_from: download-rpms
8-
vars:
9-
offline_download_method: yum_module
10-
offline_download_packages: "{{ gateway_build_packages }}"
11-
offline_download_dir: "{{ gateway_offline_target_node_rpms_dir }}/build"
12-
13-
- name: Copy Gateway build RPMs to control node
14-
ansible.builtin.import_role:
15-
name: offline
16-
tasks_from: fetch-packages
17-
vars:
18-
offline_src_dir: "{{ gateway_offline_target_node_rpms_dir }}/build"
19-
offline_dest_dir: "{{ gateway_offline_control_node_rpms_dir }}/build"
20-
214
- name: Install Gateway build packages
225
ansible.builtin.dnf:
236
name: "{{ item }}"

roles/gateway/tasks/download-dependency-wheels.yml

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -38,37 +38,31 @@
3838
- name: Setup Python virtual environment
3939
ansible.builtin.command:
4040
chdir: "{{ gateway_pkgs_temp_dir.path }}"
41-
cmd: "{{ gateway_python_executable }} -m venv offline_install"
41+
cmd: "{{ gateway_python_executable }} -m venv offline_download"
4242
changed_when: true
4343

44-
- name: Install base Python Dependencies
44+
- name: Install base Python dependencies
4545
ansible.builtin.pip:
4646
name: "{{ gateway_python_base_dependencies }}"
4747
state: present
48-
virtualenv: "{{ gateway_pkgs_temp_dir.path }}/offline_install"
48+
virtualenv: "{{ gateway_pkgs_temp_dir.path }}/offline_download"
4949
extra_args: --log /var/log/pip.log
5050
when:
5151
- gateway_python_base_dependencies is defined
52+
- gateway_python_base_dependencies is iterable
5253
- gateway_python_base_dependencies | length > 0
5354

54-
- name: Install IAG Python Dependencies
55+
- name: Install IAG Python dependencies
5556
ansible.builtin.pip:
5657
name: "{{ gateway_python_app_dependencies }}"
5758
state: present
58-
virtualenv: "{{ gateway_pkgs_temp_dir.path }}/offline_install"
59+
virtualenv: "{{ gateway_pkgs_temp_dir.path }}/offline_download"
5960
extra_args: --log /var/log/pip.log
6061
when:
6162
- gateway_python_app_dependencies is defined
63+
- gateway_python_app_dependencies is iterable
6264
- gateway_python_app_dependencies | length > 0
6365

64-
- name: Install Ansible
65-
ansible.builtin.pip:
66-
name: "{{ gateway_ansible_version }}"
67-
state: present
68-
virtualenv: "{{ gateway_pkgs_temp_dir.path }}/offline_install"
69-
extra_args: --log /var/log/pip.log
70-
when: gateway_enable_ansible | bool
71-
7266
- name: Download Ansible collections
7367
ansible.builtin.include_tasks:
7468
file: download-ansible-collections.yml
@@ -77,33 +71,39 @@
7771
- gateway_ansible_collections is iterable
7872
- gateway_ansible_collections | length > 0
7973

80-
- name: Install IAG
81-
ansible.builtin.pip:
82-
name: "{{ gateway_wheel_download.files[0].path }}"
83-
virtualenv: "{{ gateway_pkgs_temp_dir.path }}/offline_install"
84-
extra_args: --log /var/log/pip.log
85-
86-
- name: Uninstall IAG
87-
ansible.builtin.pip:
88-
name: "{{ gateway_wheel_download.files[0].path }}"
89-
state: absent
90-
virtualenv: "{{ gateway_pkgs_temp_dir.path }}/offline_install"
91-
extra_args: --log /var/log/pip.log
92-
93-
- name: Create requirements file
94-
ansible.builtin.shell:
74+
- name: Build wheels from source distributions
75+
ansible.builtin.command:
76+
cmd: >
77+
offline_download/bin/pip3 wheel
78+
{{ item }}
79+
-w {{ gateway_offline_target_node_wheels_dir }}/app
80+
--no-deps
81+
args:
9582
chdir: "{{ gateway_pkgs_temp_dir.path }}"
96-
cmd: offline_install/bin/pip3 freeze > requirements.txt
83+
loop: "{{ gateway_python_wheel_build_dependencies }}"
9784
changed_when: true
9885

99-
- name: Download wheel files
86+
- name: Download automation-gateway and remaining dependencies
10087
ansible.builtin.command:
101-
cmd: "offline_install/bin/pip3 download -r requirements.txt
102-
-d {{ gateway_offline_target_node_wheels_dir }}/app"
88+
cmd: >
89+
offline_download/bin/pip3 download {{ gateway_wheel_download.files[0].path }}
90+
-d {{ gateway_offline_target_node_wheels_dir }}/app
10391
args:
10492
chdir: "{{ gateway_pkgs_temp_dir.path }}"
10593
changed_when: true
10694

95+
- name: Find source distributions after building wheels
96+
ansible.builtin.find:
97+
paths: "{{ gateway_offline_target_node_wheels_dir }}/app"
98+
patterns: "*.tar.gz"
99+
register: gateway_source_dists
100+
101+
- name: Delete source distributions
102+
ansible.builtin.file:
103+
path: "{{ item.path }}"
104+
state: absent
105+
loop: "{{ gateway_source_dists.files }}"
106+
107107
- name: Copy IAG Python dependencies to control node
108108
ansible.builtin.import_role:
109109
name: offline

roles/gateway/tasks/main.yml

Lines changed: 3 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -124,39 +124,6 @@
124124
- gateway_build_packages is iterable
125125
- gateway_build_packages | length > 0
126126

127-
- name: Install Gateway build packages (offline)
128-
when: offline_install_enabled | bool
129-
block:
130-
- name: Install Gateway build packages (offline)
131-
ansible.builtin.import_role:
132-
name: offline
133-
tasks_from: install-rpms
134-
vars:
135-
offline_rpms_path: "{{ gateway_offline_control_node_rpms_dir }}/build"
136-
137-
# Build a list of installed build packages. The rpm_list variable is registered in the
138-
# offline install-rpms.
139-
- name: Set Gateway build package list
140-
ansible.builtin.set_fact:
141-
gateway_installed_build_package_list:
142-
"{{ gateway_installed_build_package_list | default([]) +
143-
[item | basename | split('.el') | first] }}"
144-
with_items: "{{ rpm_list.files | map(attribute='path') | list | sort }}"
145-
when:
146-
- rpm_list is defined
147-
- rpm_list is iterable
148-
- rpm_list | length > 0
149-
150-
# Build a list of build packages that need to be removed later. We don't want to remove
151-
# all of the installed build packages, only the ones that are in the gateway_build_packages
152-
# and gateway_installed_build_package_list.
153-
- name: Set Gateway build package remove list
154-
ansible.builtin.set_fact:
155-
gateway_build_package_remove_list:
156-
"{{ gateway_build_package_remove_list | default([]) + [item] }}"
157-
with_items: "{{ gateway_build_packages }}"
158-
when: gateway_installed_build_package_list | select('search', item | regex_escape) | list | length > 0
159-
160127
- name: Install Python dependencies
161128
tags: install_python_dependencies
162129
block:
@@ -165,18 +132,13 @@
165132
file: install-python-dependencies.yml
166133

167134
# Need to install ansible within the virtual environment
168-
- name: Install Ansible
169-
tags: install_ansible
135+
- name: Configure Ansible
136+
tags: configure_ansible
170137
when: gateway_enable_ansible | bool
171138
block:
172-
- name: Install Ansible and Ansible collections
139+
- name: Install Ansible collections
173140
when: not offline_install_enabled | bool
174141
block:
175-
- name: Install Ansible into the python virtual environment
176-
ansible.builtin.pip:
177-
name: "{{ gateway_ansible_version }}"
178-
virtualenv: "{{ gateway_install_dir }}/venv"
179-
180142
- name: Install collections
181143
ansible.builtin.command:
182144
argv:
@@ -279,15 +241,6 @@
279241
virtualenv: "{{ gateway_install_dir }}/venv"
280242
when: not offline_install_enabled | bool
281243

282-
- name: Install IAG (offline)
283-
ansible.builtin.include_role:
284-
name: offline
285-
tasks_from: install-wheels
286-
vars:
287-
offline_wheels_dir: "{{ gateway_offline_control_node_wheels_dir }}/gateway"
288-
offline_python_venv: "{{ gateway_python_venv }}"
289-
when: offline_install_enabled | bool
290-
291244
- name: Set ownership/permissions and create properties.yml
292245
when: not gateway_installed.stat.exists
293246
block:
@@ -423,25 +376,6 @@
423376
- gateway_build_packages_result.results is iterable
424377
- gateway_build_packages_result.results | length > 0
425378

426-
- name: Uninstall Gateway build packages (offline)
427-
when: offline_install_enabled | bool
428-
block:
429-
- name: Get list of yum repos (to disable temporarily) # noqa command-instead-of-module
430-
ansible.builtin.command: yum -q repolist
431-
register: gateway_repolist_result
432-
changed_when: false
433-
434-
- name: Uninstall Gateway build packages (offline)
435-
ansible.builtin.dnf:
436-
name: "{{ gateway_build_package_remove_list }}"
437-
state: absent
438-
enablerepo: []
439-
disablerepo: "{{ gateway_repolist_result.stdout_lines[1:] | map('split', ' ')
440-
| map('first') | list }}"
441-
when:
442-
- gateway_build_package_remove_list is defined
443-
- gateway_build_package_remove_list | length > 0
444-
445379
- name: Assert that Gateway is running
446380
ansible.builtin.systemd:
447381
name: automation-gateway

roles/gateway/tasks/update-release-file.yml

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,25 @@
3838
changed_when: true
3939

4040
- name: Update release file with Ansible version
41-
ansible.builtin.lineinfile:
42-
path: "{{ common_itential_release_file }}"
43-
line: "ANSIBLE={{ gateway_ansible_version }}"
44-
mode: "0666"
45-
create: true
4641
when: gateway_enable_ansible | bool
47-
changed_when: true
42+
block:
43+
- name: Get Ansible version from automation-gateway venv
44+
ansible.builtin.command:
45+
cmd: "{{ gateway_python_venv }}/bin/ansible --version"
46+
register: gateway_ansible_venv_version
47+
changed_when: false
48+
49+
- name: Extract version
50+
ansible.builtin.set_fact:
51+
gateway_ansible_version: "{{ gateway_ansible_venv_version.stdout_lines[0] | regex_search('\\d+\\.\\d+\\.\\d+') }}"
52+
53+
- name: Update release file with Ansible version
54+
ansible.builtin.lineinfile:
55+
path: "{{ common_itential_release_file }}"
56+
line: "ANSIBLE={{ gateway_ansible_version }}"
57+
mode: "0666"
58+
create: true
59+
changed_when: true
4860

4961
- name: Update release file with Nornir version
5062
ansible.builtin.lineinfile:

0 commit comments

Comments
 (0)