Skip to content

Commit c1fca20

Browse files
committed
[nat64_appliance] Add support for downloading pre-built images
Introduce cifmw_nat64_appliance_image_url parameter to download pre-built NAT64 images, with optional checksum verification support. Signed-off-by: Miguel Angel Nieto Jimenez <[email protected]>
1 parent 5f5393f commit c1fca20

File tree

4 files changed

+94
-48
lines changed

4 files changed

+94
-48
lines changed

roles/nat64_appliance/README.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,38 @@
2525
* `cifmw_nat64_appliance_memory`: (Integer) Memory in GiB for the nat64 appliance VM. Defaults to: `2`.
2626
* `cifmw_nat64_appliance_cpus`: (Integer) Virtual CPUs for the nat64 appliance VM. Defaults to: `2`.
2727
* `cifmw_nat64_appliance_ssh_pub_keys`: (List) List of SSH public key for the nat64 appliance VM. Defaults to: `[]`.
28+
* `cifmw_nat64_appliance_image_url`: (String) URL to download a pre-built NAT64 appliance image. If empty, the image will be built from source using diskimage-builder. Defaults to: `""`.
29+
* `cifmw_nat64_appliance_image_checksum`: (String) Optional checksum for the downloaded image in the format `algorithm:hash` (e.g., `sha256:xxxxx`). Only used when `cifmw_nat64_appliance_image_url` is set. Defaults to: undefined.
30+
* `cifmw_nat64_appliance_download_timeout`: (Integer) Timeout in seconds for image download. Only used when `cifmw_nat64_appliance_image_url` is set. Defaults to: `600`.
2831
* `cifmw_nat64_ipv6_prefix`: (String) IPv6 prefix for nat64. Defaults to: `fc00:abcd:abcd:fc00::/64`.
2932
* `cifmw_nat64_ipv6_tayga_address`: (String) Tayga IPv6 address. Defaults to: `fc00:abcd:abcd:fc00::3`.
3033

3134
## Building the image
3235

3336
Include the `nat64_appliance` role in a playbook. For example:
3437

38+
### Build from source
39+
40+
```yaml
41+
- name: Build nat64-appliance from source
42+
hosts: "{{ cifmw_target_host | default('localhost') }}"
43+
roles:
44+
- nat64_appliance
3545
```
36-
- name: Build nat64-appliance
46+
47+
### Download pre-built image
48+
49+
```yaml
50+
- name: Download pre-built nat64-appliance image
3751
hosts: "{{ cifmw_target_host | default('localhost') }}"
52+
vars:
53+
cifmw_nat64_appliance_image_url: "http://example.com/nat64-appliance.qcow2"
54+
# cifmw_nat64_appliance_image_checksum: "sha256:xxxxx" # Optional
3855
roles:
3956
- nat64_appliance
4057
```
4158
42-
The built image will be in: `{{ cifmw_nat64_appliance_workdir }}/nat64-appliance.qcow2`
59+
The image will be in: `{{ cifmw_nat64_appliance_workdir }}/nat64-appliance.qcow2`
4360

4461
## Using the nat64-appliance
4562

roles/nat64_appliance/defaults/main.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ cifmw_nat64_appliance_memory: 2
4040
cifmw_nat64_appliance_cpus: 2
4141
cifmw_nat64_appliance_ssh_pub_keys: []
4242

43+
# Image download configuration
44+
# Set cifmw_nat64_appliance_image_url to download a pre-built image
45+
cifmw_nat64_appliance_image_url: ""
46+
cifmw_nat64_appliance_download_timeout: 600 # 10 minutes
4347

4448
cifmw_nat64_ipv6_prefix: "2620:cf:cf:fc00::/64"
4549
cifmw_nat64_ipv6_tayga_address: "2620:cf:cf:fc00::3"

roles/nat64_appliance/tasks/cleanup.yml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,19 @@
3232
community.libvirt.virt:
3333
command: list_vms
3434

35-
- name: Stop the nat64_appliance VM
35+
- name: Get nat64_appliance VM state
3636
when: cifmw_nat64_appliance_name in _list_vms.list_vms
37+
register: _vm_state
38+
community.libvirt.virt:
39+
command: status
40+
name: "{{ cifmw_nat64_appliance_name }}"
41+
uri: "{{ cifmw_nat64_libvirt_uri }}"
42+
43+
- name: Stop the nat64_appliance VM
44+
when:
45+
- cifmw_nat64_appliance_name in _list_vms.list_vms
46+
- _vm_state.status is defined
47+
- _vm_state.status == "running"
3748
community.libvirt.virt:
3849
command: destroy
3950
name: "{{ cifmw_nat64_appliance_name }}"

roles/nat64_appliance/tasks/main.yml

Lines changed: 59 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -29,52 +29,66 @@
2929
state: directory
3030
mode: "0755"
3131

32-
- name: Install required RPM packages
33-
tags:
34-
- packages
35-
become: true
36-
ansible.builtin.package:
37-
name:
38-
- python3-pip
39-
- qemu-img
40-
- dosfstools
41-
- xfsprogs
42-
state: present
32+
- name: Build NAT64 appliance image from source
33+
when:
34+
- cifmw_nat64_appliance_image_url | length == 0
35+
block:
36+
- name: Install required RPM packages
37+
tags:
38+
- packages
39+
become: true
40+
ansible.builtin.package:
41+
name:
42+
- python3-pip
43+
- qemu-img
44+
- dosfstools
45+
- xfsprogs
46+
state: present
4347

44-
- name: Install diskimage-builder in virtualenv
45-
tags:
46-
- packages
47-
ansible.builtin.pip:
48-
virtualenv_command: "python3 -m venv"
49-
virtualenv: "{{ cifmw_nat64_appliance_venv_dir }}"
50-
name:
51-
- diskimage-builder
52-
- setuptools
48+
- name: Install diskimage-builder in virtualenv
49+
tags:
50+
- packages
51+
ansible.builtin.pip:
52+
virtualenv_command: "python3 -m venv"
53+
virtualenv: "{{ cifmw_nat64_appliance_venv_dir }}"
54+
name:
55+
- diskimage-builder
56+
- setuptools
5357

54-
- name: Copy files to cifmw_nat64_appliance_dir
55-
ansible.builtin.copy:
56-
src: "{{ item }}"
57-
dest: "{{ cifmw_nat64_appliance_workdir }}/{{ item }}"
58-
mode: preserve
59-
loop:
60-
- "elements/"
61-
- nat64-appliance.yaml
58+
- name: Copy files to cifmw_nat64_appliance_dir
59+
ansible.builtin.copy:
60+
src: "{{ item }}"
61+
dest: "{{ cifmw_nat64_appliance_workdir }}/{{ item }}"
62+
mode: preserve
63+
loop:
64+
- "elements/"
65+
- nat64-appliance.yaml
66+
67+
- name: Clone edpm-image-builder (reset-bls-entries dib element)
68+
ansible.builtin.git:
69+
repo: https://github.com/openstack-k8s-operators/edpm-image-builder.git
70+
dest: "{{ cifmw_nat64_appliance_workdir }}/edpm-image-builder"
71+
version: main
6272

63-
- name: Clone edpm-image-builder (reset-bls-entries dib element)
64-
ansible.builtin.git:
65-
repo: https://github.com/openstack-k8s-operators/edpm-image-builder.git
66-
dest: "{{ cifmw_nat64_appliance_workdir }}/edpm-image-builder"
67-
version: main
73+
- name: Build the nat64-appliance image using DIB
74+
become: "{{ cifmw_nat64_appliance_run_dib_as_root | default(false) | bool }}"
75+
environment:
76+
ELEMENTS_PATH: "{{ cifmw_nat64_appliance_workdir }}/elements:{{ cifmw_nat64_appliance_workdir }}/edpm-image-builder/dib/"
77+
DIB_IMAGE_CACHE: "{{ cifmw_nat64_appliance_workdir }}/cache"
78+
DIB_DEBUG_TRACE: '1'
79+
cifmw.general.ci_script:
80+
chdir: "{{ cifmw_nat64_appliance_workdir }}"
81+
output_dir: "{{ cifmw_nat64_appliance_basedir }}/artifacts"
82+
creates: "{{ cifmw_nat64_appliance_workdir }}/nat64-appliance.qcow2"
83+
script: "{{ cifmw_nat64_appliance_venv_dir }}/bin/diskimage-builder nat64-appliance.yaml {{ extra_args | default('') }}"
84+
executable: "/bin/bash"
6885

69-
- name: Build the nat64-appliance image using DIB
70-
become: "{{ cifmw_nat64_appliance_run_dib_as_root | default(false) | bool }}"
71-
environment:
72-
ELEMENTS_PATH: "{{ cifmw_nat64_appliance_workdir }}/elements:{{ cifmw_nat64_appliance_workdir }}/edpm-image-builder/dib/"
73-
DIB_IMAGE_CACHE: "{{ cifmw_nat64_appliance_workdir }}/cache"
74-
DIB_DEBUG_TRACE: '1'
75-
cifmw.general.ci_script:
76-
chdir: "{{ cifmw_nat64_appliance_workdir }}"
77-
output_dir: "{{ cifmw_nat64_appliance_basedir }}/artifacts"
78-
creates: "{{ cifmw_nat64_appliance_workdir }}/nat64-appliance.qcow2"
79-
script: "{{ cifmw_nat64_appliance_venv_dir }}/bin/diskimage-builder nat64-appliance.yaml {{ extra_args | default('') }}"
80-
executable: "/bin/bash"
86+
- name: Download pre-built NAT64 appliance image
87+
when:
88+
- cifmw_nat64_appliance_image_url | length > 0
89+
ansible.builtin.get_url:
90+
url: "{{ cifmw_nat64_appliance_image_url }}"
91+
dest: "{{ cifmw_nat64_appliance_workdir }}/nat64-appliance.qcow2"
92+
checksum: "{{ cifmw_nat64_appliance_image_checksum | default(omit) }}"
93+
timeout: "{{ cifmw_nat64_appliance_download_timeout }}"
94+
mode: "0644"

0 commit comments

Comments
 (0)