This playbook deploys Genesis in Docker using Ansible. Genesis is a BOSH deployment toolkit, and containerized setup provides isolated environment for BOSH operations.
---
- name: Deploy Genesis in Docker
hosts: genesis_docker
become: true
vars:
genesis_workspace: /opt/genesis
genesis_version: "3.0.14"
tasks:
- name: Ensure Docker is installed
package:
name: docker.io
state: present
- name: Enable and start Docker service
systemd:
name: docker
state: started
enabled: true
- name: Create Genesis workspace directory
file:
path: "{{ genesis_workspace }}"
state: directory
mode: '0755'
- name: Create Docker Compose file for Genesis
copy:
dest: "{{ genesis_workspace }}/docker-compose.yml"
content: |
version: '3.8'
services:
genesis:
image: ubuntu:22.04
container_name: genesis-cli
working_dir: /genesis
volumes:
- ./environments:/genesis/environments
- ./secrets:/genesis/secrets:ro
environment:
- GENESIS_VAULT_ADDR={{ vault_addr | default('http://vault:8200') }}
entrypoint: ["bash", "-c", "apt-get update && apt-get install -y curl bash && curl -sL https://github.com/genesis-community/genesis/releases/download/v{{ genesis_version }}/genesis-linux-amd64 -o /usr/local/bin/genesis && chmod +x /usr/local/bin/genesis && genesis --version"]
networks:
- genesis-network
restart: "no"
networks:
genesis-network:
driver: bridge
mode: '0644'
- name: Create environment directories
file:
path: "{{ genesis_workspace }}/{{ item }}"
state: directory
mode: '0755'
loop:
- environments
- secrets
- name: Deploy Genesis container
community.docker.docker_compose_v2:
project_src: "{{ genesis_workspace }}"
state: present
- name: Verify Genesis installation
command: docker run --rm ubuntu:22.04 bash -c "apt-get update && apt-get install -y curl && curl -sL https://github.com/genesis-community/genesis/releases/download/v{{ genesis_version }}/genesis-linux-amd64 -o /usr/local/bin/genesis && chmod +x /usr/local/bin/genesis && genesis --version"
register: genesis_version_output
changed_when: false
- name: Display Genesis version
debug:
msg: "Genesis version: {{ genesis_version_output.stdout_lines | last }}"
ansible-playbook -i inventory.ini genesis-docker.yml --extra-vars "vault_addr=https://vault.example.com:8200"