Skip to content
48 changes: 32 additions & 16 deletions roles/ocp4_workload_devspaces/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,26 +1,42 @@
---
ocp4_workload_devspaces_catalogsource_setup: true
ocp4_workload_devspaces_channel: stable
ocp4_workload_devspaces_startingcsv: ""

ocp4_workload_devspaces_catalogsource_setup: false
ocp4_workload_devspaces_catalogsource_name: devspaces-catalogsource
ocp4_workload_devspaces_catalogsource_image: ""
ocp4_workload_devspaces_catalogsource_tag: ""
ocp4_workload_devspaces_namespace: openshift-devspaces

ocp4_workload_devspaces_channel: stable
ocp4_workload_devspaces_startingcsv: ""
ocp4_workload_devspaces_setup_devworkspaces: false
ocp4_workload_devspaces_devworkspace_devfile: >-
http://devspaces-dashboard.openshift-devspaces.svc.cluster.local:8080/dashboard/api/editors/devfile?che-editor=che-incubator/che-code/latest

# Either have one user specified with ocp4_workload_devspaces_username
ocp4_workload_devspaces_username: user1
# Or have a number of users starting with ocp4_workload_devspaces_user_base
# ocp4_workload_devspaces_user_base: user
# ocp4_workload_devspaces_user_count: 2

ocp4_workload_devspaces_devworkspace_project: project
ocp4_workload_devspaces_devworkspace_name: workspace
# Actual namespace will be either ocp4_workload_devspaces_devworkspace_namespace_base-ocp4_workload_devspaces_username
# or ocp4_workload_devspaces_devworkspace_namespace_base-ocp4_workload_devspaces_user_baseXX
ocp4_workload_devspaces_devworkspace_namespace_base: devworkspace-

# Repo to be cloned into the devworkspace - one of the two options must be set
# Either the full path to a repository
# ocp4_workload_devspaces_devworkspace_git_repo: https://github.com/eclipse-che/che-docs

# Or the Base followed by userXX followed by repo name
# ocp4_workload_devspaces_devworkspace_git_repo_base: http://gitea.gitea.svc:3000
# ocp4_workload_devspaces_devworkspace_git_repo_name: reponame

ocp4_workload_devspaces_namespace: openshift-devspaces
ocp4_workload_devspaces_user_base: user
ocp4_workload_devspaces_user_count: 1

ocp4_workload_devspaces_devworkspace: true
ocp4_workload_devspaces_devworkspace_name: mydevworkspace
ocp4_workload_devspaces_devworkspace_namespace: devworkspaces
ocp4_workload_devspaces_devworkspace_username: user1
ocp4_workload_devspaces_devworkspace_project: myproject
ocp4_workload_devspaces_devworkspace_git_repo: https://github.com/eclipse-che/che-docs
ocp4_workload_devspaces_devworkspace_git_revision: main

ocp4_workload_devspaces_devworkspace_components:
- name: tooling
container:
image: registry.redhat.io/devspaces/udi-rhel8:latest
ocp4_workload_devspaces_devworkspace_devfile: >-
http://devspaces-dashboard.openshift-devspaces.svc.cluster.local:8080/dashboard/api/editors/devfile?che-editor=che-incubator/che-code/latest
image: registry.redhat.io/devspaces/udi-base-rhel10:latest
# image: registry.redhat.io/devspaces/udi-rhel8:latest
# image: registry.redhat.io/devspaces/udi-rhel9:latest
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
- name: Create DevWorkspace
kubernetes.core.k8s:
state: present
template: "{{ item }}"
loop:
- namespace.yaml.j2
- devworkspace.yaml.j2
31 changes: 8 additions & 23 deletions roles/ocp4_workload_devspaces/tasks/save_user_information.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
- name: Get devspaces route
- name: Get DevSpaces route
kubernetes.core.k8s_info:
api_version: route.openshift.io/v1
kind: Route
Expand All @@ -14,31 +14,16 @@
ansible.builtin.set_fact:
_ocp4_workload_devspaces_url: "https://{{ r_devspaces_route.resources[0].spec.host }}"

- name: Save workload user_info
block:
- name: Output workload user_info
agnosticd.core.agnosticd_user_info:
msg: "Dev Spaces URL: {{ _ocp4_workload_devspaces_url }}"
data:
devspaces_url: "{{ _ocp4_workload_devspaces_url }}"

- name: Save workload user_info for multi users
when: ocp4_workload_devspaces_user_count | int > 1
- name: Save DevSpaces URL (single user)
when: ocp4_workload_devspaces_user_count is not defined
agnosticd.core.agnosticd_user_info:
user: "{{ ocp4_workload_devspaces_user_base }}{{ n }}"
data:
devspaces_url: "{{ _ocp4_workload_devspaces_url }}"
loop: "{{ range(1, ocp4_workload_devspaces_user_count | int + 1) | list }}"
loop_control:
loop_var: n
label: "{{ ocp4_workload_devspaces_user_base }}{{ n }}"

- name: Save devworkspace specific user_info
when: ocp4_workload_devspaces_devworkspace | bool
vars:
_devworkspace_path: >-
"dashboard/#/ide/{{ ocp4_workload_devspaces_devworkspace_namespace }}/{{ ocp4_workload_devspaces_devworkspace_name }}"
- name: Save DevSpaces URL (multiple users)
when: ocp4_workload_devspaces_user_count is defined
agnosticd.core.agnosticd_user_info:
msg: "Dev Spaces Workspace URL: {{ _ocp4_workload_devspaces_url }}/{{ _devworkspace_path }}"
user: "{{ ocp4_workload_devspaces_user_base }}{{ item }}"
data:
devworkspaces_url: "{{ _ocp4_workload_devspaces_url }}/{{ _devworkspace_path }}"
devspaces_url: "{{ _ocp4_workload_devspaces_url }}"
loop: "{{ range(1, ocp4_workload_devspaces_user_count | int + 1) | list }}"
116 changes: 41 additions & 75 deletions roles/ocp4_workload_devspaces/tasks/workload.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
---
- name: Install devspaces operator
ansible.builtin.include_role:
name: install_operator
vars:
install_operator_name: devspaces
install_operator_namespace: "{{ ocp4_workload_devspaces_namespace }}"
install_operator_csv_nameprefix: devspacesoperator
install_operator_channel: "{{ ocp4_workload_devspaces_channel }}"
install_operator_starting_csv: "{{ ocp4_workload_devspaces_startingcsv }}"
install_operator_catalogsource_setup: "{{ ocp4_workload_devspaces_catalogsource_setup }}"
install_operator_catalogsource_name: "{{ ocp4_workload_devspaces_catalogsource_name }}"
install_operator_catalogsource_image: "{{ ocp4_workload_devspaces_catalogsource_image }}"
install_operator_catalogsource_image_tag: "{{ ocp4_workload_devspaces_catalogsource_tag }}"
# - name: Install devspaces operator
# ansible.builtin.include_role:
# name: install_operator
# vars:
# install_operator_name: devspaces
# install_operator_namespace: "{{ ocp4_workload_devspaces_namespace }}"
# install_operator_csv_nameprefix: devspacesoperator
# install_operator_channel: "{{ ocp4_workload_devspaces_channel }}"
# install_operator_starting_csv: "{{ ocp4_workload_devspaces_startingcsv }}"
# install_operator_catalogsource_setup: "{{ ocp4_workload_devspaces_catalogsource_setup }}"
# install_operator_catalogsource_name: "{{ ocp4_workload_devspaces_catalogsource_name }}"
# install_operator_catalogsource_image: "{{ ocp4_workload_devspaces_catalogsource_image }}"
# install_operator_catalogsource_image_tag: "{{ ocp4_workload_devspaces_catalogsource_tag }}"

- name: Create CheCluster
kubernetes.core.k8s:
state: present
template: checluster.yaml.j2
# - name: Create CheCluster
# kubernetes.core.k8s:
# state: present
# template: checluster.yaml.j2

- name: Wait until devspaces dashboard pod is ready
kubernetes.core.k8s_info:
Expand All @@ -31,8 +31,8 @@
retries: 30
delay: 10

- name: Create DevWorkspace
when: ocp4_workload_devspaces_devworkspace | bool
- name: Create DevWorkspace(s)
when: ocp4_workload_devspaces_setup_devworkspaces | bool
block:
- name: Check {{ ocp4_workload_devspaces_devworkspace_devfile }}
kubernetes.core.k8s_exec:
Expand All @@ -46,63 +46,29 @@
retries: 15
delay: 5

- name: Create DevWorkspace
kubernetes.core.k8s:
state: present
template: "{{ item }}"
loop:
- namespace.yaml.j2
- devworkspace.yaml.j2
- name: Create DevWorkspace for single user
when: ocp4_workload_devspaces_user_count is not defined
vars:
_ocp4_workload_devspaces_devworkspace_namespace: "{{ ocp4_workload_devspaces_devworkspace_namespace_base }}{{ ocp4_workload_devspaces_username }}"
_ocp4_workload_devspaces_devworkspace_username: "{{ ocp4_workload_devspaces_username }}"
_ocp4_workload_devspaces_devworkspace_git_repo: >-
{{ ocp4_workload_devspaces_devworkspace_git_repo if ocp4_workload_devspaces_devworkspace_git_repo is defined
else (ocp4_workload_devspaces_devworkspace_git_repo_base ~ '/' ~ ocp4_workload_devspaces_user_base ~ '/' ~ ocp4_workload_devspaces_devworkspace_git_repo_name if ocp4_workload_devspaces_devworkspace_git_repo_base is defined else "") }}
ansible.builtin.include_tasks: create_dev_workspace.yml

- name: Check/recover devworkspace
block:
- name: Check that devworkspace is running
kubernetes.core.k8s_info:
api_version: workspace.devfile.io/v1alpha2
kind: DevWorkspace
name: "{{ ocp4_workload_devspaces_devworkspace_name }}"
namespace: "{{ ocp4_workload_devspaces_devworkspace_namespace }}"
register: r_devworkspace
failed_when: r_devworkspace.resources[0].status.phase | default('') != 'Running'
until: r_devworkspace is successful
retries: 30
delay: 10
rescue:
- name: Delete devworkspace (rescue)
kubernetes.core.k8s:
state: absent
api_version: workspace.devfile.io/v1alpha2
kind: DevWorkspace
name: "{{ ocp4_workload_devspaces_devworkspace_name }}"
namespace: "{{ ocp4_workload_devspaces_devworkspace_namespace }}"

- name: wait for devworkspace deletion (rescue)
kubernetes.core.k8s_info:
api_version: workspace.devfile.io/v1alpha2
kind: DevWorkspace
name: "{{ ocp4_workload_devspaces_devworkspace_name }}"
namespace: "{{ ocp4_workload_devspaces_devworkspace_namespace }}"
register: r_devworkspace_deletion
until: r_devworkspace_deletion.resources | length == 0
retries: 10
delay: 5

- name: Recreate devworkspace (rescue)
kubernetes.core.k8s:
state: present
template: devworkspace.yaml.j2

- name: Check devworkspace is running (rescue)
kubernetes.core.k8s_info:
api_version: workspace.devfile.io/v1alpha2
kind: DevWorkspace
name: "{{ ocp4_workload_devspaces_devworkspace_name }}"
namespace: "{{ ocp4_workload_devspaces_devworkspace_namespace }}"
register: r_devworkspace_retry
failed_when: r_devworkspace_retry.resources[0].status.phase | default('') != 'Running'
until: r_devworkspace_retry is successful
retries: 30
delay: 5
- name: Create DevWorkspace for multiple users
when: ocp4_workload_devspaces_user_count is defined
ansible.builtin.include_tasks: create_dev_workspace.yml
vars:
_ocp4_workload_devspaces_devworkspace_namespace: "{{ ocp4_workload_devspaces_devworkspace_namespace_base }}{{ ocp4_workload_devspaces_user_base }}{{ n }}"
_ocp4_workload_devspaces_devworkspace_username: "{{ ocp4_workload_devspaces_user_base }}{{ n }}"
_ocp4_workload_devspaces_devworkspace_git_repo: >-
{{ ocp4_workload_devspaces_devworkspace_git_repo if ocp4_workload_devspaces_devworkspace_git_repo is defined
else (ocp4_workload_devspaces_devworkspace_git_repo_base ~ '/' ~ ocp4_workload_devspaces_user_base ~ n ~ '/' ~ ocp4_workload_devspaces_devworkspace_git_repo_name if ocp4_workload_devspaces_devworkspace_git_repo_base is defined else "") }}
loop: "{{ range(1, ocp4_workload_devspaces_user_count | int + 1) | list }}"
loop_control:
loop_var: n
label: "{{ ocp4_workload_devspaces_user_base }}{{ n }}"

- name: Save user information
ansible.builtin.include_tasks: save_user_information.yml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ apiVersion: workspace.devfile.io/v1alpha2
kind: DevWorkspace
metadata:
name: {{ ocp4_workload_devspaces_devworkspace_name }}
namespace: {{ ocp4_workload_devspaces_devworkspace_namespace }}
namespace: {{ _ocp4_workload_devspaces_devworkspace_namespace }}
spec:
routingClass: che
started: true
Expand All @@ -15,7 +15,7 @@ spec:
- name: {{ ocp4_workload_devspaces_devworkspace_project }}
git:
remotes:
origin: {{ ocp4_workload_devspaces_devworkspace_git_repo }}
origin: {{ _ocp4_workload_devspaces_devworkspace_git_repo }}
checkoutFrom:
revision: {{ ocp4_workload_devspaces_devworkspace_git_revision }}
components: {{ ocp4_workload_devspaces_devworkspace_components }}
4 changes: 2 additions & 2 deletions roles/ocp4_workload_devspaces/templates/namespace.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
kind: Namespace
apiVersion: v1
metadata:
name: {{ ocp4_workload_devspaces_devworkspace_namespace }}
name: {{ _ocp4_workload_devspaces_devworkspace_namespace }}
labels:
app.kubernetes.io/part-of: che.eclipse.org
app.kubernetes.io/component: workspaces-namespace
annotations:
che.eclipse.org/username: {{ ocp4_workload_devspaces_devworkspace_username }}
che.eclipse.org/username: {{ _ocp4_workload_devspaces_devworkspace_username }}
3 changes: 3 additions & 0 deletions roles/ocp4_workload_devspaces/vars/main.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
---
_ocp4_workload_devspaces_devworkspace_namespace: ""
_ocp4_workload_devspaces_devworkspace_username: ""
_ocp4_workload_devspaces_url: ""
_ocp4_workload_devspaces_devworkspace_git_repo: ""