Skip to content

Allow to Select Kubernetes Namespace in Environment setting page [FE]

What does this MR do and why?

This MR adds a new field to the environment settings page, which allows users to set the Kubernetes Namespace for the Environment. The feature requires connecting to the cluster via the selected agent and requesting a list of available namespaces to choose from. That's why it depends on selecting an agent first.

The flow is:

flowchart TD
    A[Environment has an agent] -->|Yes| B{{Performs cluster connection}}
    A[Environment has an agent] -->|No| D(Namespace selector is not shown)
    D(Namespace selector is not shown) --> C{{User selects agent}}
    C{{User selects agent}} --> B{{Performs cluster connection}}
    B{{Performs cluster connection}} -->|Success| E(Namespace selector is shown)
    B{{Performs cluster connection}} -->|Failure| F(Alert is shown)

Screenshots or screen recordings

Scenario Screenshot
Environment doesn't have an agent Screenshot_2023-07-02_at_22.03.51
Environment has an agent and no namespace Screenshot_2023-07-02_at_22.01.56
Environment has an agent and cannot connect to the cluster Screenshot 2023-07-06 at 23.32.39.png
Environment has an agent and a namespace Screenshot_2023-07-02_at_22.01.23

New environment:

Screen_Recording_2023-07-02_at_22.04.29

How to set up and validate locally

Numbered steps to set up and validate the change are strongly suggested.

  1. In rails console enable the kas_user_access_project feature flag

       Feature.enable(:kas_user_access_project, Project.find(<your-project-id>))
  2. In rails console enable the kubernetes_namespace_for_environment feature flag

       Feature.enable(:kubernetes_namespace_for_environment)
  3. Enable KAS on your GDK (steps 1-2 from the guide).

  4. Visit the Project -> Infrastructure -> Kubernetes clusters page and create an agent following the instruction from the modal.

    • Select the "Connect a cluster" button
    • The modal should pop up
    • In the modal select "Select an agent or enter a name to create new"
    • You probably won't have any configured agents to show up in the list, create a new one by typing the name of your choice
    • The button should appear at the bottom of the list saying "Create agent: <your-agent-name>"
    • Select the button and click "Register" in the next view.
    • Save the token to use it in the next point.
  5. Please follow points 3-8 from the guide and then the (Optional) Deploy the GitLab Agent (agentk) with k3d section to create a local cluster and connect your agent with the cluster.

  6. Add the following configuration file inside your project on the default branch: .gitlab/agents/<your-agent-name>/config.yaml:

    gitops:
      manifest_projects:
      - id: <your-group>/<your-project>
    user_access:
      access_as: 
        agent: {}
      projects:
      - id: <your-group>/<your-project>
  7. Visit the Environments page:

    • Project -> Operate -> Environments if the new navigation is enabled
    • Project -> Deployments -> Environments if the new navigation is not enabled
  8. Create/Edit an environment using the UI, select the agent created in the previous steps

  9. Verify the behaviour of the Kubernetes namespace field

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Review progress:

Related to #403618 (closed)

Edited by Anna Vovchenko

Merge request reports