diff --git a/roles/ocp4_workload_devspaces/defaults/main.yml b/roles/ocp4_workload_devspaces/defaults/main.yml index a3aef05..0432f6c 100644 --- a/roles/ocp4_workload_devspaces/defaults/main.yml +++ b/roles/ocp4_workload_devspaces/defaults/main.yml @@ -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 diff --git a/roles/ocp4_workload_devspaces/tasks/create_dev_workspace.yml b/roles/ocp4_workload_devspaces/tasks/create_dev_workspace.yml new file mode 100644 index 0000000..4a13518 --- /dev/null +++ b/roles/ocp4_workload_devspaces/tasks/create_dev_workspace.yml @@ -0,0 +1,8 @@ +--- +- name: Create DevWorkspace + kubernetes.core.k8s: + state: present + template: "{{ item }}" + loop: + - namespace.yaml.j2 + - devworkspace.yaml.j2 diff --git a/roles/ocp4_workload_devspaces/tasks/save_user_information.yml b/roles/ocp4_workload_devspaces/tasks/save_user_information.yml index 60aed74..91179e1 100644 --- a/roles/ocp4_workload_devspaces/tasks/save_user_information.yml +++ b/roles/ocp4_workload_devspaces/tasks/save_user_information.yml @@ -1,5 +1,5 @@ --- -- name: Get devspaces route +- name: Get DevSpaces route kubernetes.core.k8s_info: api_version: route.openshift.io/v1 kind: Route @@ -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 }}" diff --git a/roles/ocp4_workload_devspaces/tasks/workload.yml b/roles/ocp4_workload_devspaces/tasks/workload.yml index 9408215..a59a088 100644 --- a/roles/ocp4_workload_devspaces/tasks/workload.yml +++ b/roles/ocp4_workload_devspaces/tasks/workload.yml @@ -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: @@ -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: @@ -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 diff --git a/roles/ocp4_workload_devspaces/templates/devworkspace.yaml.j2 b/roles/ocp4_workload_devspaces/templates/devworkspace.yaml.j2 index 190abe6..e23f4ff 100644 --- a/roles/ocp4_workload_devspaces/templates/devworkspace.yaml.j2 +++ b/roles/ocp4_workload_devspaces/templates/devworkspace.yaml.j2 @@ -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 @@ -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 }} diff --git a/roles/ocp4_workload_devspaces/templates/namespace.yaml.j2 b/roles/ocp4_workload_devspaces/templates/namespace.yaml.j2 index bc88cf6..d08eeb4 100644 --- a/roles/ocp4_workload_devspaces/templates/namespace.yaml.j2 +++ b/roles/ocp4_workload_devspaces/templates/namespace.yaml.j2 @@ -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 }} diff --git a/roles/ocp4_workload_devspaces/vars/main.yml b/roles/ocp4_workload_devspaces/vars/main.yml index 4cc820f..f658a08 100644 --- a/roles/ocp4_workload_devspaces/vars/main.yml +++ b/roles/ocp4_workload_devspaces/vars/main.yml @@ -1,2 +1,5 @@ --- +_ocp4_workload_devspaces_devworkspace_namespace: "" +_ocp4_workload_devspaces_devworkspace_username: "" _ocp4_workload_devspaces_url: "" +_ocp4_workload_devspaces_devworkspace_git_repo: ""