Use packer to create a base preconfigured base image

This commit is contained in:
Paul-Henri Froidmont 2018-10-18 22:45:01 +02:00
parent 3090cc6818
commit 3731d10987
12 changed files with 153 additions and 68 deletions

56
packer/common.yml Normal file
View file

@ -0,0 +1,56 @@
---
- hosts: localhost
tasks:
- name: Install tinc and ping
apt:
name: [ 'tinc', 'iputils-ping' ]
state: latest
- name: Adding Kubernetes official gpg key
apt_key:
url: "{{ kubernetes_apt_key }}"
state: present
- name: Adding Kubernetes repository
apt_repository:
repo: "deb http://apt.kubernetes.io/ kubernetes-{{ kubernetes_release }} {{ kubernetes_apt_channel }}"
state: present
filename: 'kubernetes'
- name: Installing kubernetes core components (kubectl, kubelet ...)
apt:
name: ['kubelet={{kubernetes_version_apt}}', 'kubeadm={{kubernetes_version_apt}}', 'kubectl={{kubernetes_version_apt}}']
register: result
retries: 3
until: result is success
- name: Get the kernel revision
shell: "uname -r"
register: kernel
changed_when: False
check_mode: False
- name: Try install linux-image
apt:
state: present
name: "{{ 'linux-image-' + kernel.stdout }}"
register: result
failed_when: False
- name: modprobe
modprobe:
name: "{{ item }}"
state: present
with_items:
- ip_vs
- nf_conntrack_ipv4
- name: /etc/modules
lineinfile:
path: /etc/modules
line: "{{ item }}"
with_items:
- ip_vs
- nf_conntrack_ipv4
roles:
- role: docker

58
packer/packer.json Normal file
View file

@ -0,0 +1,58 @@
{
"variables": {
"api_access_key": "{{ env `SCALEWAY_ORGANIZATION` }}",
"api_token": "{{ env `SCALEWAY_TOKEN` }}",
"vault_pass_file": ""
},
"builders": [
{
"type": "scaleway",
"api_access_key": "{{ user `api_access_key` }}",
"api_token": "{{ user `api_token` }}",
"server_name": "k8s-template",
"image_name": "ubuntu-bionic-k8s",
"snapshot_name": "ubuntu-bionic-k8s-snapshot",
"image": "d4067cdc-dc9d-4810-8a26-0dae51d7df42",
"region": "par1",
"commercial_type": "START1-S",
"ssh_username": "root"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"sleep 30",
"apt -y update",
"DEBIAN_FRONTEND=noninteractive apt-get -y upgrade",
"apt -y install software-properties-common",
"apt-add-repository ppa:ansible/ansible",
"apt -y update",
"apt -y install ansible"
]
},
{
"type": "file",
"source": "{{ user `vault_pass_file` }}",
"destination": "/tmp/vault-pass"
},
{
"type": "ansible-local",
"role_paths": "../roles/docker",
"group_vars": "../group_vars",
"clean_staging_directory": true,
"playbook_file": "common.yml",
"extra_arguments": "--vault-password-file=/tmp/vault-pass"
},
{
"type": "shell",
"inline": [
"rm -f /tmp/vault-pass",
"apt -y remove --purge ansible",
"apt-add-repository --remove ppa:ansible/ansible",
"apt autoremove -y",
"apt update"
]
}
]
}