# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.
---
# This playbook deploys a docker registry using a self-signed cert.

# Generate cert if needed. Not used currently.
- hosts: ansible
  tasks:
  - import_tasks: roles/registry/tasks/gencert.yml
    when: mode == "deploy" and registry.gencert == true

# Deploy registry
- hosts: registry
  roles:
  - registry

# publish cert on all hosts
- hosts: all:!ansible
  become: true
  tasks:
  - import_tasks: roles/registry/tasks/publish.yml
    when: mode == "deploy" and registry.gencert
