Browse Source

Merge "Add an install playbook"

changes/39/699939/3
Zuul Gerrit Code Review 2 months ago
parent
commit
5016ec8c6c
2 changed files with 180 additions and 0 deletions
  1. +156
    -0
      playbookconfig/src/playbooks/install.yml
  2. +24
    -0
      playbookconfig/src/playbooks/roles/install/templates/rvmc.yaml.j2

+ 156
- 0
playbookconfig/src/playbooks/install.yml View File

@@ -0,0 +1,156 @@
---
#
# Copyright (c) 2020 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

- name: Install Playbook
hosts: all
gather_facts: false
become: no
tasks:
- set_fact:
ansible_port: "{{ ansible_port | default(22) }}"
rvmc_resource_file: "{{ rvmc_config_dir }}/rvmc.yaml"
rvmc_image: "{{ rvmc_image | default('docker.io/starlingx/rvmc') }}"
rvmc_config_file: "{{ rvmc_config_dir }}/rvmc-config.yaml"
pod_schedule_time: "{{ pod_schedule_time | default(60) }}"
job_wait_time: "{{ job_wait_time | default(900) }}"
boot_wait_time: " {{ boot_wait_time | default(600) }}"
wait_for_timeout: " {{ wait_for_timeout | default(3600) }}"

# The following block is executed locally
- block:
- name: Clean up the Redfish Virtual Media Controller from previous run if it has not been cleaned automatically
command: "kubectl --kubeconfig=/etc/kubernetes/admin.conf delete job {{ rvmc_name }}"
register: deleted_job
failed_when: false
no_log: true

- name: Wait for 60 seconds to ensure Redfish Virtual Media Controller pods are terminated
wait_for:
timeout: 60
when: deleted_job.rc == 0

- name: Create Redfish Virtual Media Controller resource file
template:
src: "roles/install/templates/rvmc.yaml.j2"
dest: "{{ rvmc_resource_file }}"

- name: Activate Redfish Virtual Media Controller
command: "kubectl --kubeconfig=/etc/kubernetes/admin.conf apply -f {{ rvmc_resource_file }}"

- name: Get the pod name that created by Redfish Virtual Media Controller batch job
command: >-
kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -l job-name={{ rvmc_name }}
--output=jsonpath='{.items[*].metadata.name}'
failed_when: pod_name.stdout == ""
register: pod_name

- block:
- set_fact:
rvmc_pod_name: "{{ pod_name.stdout_lines[0] }}"

- name: Wait for {{ pod_schedule_time }} seconds for {{ rvmc_pod_name }} to be ready
command: >-
kubectl --kubeconfig=/etc/kubernetes/admin.conf wait
--for=condition=Ready pod/{{ rvmc_pod_name }}
--timeout={{ pod_schedule_time }}s
failed_when: false
register: wait_for_pod

- block:
- name: Save Redfish Virtual Media Controller logs if {{ rvmc_pod_name }} is not ready
command: "kubectl --kubeconfig=/etc/kubernetes/admin.conf logs {{ rvmc_pod_name }}"
register: pod_logs

- debug:
msg: "{{ pod_logs.stdout }}"

- name: Fail if {{ rvmc_pod_name }} is not ready
fail: msg="Redfish Virtual Media Controller failed to start the install"

when: wait_for_pod.rc != 0

# The rvmc takes few minutes to open the client connection.
# It takes longer when it fails, and the running pod goes to error state
- name: Wait for 200 seconds to ensure Redfish Client Connection to BMC is established
wait_for:
timeout: 200

- name: Check if the Redfish Virtual Media Controller is in an error state
command: >-
kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -l job-name={{ rvmc_name }}
--field-selector=status.phase!=Running,status.phase!=Succeeded
register: pod_has_error

- block:
- name: Save Redfish Virtual Media Controller logs if it is in an error state
command: "kubectl --kubeconfig=/etc/kubernetes/admin.conf logs {{ rvmc_pod_name }}"
register: pod_error_logs

- debug:
msg: "{{ pod_error_logs.stdout }}"

- name: Fail if Redfish Virtual Media Controller enters an error state
fail: msg="Redfish Virtual Media Controller failed to install the host"

when: pod_has_error.stdout != ""

- name: Wait for {{ job_wait_time }} seconds for Redfish Virtual Media Controller to complete
command: >-
kubectl --kubeconfig=/etc/kubernetes/admin.conf wait
--for=condition=complete job/{{ rvmc_name }} --timeout={{ job_wait_time }}s
failed_when: false
register: wait_for_rvmc

- name: Store Redfish Virtual Media Controller log after the job is completed
command: "kubectl --kubeconfig=/etc/kubernetes/admin.conf logs job/{{ rvmc_name }}"
register: rvmc_logs

- debug:
msg: "{{ rvmc_logs.stdout }}"

- block:
- debug:
msg: "{{ wait_for_rvmc.stdout }}"

- name: Fail if waiting for Redfish Virtual Media Controller returns an error
fail: msg="Failed to install the host via Redfish Virtual Media Controller."

when: wait_for_rvmc.rc != 0

delegate_to: localhost

- debug:
msg: "Waiting for the system to install..."

- name: Waiting {{ wait_for_timeout }} seconds for port {{ ansible_port }} become open on {{ ansible_host }}
local_action:
module: wait_for
port={{ ansible_port }}
host={{ ansible_host }}
delay={{ boot_wait_time }}
timeout={{ wait_for_timeout }}
state=started

- set_fact:
override_files_dir: "{{ lookup('env', 'HOME') }}"
password_change_responses:
yes/no: 'yes'
sysadmin*: 'sysadmin'
\(current\) UNIX password: 'sysadmin'
(?i)New password: "{{ ansible_ssh_pass }}"
(?i)Retype new password: "{{ ansible_ssh_pass }}"

- import_role:
name: common/prepare-env

- name: Check if the system is ready
command: "systemctl is-active multi-user.target"
register: check_active
retries: 30
delay: 40
until: check_active.rc == 0
no_log: true

+ 24
- 0
playbookconfig/src/playbooks/roles/install/templates/rvmc.yaml.j2 View File

@@ -0,0 +1,24 @@
---
apiVersion: batch/v1
kind: Job
metadata:
name: {{ rvmc_name }}
spec:
ttlSecondsAfterFinished: 600
activeDeadlineSeconds: 600
backoffLimit: 1
template:
spec:
nodeSelector:
kubernetes.io/hostname: {{ host_name }}
containers:
- name: rvmc
image: {{ rvmc_image }}
volumeMounts:
- mountPath: /etc/rvmc.yaml
name: rvmc-config
volumes:
- name: rvmc-config
hostPath:
path: {{ rvmc_config_file }}
restartPolicy: Never

Loading…
Cancel
Save