Просмотр исходного кода

Merge pull request #739 from Lakshmi-Patneedi/devel

Issue #738: AWX Version Upgrade
John Lockman 3 лет назад
Родитель
Сommit
3ebf9a3a0a

+ 11 - 12
control_plane/roles/webui_awx/files/awx.yml

@@ -5,33 +5,32 @@ metadata:
   name: awx
   namespace: awx
 spec:
+  service_type: nodeport
   deployment_type: awx
 
   #tower_hostname:
   #tower_secret_key_secret:
-
   #tower_extra_volumes:
-
   #tower_admin_user: admin
   #tower_admin_email:
   #tower_admin_password_secret:
 
-  tower_ingress_type: Ingress
+  ingress_type: Ingress
   #tower_ingress_type:
   #tower_loadbalancer_protocol:
   #tower_loadbalancer_port:
-
   #tower_image_pull_secret:
 
-  tower_postgres_storage_class: nfs-client
+  postgres_storage_class: nfs-client
+
+  projects_persistence: true
+  projects_use_existing_claim: "_Yes_"
 
-  tower_projects_persistence: true
-  tower_projects_use_existing_claim: "_Yes_"
-  tower_projects_existing_claim: awx-pv-claim
-  tower_projects_storage_class: manual
-  tower_projects_storage_size: 10Gi
-  tower_projects_storage_access_mode: RWO
+  projects_storage_class: manual
+  projects_storage_size: 10Gi
+  projects_storage_access_mode: RWO
+  projects_existing_claim: awx-pv-claim
 
-  tower_ee_images:
+  ee_images:
     - name: custom-awx-ee
       image: localhost/custom-awx-ee

+ 2 - 2
control_plane/roles/webui_awx/files/awx_ee.yml

@@ -1,4 +1,4 @@
-FROM quay.io/ansible/awx-ee:0.2.0
+FROM quay.io/ansible/awx-ee:0.6.0
 
 USER root
 
@@ -15,6 +15,6 @@ RUN ansible-galaxy collection install -r /tmp/requirements.yml --collections-pat
 
 # add certificates
 RUN update-ca-trust force-enable
-RUN chmod -R 0777 /usr/share/ansible/collections 
+RUN chmod -R 0777 /usr/share/ansible/collections
 
 USER 1000

+ 0 - 531
control_plane/roles/webui_awx/files/awx_operator.yml

@@ -1,531 +0,0 @@
-# This file is generated by Ansible. Changes will be lost.
-# Update templates under ansible/templates/
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: awxs.awx.ansible.com
-  namespace: awx
-spec:
-  group: awx.ansible.com
-  names:
-    kind: AWX
-    listKind: AWXList
-    plural: awxs
-    singular: awx
-  scope: Namespaced
-  versions:
-    - name: v1beta1
-      served: true
-      storage: true
-      subresources:
-        status: {}
-      schema:
-        openAPIV3Schema:
-          description: Schema validation for the AWX CRD
-          properties:
-            spec:
-              properties:
-                deployment_type:
-                  description: Name of the deployment type
-                  type: string
-                  default: awx
-                kind:
-                  description: Kind of the deployment type
-                  type: string
-                  default: AWX
-                api_version:
-                  description: apiVersion of the deployment type
-                  type: string
-                  default: awx.ansible.com/v1beta1
-                tower_task_privileged:
-                  description: If a privileged security context should be enabled
-                  type: boolean
-                  default: false
-                tower_admin_user:
-                  description: Username to use for the admin account
-                  type: string
-                  default: admin
-                tower_hostname:
-                  description: The hostname of the instance
-                  type: string
-                tower_admin_email:
-                  description: The admin user email
-                  type: string
-                tower_admin_password_secret:
-                  description: Secret where the admin password can be found
-                  type: string
-                tower_postgres_configuration_secret:
-                  description: Secret where the database configuration can be found
-                  type: string
-                tower_old_postgres_configuration_secret:
-                  description: Secret where the old database configuration can be found for data migration
-                  type: string
-                tower_secret_key_secret:
-                  description: Secret where the secret key can be found
-                  type: string
-                tower_broadcast_websocket_secret:
-                  description: Secret where the broadcast websocket secret can be found
-                  type: string
-                tower_extra_volumes:
-                  description: Specify extra volumes to add to the application pod
-                  type: string
-                tower_ingress_type:
-                  description: The ingress type to use to reach the deployed instance
-                  type: string
-                  enum:
-                    - none
-                    - Ingress
-                    - ingress
-                    - Route
-                    - route
-                    - LoadBalancer
-                    - loadbalancer
-                    - NodePort
-                    - nodeport
-                tower_ingress_annotations:
-                  description: Annotations to add to the ingress
-                  type: string
-                tower_ingress_tls_secret:
-                  description: Secret where the ingress TLS secret can be found
-                  type: string
-                tower_loadbalancer_annotations:
-                  description: Annotations to add to the loadbalancer
-                  type: string
-                tower_loadbalancer_protocol:
-                  description: Protocol to use for the loadbalancer
-                  type: string
-                  default: http
-                  enum:
-                    - http
-                    - https
-                tower_loadbalancer_port:
-                  description: Port to use for the loadbalancer
-                  type: integer
-                  default: 80
-                tower_route_host:
-                  description: The DNS to use to points to the instance
-                  type: string
-                tower_route_tls_termination_mechanism:
-                  description: The secure TLS termination mechanism to use
-                  type: string
-                  default: Edge
-                  enum:
-                    - Edge
-                    - edge
-                    - Passthrough
-                    - passthrough
-                tower_route_tls_secret:
-                  description: Secret where the TLS related credentials are stored
-                  type: string
-                tower_node_selector:
-                  description: nodeSelector for the AWX pods
-                  type: string
-                tower_tolerations:
-                  description: node tolerations for the AWX pods
-                  type: string
-                tower_image:
-                  description: Registry path to the application container to use
-                  type: string
-                tower_image_version:
-                  description: Application container image version to use
-                  type: string
-                tower_ee_images:
-                  description: Registry path to the Execution Environment container to use
-                  type: array
-                  items:
-                    type: object
-                    properties:
-                      name:
-                        type: string
-                      image:
-                        type: string
-                tower_image_pull_policy:
-                  description: The image pull policy
-                  type: string
-                  default: IfNotPresent
-                  enum:
-                    - Always
-                    - always
-                    - Never
-                    - never
-                    - IfNotPresent
-                    - ifnotpresent
-                tower_image_pull_secret:
-                  description: The image pull secret
-                  type: string
-                tower_task_resource_requirements:
-                  description: Resource requirements for the task container
-                  properties:
-                    requests:
-                      properties:
-                        cpu:
-                          type: string
-                        memory:
-                          type: string
-                        storage:
-                          type: string
-                      type: object
-                    limits:
-                      properties:
-                        cpu:
-                          type: string
-                        memory:
-                          type: string
-                        storage:
-                          type: string
-                      type: object
-                  type: object
-                tower_web_resource_requirements:
-                  description: Resource requirements for the web container
-                  properties:
-                    requests:
-                      properties:
-                        cpu:
-                          type: string
-                        memory:
-                          type: string
-                        storage:
-                          type: string
-                      type: object
-                    limits:
-                      properties:
-                        cpu:
-                          type: string
-                        memory:
-                          type: string
-                        storage:
-                          type: string
-                      type: object
-                  type: object
-                tower_replicas:
-                  description: Number of instance replicas
-                  type: integer
-                  default: 1
-                  format: int32
-                tower_garbage_collect_secrets:
-                  description: Whether or not to remove secrets upon instance removal
-                  default: false
-                  type: boolean
-                tower_create_preload_data:
-                  description: Whether or not to preload data upon Tower instance creation
-                  default: true
-                  type: boolean
-                tower_task_args:
-                  type: array
-                  items:
-                    type: string
-                tower_task_command:
-                  type: array
-                  items:
-                    type: string
-                tower_web_args:
-                  type: array
-                  items:
-                    type: string
-                tower_web_command:
-                  type: array
-                  items:
-                    type: string
-                tower_task_extra_env:
-                  type: string
-                tower_web_extra_env:
-                  type: string
-                tower_ee_extra_volume_mounts:
-                  description: Specify volume mounts to be added to Execution container
-                  type: string
-                tower_task_extra_volume_mounts:
-                  description: Specify volume mounts to be added to Task container
-                  type: string
-                tower_web_extra_volume_mounts:
-                  description: Specify volume mounts to be added to the Web container
-                  type: string
-                tower_redis_image:
-                  description: Registry path to the redis container to use
-                  type: string
-                tower_redis_image_version:
-                  description: Redis container image version to use
-                  type: string
-                tower_postgres_image:
-                  description: Registry path to the PostgreSQL container to use
-                  type: string
-                tower_postgres_image_version:
-                  description: PostgreSQL container image version to use
-                  type: string
-                tower_postgres_selector:
-                  description: nodeSelector for the Postgres pods
-                  type: string
-                tower_postgres_tolerations:
-                  description: node tolerations for the Postgres pods
-                  type: string
-                tower_postgres_storage_requirements:
-                  description: Storage requirements for the PostgreSQL container
-                  properties:
-                    requests:
-                      properties:
-                        storage:
-                          type: string
-                      type: object
-                    limits:
-                      properties:
-                        storage:
-                          type: string
-                      type: object
-                  type: object
-                tower_postgres_resource_requirements:
-                  description: Resource requirements for the PostgreSQL container
-                  properties:
-                    requests:
-                      properties:
-                        cpu:
-                          type: string
-                        memory:
-                          type: string
-                      type: object
-                    limits:
-                      properties:
-                        cpu:
-                          type: string
-                        memory:
-                          type: string
-                      type: object
-                  type: object
-                tower_postgres_storage_class:
-                  description: Storage class to use for the PostgreSQL PVC
-                  type: string
-                tower_postgres_data_path:
-                  description: Path where the PostgreSQL data are located
-                  type: string
-                ca_trust_bundle:
-                  description: Path where the trusted CA bundle is available
-                  type: string
-                development_mode:
-                  description: If the deployment should be done in development mode
-                  type: boolean
-                ldap_cacert_secret:
-                  description: Secret where can be found the LDAP trusted Certificate Authority Bundle
-                  type: string
-                tower_projects_persistence:
-                  description: Whether or not the /var/lib/projects directory will be persistent
-                  default: false
-                  type: boolean
-                tower_projects_use_existing_claim:
-                  description: Using existing PersistentVolumeClaim
-                  type: string
-                  enum:
-                    - _Yes_
-                    - _No_
-                tower_projects_existing_claim:
-                  description: PersistentVolumeClaim to mount /var/lib/projects directory
-                  type: string
-                tower_projects_storage_class:
-                  description: Storage class for the /var/lib/projects PersistentVolumeClaim
-                  type: string
-                tower_projects_storage_size:
-                  description: Size for the /var/lib/projects PersistentVolumeClaim
-                  default: 8Gi
-                  type: string
-                tower_projects_storage_access_mode:
-                  description: AccessMode for the /var/lib/projects PersistentVolumeClaim
-                  default: ReadWriteMany
-                  type: string
-                extra_settings:
-                  description: Extra settings to specify for the API
-                  items:
-                    properties:
-                      setting:
-                        type: string
-                      value:
-                        type: string
-                    type: object
-                  type: array
-              type: object
-            status:
-              properties:
-                towerURL:
-                  description: URL to access the deployed instance
-                  type: string
-                towerAdminUser:
-                  description: Admin user of the deployed instance
-                  type: string
-                towerAdminPasswordSecret:
-                  description: Admin password of the deployed instance
-                  type: string
-                towerMigratedFromSecret:
-                  description: The secret used for migrating an old Tower.
-                  type: string
-                towerVersion:
-                  description: Version of the deployed instance
-                  type: string
-                towerImage:
-                  description: URL of the image used for the deployed instance
-                  type: string
-                conditions:
-                  description: The resulting conditions when a Service Telemetry is instantiated
-                  items:
-                    properties:
-                      status:
-                        type: string
-                      type:
-                        type: string
-                      reason:
-                        type: string
-                      lastTransitionTime:
-                        type: string
-                    type: object
-                  type: array
-              type: object
-          type: object
-
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  creationTimestamp: null
-  name: awx-operator
-  namespace: awx
-rules:
-  - apiGroups:
-      - route.openshift.io
-    resources:
-      - routes
-      - routes/custom-host
-    verbs:
-      - '*'
-  - apiGroups:
-      - ""
-      - "rbac.authorization.k8s.io"
-    resources:
-      - pods
-      - services
-      - services/finalizers
-      - serviceaccounts
-      - endpoints
-      - persistentvolumeclaims
-      - events
-      - configmaps
-      - secrets
-      - roles
-      - rolebindings
-    verbs:
-      - '*'
-  - apiGroups:
-      - apps
-      - extensions
-    resources:
-      - deployments
-      - daemonsets
-      - replicasets
-      - statefulsets
-      - ingresses
-    verbs:
-      - '*'
-  - apiGroups:
-      - monitoring.coreos.com
-    resources:
-      - servicemonitors
-    verbs:
-      - get
-      - create
-  - apiGroups:
-      - apps
-    resourceNames:
-      - awx-operator
-    resources:
-      - deployments/finalizers
-    verbs:
-      - update
-  - apiGroups:
-      - apps
-    resources:
-      - deployments/scale
-      - statefulsets/scale
-    verbs:
-      - patch
-  - apiGroups:
-      - ""
-    resources:
-      - pods/exec
-    verbs:
-      - create
-      - get
-  - apiGroups:
-      - apps
-    resources:
-      - replicasets
-    verbs:
-      - get
-  - apiGroups:
-      - awx.ansible.com
-    resources:
-      - '*'
-    verbs:
-      - '*'
-
----
-kind: ClusterRoleBinding
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: awx-operator
-  namespace: awx
-subjects:
-  - kind: ServiceAccount
-    name: awx-operator
-    namespace: awx
-roleRef:
-  kind: ClusterRole
-  name: awx-operator
-  apiGroup: rbac.authorization.k8s.io
-
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: awx-operator
-  namespace: awx
-
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: awx-operator
-  namespace: awx
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      name: awx-operator
-  template:
-    metadata:
-      labels:
-        name: awx-operator
-    spec:
-      serviceAccountName: awx-operator
-      containers:
-        - name: awx-operator
-          image: "quay.io/ansible/awx-operator:0.9.0"
-          imagePullPolicy: "Always"
-          volumeMounts:
-            - mountPath: /tmp/ansible-operator/runner
-              name: runner
-          env:
-            # Watch all namespaces (cluster-scoped).
-            - name: WATCH_NAMESPACE
-              value: ""
-            - name: POD_NAME
-              valueFrom:
-                fieldRef:
-                  fieldPath: metadata.name
-            - name: OPERATOR_NAME
-              value: awx-operator
-            - name: ANSIBLE_GATHERING
-              value: explicit
-          livenessProbe:
-            httpGet:
-              path: /healthz
-              port: 6789
-            initialDelaySeconds: 15
-            periodSeconds: 20
-      volumes:
-        - name: runner
-          emptyDir: {}

+ 9 - 0
control_plane/roles/webui_awx/tasks/awx_configuration.yml

@@ -64,6 +64,10 @@
     description: "Name of organization using this product"
     state: present
     tower_config_file: "{{ tower_config_file }}"
+  register: add_organization
+  until: not add_organization.failed
+  retries: "{{ max_retries }}"
+  delay: "{{ max_delay }}"
 
 - name: Create awx inventories
   awx.awx.tower_inventory:
@@ -94,6 +98,11 @@
     default_environment: custom-awx-ee
     state: present
     tower_config_file: "{{ tower_config_file }}"
+    wait: yes
+  register: add_project
+  until: not add_project.failed
+  retries: "{{ max_retries }}"
+  delay: "{{ max_delay }}"
 
 - name: Add awx credentials
   awx.awx.tower_credential:

+ 6 - 1
control_plane/roles/webui_awx/tasks/configure_settings.yml

@@ -18,7 +18,7 @@
   command: "kubectl get svc -n {{ awx_namespace }}"
   changed_when: false
   register: awx_services
-  
+
 - name: Expose the service for awx deployment on 8052 port
   command: "kubectl expose deployment awx --type=NodePort --name={{ awx_service_name }} --port={{ awx_port }} -n {{ awx_namespace }}"
   changed_when: false
@@ -33,6 +33,7 @@
   shell: >
     set -o pipefail && \
     kubectl get secret awx-admin-password -n {{ awx_namespace }} -o jsonpath='{.data.password}' | base64 --decode
+  no_log: true
   register: awx_admin_password
   changed_when: false
 
@@ -114,6 +115,10 @@
     name: firewalld
     state: reloaded
 
+- name: Waiting for AWX UI
+  wait_for:
+    timeout: "{{ awx_ui_wait_time }}"
+
 - name: Waiting for the AWX UI to be up
   uri:
     url: "http://{{ awx_cluster_ip.stdout }}:{{ awx_port }}"

+ 24 - 6
control_plane/roles/webui_awx/tasks/install_awx.yml

@@ -20,21 +20,38 @@
   changed_when: false
   register: namespaces
 
+- name: Creating directory for deploying awx-operator
+  file:
+    path: "{{ awx_operator_folder }}"
+    state: directory
+    mode: "{{ file_perm }}"
+
+- name: Cloning awx-operator from github
+  git:
+    repo: "{{ awx_operator_link }}"
+    dest: "{{ awx_operator_folder }}"
+    version: "{{ awx_tag }}"
+
 - name: Create namespace
   command: "kubectl create namespace {{ awx_namespace }}"
   changed_when: true
   when: "'awx' not in namespaces.stdout"
 
+- name: Setting the current namespace for kubectl
+  command: "kubectl config set-context --current --namespace={{ awx_namespace }}"
+  changed_when: false
+
+- name: Deploying awx-operator
+  command: make deploy
+  changed_when: false
+  args:
+    chdir: "{{ awx_operator_folder }}"
+
 - name: Get K8s pods
   command: "kubectl get pods -n {{ awx_namespace }}"
   changed_when: false
   register: k8s_pods
 
-- name: Deploy awx-operator
-  command: "kubectl apply -f {{ awx_operator_yml_file_path }}"
-  changed_when: true
-  when: '"awx-operator" not in k8s_pods.stdout'
-
 - name: Get K8s persistent volumes
   command: "kubectl get pv -n {{ awx_namespace }}"
   changed_when: false
@@ -66,9 +83,10 @@
   command: "buildah bud -t custom-awx-ee {{ awx_ee_docker_file }}"
   changed_when: false
   when: "'custom-awx-ee' not in docker_images.stdout"
+  retries: "{{ min_retries }}"
 
 - name: Waiting for awx-operator deployment to be up and running
-  command: kubectl wait --for=condition=available deployment awx-operator -n {{ awx_namespace }} --timeout=600s
+  command: kubectl wait --for=condition=available deployment awx-operator-controller-manager -n {{ awx_namespace }} --timeout=600s
   changed_when: false
 
 - name: Deploy awx

+ 6 - 3
control_plane/roles/webui_awx/vars/main.yml

@@ -16,17 +16,19 @@
 
 # Usage: install_awx.yml
 awx_namespace: awx
+awx_operator_folder: "/root/awx-operator"
 awx_pv_yml_file_path: "{{ role_path }}/files/awx_projects_pv.yml"
 awx_postgres_pv_file_path: "{{ role_path }}/files/awx_postgres_pv.yml"
-awx_operator_yml_file_path: "{{ role_path }}/files/awx_operator.yml"
 awx_ee_docker_file: "{{ role_path }}/files/awx_ee.yml"
 awx_yml_file_path: "{{ role_path }}/files/awx.yml"
 postgres_storage_class: nfs-client
 projects_existing_claim: awx-pv-claim
-awx_version: 19.1.0
+awx_version: 19.4.0
+awx_tag: 0.14.0
 file_perm: '0644'
 awx_wait_time: 90
 deployment_failure_msg: "Deployment failed due to docker pull rate limit"
+awx_operator_link: "https://github.com/ansible/awx-operator.git"
 
 # Usage: configure_settings.yml
 awx_port: 8052
@@ -45,8 +47,9 @@ awx_ui_msg: "AWX Upgrading"
 return_status: 200
 max_retries: 20
 max_delay: 15
+awx_ui_wait_time: 30
 
-# Usage: check_prerequisites_awx.yml
+# Usage: check_prerequisites.yml
 min_retries: 2
 
 # Usage: awx_configuration.yml