Merge "Adds roles to install and run hashicorp packer"
This commit is contained in:
commit
21928eab52
@ -10,4 +10,5 @@ Jobs
|
||||
docker-jobs
|
||||
go-jobs
|
||||
helm-jobs
|
||||
packer-jobs
|
||||
system-jobs
|
||||
|
4
doc/source/packer-jobs.rst
Normal file
4
doc/source/packer-jobs.rst
Normal file
@ -0,0 +1,4 @@
|
||||
Packer Jobs
|
||||
===========
|
||||
|
||||
.. zuul:autojob:: packer
|
5
doc/source/packer-roles.rst
Normal file
5
doc/source/packer-roles.rst
Normal file
@ -0,0 +1,5 @@
|
||||
Packer Roles
|
||||
============
|
||||
|
||||
.. zuul:autorole:: ensure-packer
|
||||
.. zuul:autorole:: packer
|
@ -20,6 +20,7 @@ Roles
|
||||
js-roles
|
||||
kubernetes-roles
|
||||
launchpad-roles
|
||||
packer-roles
|
||||
puppet-roles
|
||||
python-roles
|
||||
system-roles
|
||||
|
9
playbooks/packer/pre.yaml
Normal file
9
playbooks/packer/pre.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
- hosts: all
|
||||
pre_tasks:
|
||||
- name: Install unzip
|
||||
package:
|
||||
name: unzip
|
||||
become: yes
|
||||
roles:
|
||||
- revoke-sudo
|
||||
- ensure-packer
|
3
playbooks/packer/run.yaml
Normal file
3
playbooks/packer/run.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
- hosts: all
|
||||
roles:
|
||||
- packer
|
24
roles/ensure-packer/README.rst
Normal file
24
roles/ensure-packer/README.rst
Normal file
@ -0,0 +1,24 @@
|
||||
Install packer
|
||||
|
||||
**Role Variables**
|
||||
|
||||
.. zuul:rolevar:: packer_install_dir
|
||||
:default: {{ ansible_user_dir }}/.local/bin/
|
||||
|
||||
Directory to install packer in.
|
||||
|
||||
.. zuul:rolevar:: packer_version
|
||||
:default: 1.5.5
|
||||
|
||||
Version of packer to install.
|
||||
Zuul will skip the installation if this matches an already installed version of packer.
|
||||
|
||||
.. zuul:rolevar:: packer_os
|
||||
:default: {{ ansible_system | lower }}
|
||||
|
||||
OS target of package to install.
|
||||
|
||||
.. zuul:rolevar:: packer_arch
|
||||
:default: amd64 / 386
|
||||
|
||||
Architecture target of package to install.
|
7
roles/ensure-packer/defaults/main.yaml
Normal file
7
roles/ensure-packer/defaults/main.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
hashicorp_releases_fqdn: https://releases.hashicorp.com
|
||||
packer_version: 1.5.5
|
||||
packer_install_dir: "{{ ansible_user_dir }}/.local/bin/"
|
||||
packer_os: "{{ ansible_system | lower }}"
|
||||
packer_arch: "{{ packer_arch_translation[ansible_architecture] }}"
|
||||
packer_package: "packer_{{ packer_version }}_{{ packer_os }}_{{ packer_arch }}"
|
||||
packer_executable: "{{ ansible_user_dir }}/.local/bin/packer"
|
59
roles/ensure-packer/tasks/install-packer.yaml
Normal file
59
roles/ensure-packer/tasks/install-packer.yaml
Normal file
@ -0,0 +1,59 @@
|
||||
- name: Get packer checksums
|
||||
uri:
|
||||
url: "{{ hashicorp_releases_fqdn }}/\
|
||||
packer/{{ packer_version }}/packer_{{ packer_version }}_SHA256SUMS"
|
||||
return_content: true
|
||||
register: packer_version_checksums
|
||||
|
||||
- name: Set packer checksum
|
||||
set_fact:
|
||||
packer_checksum: "{{\
|
||||
packer_version_checksums.content |\
|
||||
regex_search( '[a-z0-9]+ ' + packer_package) |\
|
||||
regex_replace( '(?P<checksum>[a-z0-9]+) ' + packer_package, '\\g<checksum>')
|
||||
}}"
|
||||
|
||||
- name: Create temp directory
|
||||
tempfile:
|
||||
state: directory
|
||||
register: packer_install_tempdir
|
||||
|
||||
- name: Download packer archive
|
||||
get_url:
|
||||
url: "{{ hashicorp_releases_fqdn }}/\
|
||||
packer/{{ packer_version }}/{{ packer_package }}.zip"
|
||||
dest: "{{ packer_install_tempdir.path }}/{{ packer_package }}.zip"
|
||||
checksum: "sha256:{{ packer_checksum }}"
|
||||
|
||||
- name: Create packer package directory
|
||||
file:
|
||||
path: "{{ packer_install_tempdir.path }}/{{ packer_package }}"
|
||||
state: directory
|
||||
|
||||
- name: Unarchive packer
|
||||
unarchive:
|
||||
src: "{{ packer_install_tempdir.path }}/{{ packer_package }}.zip"
|
||||
dest: "{{ packer_install_tempdir.path }}/{{ packer_package }}"
|
||||
remote_src: yes
|
||||
|
||||
- name: Make sure installation directory exists
|
||||
file:
|
||||
path: "{{ packer_install_dir }}"
|
||||
state: directory
|
||||
|
||||
- name: Install packer
|
||||
copy:
|
||||
src: "{{ packer_install_tempdir.path }}/{{ packer_package }}/packer"
|
||||
dest: "{{ packer_install_dir }}/packer"
|
||||
mode: '0755'
|
||||
owner: "{{ ansible_user }}"
|
||||
remote_src: yes
|
||||
|
||||
- name: Set packer executable fact
|
||||
set_fact:
|
||||
packer_executable: "{{ packer_install_dir }}/packer"
|
||||
cacheable: true
|
||||
|
||||
- name: Output packer version
|
||||
command: "{{ packer_executable }} version"
|
||||
|
11
roles/ensure-packer/tasks/main.yaml
Normal file
11
roles/ensure-packer/tasks/main.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
- name: Check installed packer version
|
||||
command: "{{ packer_executable }} version"
|
||||
register: packer_installed_version
|
||||
failed_when: false
|
||||
|
||||
- name: Install packer
|
||||
include_tasks: install-packer.yaml
|
||||
when:
|
||||
- packer_installed_version.rc != 0 or
|
||||
"packer_version != (packer_installed_version.msg | \
|
||||
regex_replace(packer_version_pattern, '\\g<version>'))"
|
7
roles/ensure-packer/vars/main.yaml
Normal file
7
roles/ensure-packer/vars/main.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
packer_arch_translation:
|
||||
amd64: amd64
|
||||
x86_64: amd64
|
||||
i386: 386
|
||||
|
||||
packer_version_pattern: ^Packer v(?P<version>\d+\.\d+\.\d+).*$
|
||||
|
32
roles/packer/README.rst
Normal file
32
roles/packer/README.rst
Normal file
@ -0,0 +1,32 @@
|
||||
Run packer command. Assumes the appropriate version of packer has been installed.
|
||||
|
||||
**Role Variables**
|
||||
|
||||
.. zuul:rolevar:: packer_executable
|
||||
:default: {{ ansible_user_dir }}/.local/bin/packer
|
||||
|
||||
Path to packer executable to use.
|
||||
|
||||
.. zuul:rolevar:: packer_command
|
||||
:default: build
|
||||
|
||||
Packer command to run.
|
||||
Examples are "build", "validate"
|
||||
|
||||
.. zuul:rolevar:: packer_template
|
||||
:default: packer.json
|
||||
|
||||
Packer template file to use when executing packer.
|
||||
|
||||
.. zuul:rolevar:: packer_extra_args
|
||||
|
||||
String of extra command line options to pass to packer.
|
||||
|
||||
.. zuul:rolevar:: packer_environemnt
|
||||
|
||||
Environment variables to set in packer command.
|
||||
|
||||
.. zuul:rolevar:: zuul_workdir
|
||||
:default: {{ zuul.project.src_dir }}
|
||||
|
||||
Directory to run packer in.
|
6
roles/packer/defaults/main.yaml
Normal file
6
roles/packer/defaults/main.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
packer_command: build
|
||||
packer_executable: "{{ ansible_user_dir }}/.local/bin/packer"
|
||||
packer_workdir: "{{ zuul.project.src_dir }}"
|
||||
packer_template: "packer.json"
|
||||
packer_extra_args: ""
|
||||
packer_environment: {}
|
36
roles/packer/tasks/main.yaml
Normal file
36
roles/packer/tasks/main.yaml
Normal file
@ -0,0 +1,36 @@
|
||||
- name: Require packer executable
|
||||
fail:
|
||||
msg: packer_executable not defined
|
||||
when: packer_executable is not defined
|
||||
|
||||
- name: Create packer variable tempfile
|
||||
tempfile:
|
||||
register: packer_variable_tempfile
|
||||
when: packer_variables is defined
|
||||
|
||||
- name: Create packer variables file
|
||||
copy:
|
||||
content: |
|
||||
{{ packer_variables | to_json }}
|
||||
dest: "{{ packer_variable_tempfile.path }}"
|
||||
when: packer_variables is defined
|
||||
no_log: true # We don't want to log this since credentials could be passed this way
|
||||
|
||||
- block:
|
||||
- name: Run packer
|
||||
command: >-
|
||||
{{ packer_executable }}
|
||||
{{ packer_command }}
|
||||
{% if packer_variables is defined %}
|
||||
-var-file={{ packer_variable_tempfile.path }}
|
||||
{% endif %}
|
||||
{{ packer_extra_args }}
|
||||
{{ packer_template }}
|
||||
environment: "{{ packer_environment }}"
|
||||
args:
|
||||
chdir: "{{ packer_workdir }}"
|
||||
always:
|
||||
- name: Delete packer variables file
|
||||
file:
|
||||
state: absent
|
||||
path: "{{ packer_variable_tempfile.path }}"
|
11
test-playbooks/packer/packer.json
Normal file
11
test-playbooks/packer/packer.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"variables": {
|
||||
"packer_test_file": "{{env `PACKER_TEST_FILE`}}"
|
||||
},
|
||||
"builders": [{
|
||||
"type": "file",
|
||||
"content": "{{user `packer_test_content`}}",
|
||||
"target": "{{user `packer_test_file` }}"
|
||||
}]
|
||||
}
|
||||
|
9
test-playbooks/packer/post.yaml
Normal file
9
test-playbooks/packer/post.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
- hosts: all
|
||||
tasks:
|
||||
- name: Ensure test_variable was written to file
|
||||
lineinfile:
|
||||
line: "{{ packer_variables.packer_test_content | replace('\n', '') }}"
|
||||
dest: "{{ packer_environment.PACKER_TEST_FILE }}"
|
||||
check_mode: yes
|
||||
register: test_variable_presence
|
||||
failed_when: test_variable_presence.changed
|
144
zuul-tests.d/packer-jobs.yaml
Normal file
144
zuul-tests.d/packer-jobs.yaml
Normal file
@ -0,0 +1,144 @@
|
||||
- job:
|
||||
name: test-packer
|
||||
parent: packer
|
||||
description: Test packer job
|
||||
post-run: test-playbooks/packer/post.yaml
|
||||
tags: all-platforms
|
||||
files:
|
||||
- roles/ensure-packer/.*
|
||||
- roles/packer/.*
|
||||
- test-playbooks/packer/.*
|
||||
- zuul.d/packer-jobs.yaml
|
||||
vars:
|
||||
packer_install_dir: '{{ ansible_user_dir }}/packer'
|
||||
packer_template: test-playbooks/packer/packer.json
|
||||
packer_environment:
|
||||
PACKER_TEST_FILE: testfile
|
||||
packer_variables:
|
||||
packer_test_content: "abc\n"
|
||||
|
||||
- job:
|
||||
name: test-packer-centos-7
|
||||
description: Test packer job on centos-7
|
||||
parent: test-packer
|
||||
tags: auto-generated
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: centos-7
|
||||
label: centos-7
|
||||
|
||||
- job:
|
||||
name: test-packer-centos-8
|
||||
description: Test packer job on centos-8
|
||||
parent: test-packer
|
||||
tags: auto-generated
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: centos-8
|
||||
label: centos-8
|
||||
|
||||
- job:
|
||||
name: test-packer-debian-stretch
|
||||
description: Test packer job on debian-stretch
|
||||
parent: test-packer
|
||||
tags: auto-generated
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: debian-stretch
|
||||
label: debian-stretch
|
||||
|
||||
- job:
|
||||
name: test-packer-fedora-30
|
||||
description: Test packer job on fedora-30
|
||||
parent: test-packer
|
||||
tags: auto-generated
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: fedora-30
|
||||
label: fedora-30
|
||||
|
||||
- job:
|
||||
name: test-packer-gentoo-17-0-systemd
|
||||
description: Test packer job on gentoo-17-0-systemd
|
||||
parent: test-packer
|
||||
tags: auto-generated
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: gentoo-17-0-systemd
|
||||
label: gentoo-17-0-systemd
|
||||
|
||||
- job:
|
||||
name: test-packer-opensuse-15
|
||||
description: Test packer job on opensuse-15
|
||||
parent: test-packer
|
||||
tags: auto-generated
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: opensuse-15
|
||||
label: opensuse-15
|
||||
|
||||
- job:
|
||||
name: test-packer-opensuse-tumbleweed-nv
|
||||
voting: false
|
||||
description: Test packer job on opensuse-tumbleweed
|
||||
parent: test-packer
|
||||
tags: auto-generated
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: opensuse-tumbleweed
|
||||
label: opensuse-tumbleweed
|
||||
|
||||
- job:
|
||||
name: test-packer-ubuntu-bionic
|
||||
description: Test packer job on ubuntu-bionic
|
||||
parent: test-packer
|
||||
tags: auto-generated
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: ubuntu-bionic
|
||||
label: ubuntu-bionic
|
||||
|
||||
- job:
|
||||
name: test-packer-ubuntu-bionic-plain-nv
|
||||
voting: false
|
||||
description: Test packer job on ubuntu-bionic-plain
|
||||
parent: test-packer
|
||||
tags: auto-generated
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: ubuntu-bionic-plain
|
||||
label: ubuntu-bionic-plain
|
||||
|
||||
- job:
|
||||
name: test-packer-ubuntu-xenial
|
||||
description: Test packer job on ubuntu-xenial
|
||||
parent: test-packer
|
||||
tags: auto-generated
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: ubuntu-xenial
|
||||
label: ubuntu-xenial
|
||||
|
||||
- project:
|
||||
check:
|
||||
jobs:
|
||||
- test-packer-centos-7
|
||||
- test-packer-centos-8
|
||||
- test-packer-debian-stretch
|
||||
- test-packer-fedora-30
|
||||
- test-packer-gentoo-17-0-systemd
|
||||
- test-packer-opensuse-15
|
||||
- test-packer-opensuse-tumbleweed-nv
|
||||
- test-packer-ubuntu-bionic
|
||||
- test-packer-ubuntu-bionic-plain-nv
|
||||
- test-packer-ubuntu-xenial
|
||||
gate:
|
||||
jobs:
|
||||
- test-packer-centos-7
|
||||
- test-packer-centos-8
|
||||
- test-packer-debian-stretch
|
||||
- test-packer-fedora-30
|
||||
- test-packer-gentoo-17-0-systemd
|
||||
- test-packer-opensuse-15
|
||||
- test-packer-ubuntu-bionic
|
||||
- test-packer-ubuntu-xenial
|
57
zuul.d/packer-jobs.yaml
Normal file
57
zuul.d/packer-jobs.yaml
Normal file
@ -0,0 +1,57 @@
|
||||
- job:
|
||||
name: packer
|
||||
description: |
|
||||
Base job for packaer operations
|
||||
|
||||
Responds to these variables:
|
||||
|
||||
.. zuul:jobvar:: packer_command
|
||||
:default: build
|
||||
|
||||
Command to pass to packer.
|
||||
|
||||
.. zuul:jobvar:: packer_variables
|
||||
|
||||
Dictionary with variables to pass to packer.
|
||||
|
||||
.. zuul:jobvar:: packer_extra_args
|
||||
:default: ""
|
||||
|
||||
String containing extra arguments to append to the packer command line.
|
||||
|
||||
.. zuul:jobvar:: packer_environemnt
|
||||
|
||||
Environment variables to set in packer command.
|
||||
|
||||
.. zuul:jobvar:: packer_template
|
||||
:default: packer.json
|
||||
|
||||
Packer template json file to use.
|
||||
|
||||
.. zuul:jobvar:: packer_install_dir
|
||||
:default: {{ ansible_user_dir }}/packer/
|
||||
|
||||
Path to install packer in.
|
||||
|
||||
.. zuul:jobvar:: packer_version
|
||||
:default: 1.5.5
|
||||
|
||||
The version of packer to use.
|
||||
|
||||
.. zuul:jobvar:: packer_os
|
||||
:default: {{ ansible_system | lower }}
|
||||
|
||||
OS to use when choosing packer version.
|
||||
|
||||
.. zuul:jobvar:: packer_arch
|
||||
:default: amd64 / 386
|
||||
|
||||
Architecture to use when choosing packer version
|
||||
|
||||
.. zuul:jobvar:: zuul_work_dir
|
||||
:default: {{ zuul.project.src_dir }}
|
||||
|
||||
Path to operate in.
|
||||
|
||||
pre-run: playbooks/packer/pre.yaml
|
||||
run: playbooks/packer/run.yaml
|
Loading…
Reference in New Issue
Block a user