Remove image push logic from installer roles

I’m going to be reusing this code on the Tower side, and I’m trying to refactor some of the AWX specific bits out. There will probably be more to come, but this is a good start.
This commit is contained in:
Shane McDonald
2018-04-16 17:56:06 -04:00
parent 2b6fe7969f
commit 40d7751fbd
8 changed files with 74 additions and 77 deletions

View File

@@ -5,5 +5,6 @@
roles: roles:
- { role: check_vars } - { role: check_vars }
- { role: image_build, when: "dockerhub_base is not defined" } - { role: image_build, when: "dockerhub_base is not defined" }
- { role: image_push, when: "docker_registry is defined and dockerhub_base is not defined" }
- { role: kubernetes, when: "openshift_host is defined or kubernetes_context is defined" } - { role: kubernetes, when: "openshift_host is defined or kubernetes_context is defined" }
- { role: local_docker, when: "openshift_host is not defined and kubernetes_context is not defined" } - { role: local_docker, when: "openshift_host is not defined and kubernetes_context is not defined" }

View File

@@ -89,11 +89,11 @@
- name: Set awx_web image name - name: Set awx_web image name
set_fact: set_fact:
awx_web_image: "{{ awx_web_image|default('awx_web') }}" web_image: "{{ web_image|default('awx_web') }}"
- name: Set awx_task image name - name: Set awx_task image name
set_fact: set_fact:
awx_task_image: "{{ awx_task_image|default('awx_task') }}" task_image: "{{ task_image|default('awx_task') }}"
- name: Ensure directory exists - name: Ensure directory exists
file: file:
@@ -195,7 +195,7 @@
no_proxy: "{{ no_proxy | default('') }}" no_proxy: "{{ no_proxy | default('') }}"
path: "{{ docker_base_path }}" path: "{{ docker_base_path }}"
dockerfile: Dockerfile dockerfile: Dockerfile
name: "{{ awx_web_image }}" name: "{{ web_image }}"
tag: "{{ awx_version }}" tag: "{{ awx_version }}"
delegate_to: localhost delegate_to: localhost
@@ -207,11 +207,17 @@
no_proxy: "{{ no_proxy | default('') }}" no_proxy: "{{ no_proxy | default('') }}"
path: "{{ docker_base_path }}" path: "{{ docker_base_path }}"
dockerfile: Dockerfile.task dockerfile: Dockerfile.task
name: "{{ awx_task_image }}" name: "{{ task_image }}"
tag: "{{ awx_version }}" tag: "{{ awx_version }}"
pull: no pull: no
delegate_to: localhost delegate_to: localhost
- name: Tag task and web images as latest
command: "docker tag {{ item }}:{{ awx_version }} {{ item }}:latest"
with_items:
- "{{ task_image }}"
- "{{ web_image }}"
- name: Clean docker base directory - name: Clean docker base directory
file: file:
path: "{{ docker_base_path }}" path: "{{ docker_base_path }}"

View File

@@ -1,4 +1,4 @@
FROM {{ awx_web_image }}:{{ awx_version }} FROM {{ web_image }}:{{ awx_version }}
USER 0 USER 0
RUN sudo yum -y remove nginx RUN sudo yum -y remove nginx
USER 1000 USER 1000

View File

@@ -1,4 +1,13 @@
--- ---
- name: Authenticate with Docker registry if registry password given
docker_login:
registry: "{{ docker_registry }}"
username: "{{ docker_registry_username }}"
password: "{{ docker_registry_password }}"
reauthorize: yes
when: docker_registry is defined and docker_registry_password is defined
delegate_to: localhost
- name: Remove local images to ensure proper push behavior - name: Remove local images to ensure proper push behavior
# TODO: this code will not be necessary if and when docker_image can be configured to push if the image # TODO: this code will not be necessary if and when docker_image can be configured to push if the image
# Already exists locally # Already exists locally
@@ -6,13 +15,13 @@
block: block:
- name: Remove web image - name: Remove web image
docker_image: docker_image:
name: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ awx_web_image }}" name: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ web_image }}"
tag: "{{ awx_version }}" tag: "{{ awx_version }}"
state: absent state: absent
- name: Remove task image - name: Remove task image
docker_image: docker_image:
name: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ awx_task_image }}" name: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ task_image }}"
tag: "{{ awx_version }}" tag: "{{ awx_version }}"
state: absent state: absent
delegate_to: localhost delegate_to: localhost
@@ -22,22 +31,28 @@
block: block:
- name: Tag and push web image to registry - name: Tag and push web image to registry
docker_image: docker_image:
name: "{{ awx_web_image }}" name: "{{ web_image }}"
repository: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ awx_web_image }}" repository: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ web_image }}"
tag: "{{ awx_version }}" tag: "{{ item }}"
push: yes push: yes
with_items:
- "latest"
- "{{ awx_version }}"
- name: Tag and push task image to registry - name: Tag and push task image to registry
docker_image: docker_image:
name: "{{ awx_task_image }}" name: "{{ task_image }}"
repository: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ awx_task_image }}" repository: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ task_image }}"
tag: "{{ awx_version }}" tag: "{{ item }}"
push: yes push: yes
with_items:
- "latest"
- "{{ awx_version }}"
delegate_to: localhost delegate_to: localhost
- name: Set full image path for Registry - name: Set full image path for Registry
set_fact: set_fact:
awx_web_docker_actual_image: >- awx_web_docker_actual_image: >-
{{ docker_registry }}/{{ docker_registry_repository }}/{{ awx_web_image }}:{{ awx_version }} {{ docker_registry }}/{{ docker_registry_repository }}/{{ web_image }}:{{ awx_version }}
awx_task_docker_actual_image: >- awx_task_docker_actual_image: >-
{{ docker_registry }}/{{ docker_registry_repository }}/{{ awx_task_image }}:{{ awx_version }} {{ docker_registry }}/{{ docker_registry_repository }}/{{ task_image }}:{{ awx_version }}

View File

@@ -1,4 +1,7 @@
--- ---
dockerhub_web_image: "{{ dockerhub_base | default('ansible') }}/awx_web:{{ dockerhub_version | default('latest') }}"
dockerhub_task_image: "{{ dockerhub_base | default('ansible') }}/awx_task:{{ dockerhub_version | default('latest') }}"
web_mem_request: 1 web_mem_request: 1
web_cpu_request: 500 web_cpu_request: 500
@@ -11,11 +14,11 @@ rabbitmq_cpu_request: 500
memcached_mem_request: 1 memcached_mem_request: 1
memcached_cpu_request: 500 memcached_cpu_request: 500
rabbitmq_version: "3.7.4" kubernetes_rabbitmq_version: "3.7.4"
rabbitmq_image: "ansible/awx_rabbitmq:{{ rabbitmq_version }}" kubernetes_rabbitmq_image: "ansible/awx_rabbitmq"
memcached_version: "latest" kubernetes_memcached_version: "latest"
memcached_image: "memcached:{{ memcached_version }}" kubernetes_memcached_image: "memcached"
openshift_pg_emptydir: no openshift_pg_emptydir: no
openshift_pg_pvc_name: postgresql openshift_pg_pvc_name: postgresql

View File

@@ -23,34 +23,6 @@
ignore_errors: yes ignore_errors: yes
when: "pg_hostname is not defined or pg_hostname == ''" when: "pg_hostname is not defined or pg_hostname == ''"
- name: Manage AWX Container Images
include_role:
name: image_push
when: dockerhub_base is not defined
- name: Set image names
block:
- name: Enable image stream lookups for awx images
shell: "{{ openshift_oc_bin }} set image-lookup --all -n {{ kubernetes_namespace }}"
when: openshift_host is defined
- name: Set full web image path
set_fact:
web_kubernetes_image: "{{ web_image }}:{{ version }}"
when: web_kubernetes_image is not defined
- name: Set full task image path
set_fact:
task_kubernetes_image: "{{ task_image }}:{{ version }}"
when: task_kubernetes_image is not defined
when: dockerhub_base is not defined
- name: Set DockerHub Image Paths
set_fact:
web_kubernetes_image: "{{ dockerhub_base }}/awx_web:{{ dockerhub_version }}"
task_kubernetes_image: "{{ dockerhub_base }}/awx_task:{{ dockerhub_version }}"
when: dockerhub_base is defined
- name: Deploy PostgreSQL (OpenShift) - name: Deploy PostgreSQL (OpenShift)
block: block:
- name: Template PostgreSQL Deployment - name: Template PostgreSQL Deployment
@@ -113,6 +85,19 @@
dest: "{{ kubernetes_base_path }}/configmap.yml" dest: "{{ kubernetes_base_path }}/configmap.yml"
mode: '0600' mode: '0600'
- name: Set image names if using custom registry
block:
- name: Set task image name
set_fact:
kubernetes_task_image: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ task_image }}"
when: kubernetes_task_image is not defined
- name: Set web image name
set_fact:
kubernetes_web_image: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ web_image }}"
when: kubernetes_web_image is not defined
when: docker_registry is defined
- name: Template Kubernetes AWX Deployment - name: Template Kubernetes AWX Deployment
template: template:
src: deployment.yml.j2 src: deployment.yml.j2

View File

@@ -131,7 +131,7 @@ spec:
serviceAccountName: rabbitmq serviceAccountName: rabbitmq
containers: containers:
- name: {{ kubernetes_deployment_name }}-web - name: {{ kubernetes_deployment_name }}-web
image: {{ web_kubernetes_image }} image: {{ kubernetes_web_image | default(dockerhub_web_image) }}
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- containerPort: 8052 - containerPort: 8052
@@ -143,7 +143,7 @@ spec:
memory: "{{ web_mem_request }}Gi" memory: "{{ web_mem_request }}Gi"
cpu: "{{ web_cpu_request }}m" cpu: "{{ web_cpu_request }}m"
- name: {{ kubernetes_deployment_name }}-celery - name: {{ kubernetes_deployment_name }}-celery
image: {{ task_kubernetes_image }} image: {{ kubernetes_task_image | default(dockerhub_task_image) }}
imagePullPolicy: Always imagePullPolicy: Always
volumeMounts: volumeMounts:
- mountPath: /etc/tower - mountPath: /etc/tower
@@ -172,7 +172,7 @@ spec:
memory: "{{ task_mem_request }}Gi" memory: "{{ task_mem_request }}Gi"
cpu: "{{ task_cpu_request }}m" cpu: "{{ task_cpu_request }}m"
- name: {{ kubernetes_deployment_name }}-rabbit - name: {{ kubernetes_deployment_name }}-rabbit
image: {{ rabbitmq_image }} image: "{{ kubernetes_rabbitmq_image }}:{{ kubernetes_rabbitmq_version }}"
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- name: http - name: http
@@ -212,7 +212,7 @@ spec:
memory: "{{ rabbitmq_mem_request }}Gi" memory: "{{ rabbitmq_mem_request }}Gi"
cpu: "{{ rabbitmq_cpu_request }}m" cpu: "{{ rabbitmq_cpu_request }}m"
- name: {{ kubernetes_deployment_name }}-memcached - name: {{ kubernetes_deployment_name }}-memcached
image: {{ memcached_image }} image: "{{ kubernetes_memcached_image }}:{{ kubernetes_memcached_version }}"
resources: resources:
requests: requests:
memory: "{{ memcached_mem_request }}Gi" memory: "{{ memcached_mem_request }}Gi"

View File

@@ -3,29 +3,20 @@
block: block:
- name: Export Docker web image if it isnt local and there isnt a registry defined - name: Export Docker web image if it isnt local and there isnt a registry defined
docker_image: docker_image:
name: "{{ awx_web_image }}" name: "{{ web_image }}"
tag: "{{ awx_version }}" tag: "{{ awx_version }}"
archive_path: "{{ awx_local_base_config_path|default('/tmp') }}/{{ awx_web_image }}_{{ awx_version }}.tar" archive_path: "{{ awx_local_base_config_path|default('/tmp') }}/{{ web_image }}_{{ awx_version }}.tar"
when: inventory_hostname != "localhost" and docker_registry is not defined when: inventory_hostname != "localhost" and docker_registry is not defined
delegate_to: localhost delegate_to: localhost
- name: Export Docker task image if it isnt local and there isnt a registry defined - name: Export Docker task image if it isnt local and there isnt a registry defined
docker_image: docker_image:
name: "{{ awx_task_image }}" name: "{{ task_image }}"
tag: "{{ awx_version }}" tag: "{{ awx_version }}"
archive_path: "{{ awx_local_base_config_path|default('/tmp') }}/{{ awx_task_image }}_{{ awx_version }}.tar" archive_path: "{{ awx_local_base_config_path|default('/tmp') }}/{{ task_image }}_{{ awx_version }}.tar"
when: inventory_hostname != "localhost" and docker_registry is not defined when: inventory_hostname != "localhost" and docker_registry is not defined
delegate_to: localhost delegate_to: localhost
- name: Authenticate with Docker registry if registry password given
docker_login:
registry: "{{ docker_registry }}"
username: "{{ docker_registry_username }}"
password: "{{ docker_registry_password }}"
reauthorize: yes
when: docker_registry is defined and docker_registry_password is defined
delegate_to: localhost
- name: Set docker base path - name: Set docker base path
set_fact: set_fact:
docker_deploy_base_path: "{{ awx_base_path|default('/tmp') }}/docker_deploy" docker_deploy_base_path: "{{ awx_base_path|default('/tmp') }}/docker_deploy"
@@ -39,40 +30,36 @@
- name: Copy web image to docker execution - name: Copy web image to docker execution
copy: copy:
src: "{{ awx_local_base_config_path|default('/tmp') }}/{{ awx_web_image }}_{{ awx_version }}.tar" src: "{{ awx_local_base_config_path|default('/tmp') }}/{{ web_image }}_{{ awx_version }}.tar"
dest: "{{ docker_deploy_base_path }}/{{ awx_web_image }}_{{ awx_version }}.tar" dest: "{{ docker_deploy_base_path }}/{{ web_image }}_{{ awx_version }}.tar"
when: ansible_connection != "local" and docker_registry is not defined when: ansible_connection != "local" and docker_registry is not defined
- name: Copy task image to docker execution - name: Copy task image to docker execution
copy: copy:
src: "{{ awx_local_base_config_path|default('/tmp') }}/{{ awx_task_image }}_{{ awx_version }}.tar" src: "{{ awx_local_base_config_path|default('/tmp') }}/{{ task_image }}_{{ awx_version }}.tar"
dest: "{{ docker_deploy_base_path }}" dest: "{{ docker_deploy_base_path }}"
when: ansible_connection != "local" and docker_registry is not defined when: ansible_connection != "local" and docker_registry is not defined
- name: Load web image - name: Load web image
docker_image: docker_image:
name: "{{ awx_web_image }}" name: "{{ web_image }}"
tag: "{{ awx_version }}" tag: "{{ awx_version }}"
load_path: "{{ docker_deploy_base_path }}/{{ awx_web_image }}_{{ awx_version }}.tar" load_path: "{{ docker_deploy_base_path }}/{{ web_image }}_{{ awx_version }}.tar"
timeout: 300 timeout: 300
when: ansible_connection != "local" and docker_registry is not defined when: ansible_connection != "local" and docker_registry is not defined
- name: Load task image - name: Load task image
docker_image: docker_image:
name: "{{ awx_task_image }}" name: "{{ task_image }}"
tag: "{{ awx_version }}" tag: "{{ awx_version }}"
load_path: "{{ docker_deploy_base_path }}/{{ awx_task_image }}_{{ awx_version }}.tar" load_path: "{{ docker_deploy_base_path }}/{{ task_image }}_{{ awx_version }}.tar"
timeout: 300 timeout: 300
when: ansible_connection != "local" and docker_registry is not defined when: ansible_connection != "local" and docker_registry is not defined
- include_role:
name: image_push
when: docker_registry is defined and dockerhub_base is not defined
- name: Set full image path for local install - name: Set full image path for local install
set_fact: set_fact:
awx_web_docker_actual_image: "{{ awx_web_image }}:{{ awx_version }}" awx_web_docker_actual_image: "{{ web_image }}:{{ awx_version }}"
awx_task_docker_actual_image: "{{ awx_task_image }}:{{ awx_version }}" awx_task_docker_actual_image: "{{ task_image }}:{{ awx_version }}"
when: docker_registry is not defined when: docker_registry is not defined
when: dockerhub_base is not defined when: dockerhub_base is not defined