1 - Code Repository

Users can view the list of code repositories used in the project and add new repositories from the code repository menu in the project.

Getting Started with Code Repository

To start using the code repository, follow these steps:

  1. Main page, click the Project card. Move to the Project Dashboard page.
  2. Click the Repository > Code Repository menu from the left menu. Move to the Code Repository page.

Adding a Code Repository

To add a code repository, follow the procedure below.

  1. Code Repository page, click the Add Code Repository button in the top right corner. It will move to the Add Code Repository page.
  2. On the Add Code Repository page, enter/set each item.
  3. Click the Connection Test button.
  4. Click the Save button.
ItemDescription
Repository TypeSelect the repository to use
  • Registered Tool: You can select and use the types of SCM Repository tools available to the user (Github, Gitlab, etc.).
  • DevOps Code: Available if you have applied for DevOps Code use in the Samsung Cloud Platform Console.
  • Unregistered Tool: You can use it by entering the domain of an unregistered tool. The unregistered tool item only appears when the App template is Environment Only (without source code).
New/Existing UsageSelect Create New Repository or Use Existing Repository
Repository InformationEnter repository information
  • When creating a new repository, the URL is composed of the project group name/project name.
Authentication InformationEnter authentication information.
Repository InformationEnter repository information
  • You can use a code repository that is not registered as a tool in the DevOps Console.
  • An additional URL check process is required.
Table. Add Code Repository Input Items

Managing Code Repositories

Code Repository List

ItemDescription
User Permission SettingsUser Permission Settings popup window opens.
Webhook SettingsWebhook Settings popup window opens.
Edit IconAuthentication Information Modification popup window for the code repository opens.
DeleteDeletes the code repository.
When deleting, you can choose whether to delete the code repository in SCM as well.
Table. Code Repository List Screen Items

Adding an Account to a Code Repository

To add an account to a code repository, follow these steps:

  1. On the Code Repository page, click the User Permission Settings icon for the code repository you want to set up. The User Permission Settings popup window opens.
  2. In the User Permission Settings popup window, enter the authentication information for the account you want to add, and then click the Save button to complete adding the account.

Setting up a Webhook for a Code Repository

You can set up a webhook to run a pipeline when changes such as commit, push occur in a code repository branch.

To set up a webhook, follow these steps:

  1. On the Code Repository page, click the Webhook Settings icon for the code repository you want to set up. The Webhook Settings popup window opens.
  2. In the Webhook Settings popup window, click the Add button.
  3. In the Webhook Settings popup window, select the pipeline you want to run, enter the branch name, and then click the Save button to complete setting up the webhook.

Changing an Account in a Code Repository

To change an account in a code repository, follow these steps:

  1. On the Code Repository page, click the Edit icon for the code repository you want to change. The Authentication Information Modification popup window opens.
  2. In the Authentication Information Modification popup window, enter the authentication information and then click the Save button to complete changing the account.

Deleting a Code Repository

To delete a code repository, follow these steps:

  1. On the Code Repository page, click the X icon for the code repository you want to delete. The Code Repository Deletion popup window opens.
  2. In the Code Repository Deletion popup window, select Delete the repository in SCM as well and then click the Confirm button to complete deleting the code repository.
Note

Delete the repository in SCM as well

  • Selected: Both the code repository list and the actual code repository in SCM are deleted.
  • Not selected: Only the code repository list is deleted, and the code repository in SCM remains.

2 - Artifact Repository

Users can create and utilize projects in conjunction with Nexus and retrieve created projects.

Getting Started with Artifact Repository

To start managing the artifact repository, follow these steps.

  1. Main page, click the Project card. It moves to the Project Dashboard page.
  2. Click the Repository > Artifact Repository menu from the left menu. It moves to the Artifact Repository page.

Adding an Artifact Repository

To add an artifact repository, follow these steps:

  1. Artifact Repository page, click the Add Artifact Repository button in the top right corner. It will move to the Add Artifact Repository page.
  2. On the Add Artifact Repository page, enter/set each item.
  3. Click the Connection Test button.
  4. Click the Save button.
ItemDescription
Repository Creation OptionSelect whether to create a new repository or use an existing one.
Basic Information InputEnter Base URL, select repository type, and enter repository/authentication information.
Table. Input Items for Adding an Artifact Repository

Managing Artifact Repository

Artifact Repository List

ItemDescription
Account ChangeModifies the artifact repository authentication information.
DeleteDeletes the artifact repository.
Table. Artifact Repository List Screen Items

Changing Artifact Repository Account

To change the account of an artifact repository, follow these steps.

  1. On the Artifact Repository page, click the Edit icon of the artifact repository you want to change. The Authentication Information Modification popup window opens.
  2. In the Authentication Information Modification popup window, enter the authentication information and click the Save button to complete the account change.

Deleting an Artifact Repository

To delete an artifact repository, follow these steps.

  1. On the Artifact Repository page, click the X icon of the artifact repository you want to delete. The Artifact Repository Deletion popup window opens.
  2. In the Artifact Repository Deletion popup window, select Delete the repository in Nexus as well and click the Confirm button to complete the deletion of the artifact repository.
Note

Delete the repository in Nexus as well

  • Selected: Both the artifact repository list and the Nexus repository are deleted.
  • Not selected: Only the artifact repository list is deleted, and the Nexus repository remains.

3 - Image Repository

The user can manage the image repository used in the project from the project’s image repository menu.

Getting Started with Image Repository

To start managing the image repository, follow these steps.

  1. Main page, click the Project card. Move to the Project Dashboard page.
  2. In the left menu, click the Repository > Image Repository menu. Move to the Image Repository page.

Adding an Image Repository

To add an image repository, follow these steps.

App. Adding an Image Repository

  1. Image Repository page, click the App Image Repository Addition button in the top right. Move to the App Image Repository Addition page.
  2. On the App Image Repository Addition page, enter/settings for each item.
  3. Click the Connection Test button.
  4. Click the Save button.
ItemDescription
Repository Type SelectionSelect the image repository type.
If you want to use an image repository not registered in Devops Console, select the Image Registry type.
Repository Creation SelectionChoose whether to create a new repository or use an existing one.
  • If you selected Docker hub or Image Registry type earlier, you can only select Use Existing Repository.
Registered ToolEnter repository information.
Unregistered ToolEnter repository information
  • You can register an image repository that has not been registered as a tool in DevOps Console.
  • Click the URL Check button to proceed with the verification process.
  • You can only select Use Existing Repository.
Table. App Image Repository Addition Input Items

Adding a Pull-only Image Repository

  1. Image Repository page, click the Add Pull-only Image Repository button at the top right. It moves to the Add Pull-only Image Repository page.
  2. On the Add Pull-only Image Repository page, enter/set each item.
  3. Click the Connection Test button.
  4. Click the Save button.

Managing an Image Repository

Image Repository List

ItemDescription
Account ChangeThe Authentication Information Modification popup window for the image repository opens
DeleteThe Image Repository Deletion popup window opens
Table. Image Repository List Screen Items

Changing an Image Repository Account

To change the account of an image repository, follow these steps.

  1. On the Image Repository page, click the Edit icon of the image repository to be changed. The Authentication Information Modification popup window opens.
  2. In the Authentication Information Modification popup window, enter the authentication information and click the Save button to complete the account change.

Deleting an Image Repository

To delete an image repository, follow these steps.

  1. On the Image Repository page, click the X icon of the image repository to be deleted. The Image Repository Deletion popup window opens.
  2. In the Image Repository Deletion popup window, select Also delete the repository in IR and click the Confirm button to complete the image repository deletion.
Note

Also delete the repository in IR

  • Selected: Both the image repository list and the actual image repository’s repository are deleted.
  • Not selected: Only the image repository list is deleted, and the actual image repository’s repository remains.

4 - Chart Repository

Users can upload and delete Helm charts in the chart repository.

The charts uploaded to the chart repository are used in Adding Helm Charts and are used for Helm installation or project creation.

Getting Started with Chart Repository

To start managing the chart repository, follow these steps.

  1. Main page, click the Manage icon at the top right. Move to the Tenant Dashboard page.
  2. Click the Tools & Templates > Chart Repository menu on the left menu. The Chart Repository screen appears.

Getting Started with Project Chart Repository

Note
You can upload/modify/delete charts that are only available within the project to the chart repository.
  1. Click the Project card on the Main page. Move to the Project Dashboard page.
  2. Click the Repository > Chart Repository menu on the left menu. Move to the Chart Repository page.

Uploading Charts

Note
For more information on Chart.yaml, see the Helm Official Page.

The registration information is automatically generated based on the name and version of the Chart.yaml file of the uploaded chart.

To upload a chart to the chart repository, follow these steps.

  1. Click the Manage icon at the top right of the Main page. Move to the Tenant Dashboard page.
  2. Click the Tools & Templates > Chart Repository menu on the left menu. The Chart Repository screen appears.
  3. Click the Upload button on the Chart Repository page. The Chart File Upload popup window opens.
  4. Enter the contents in the Chart File Upload popup window and click the Upload button
ItemDescription
Chart TypeSelect the chart type.
Tenant / Project GroupSelect the tenant / project group where the chart will be used.
Chart FileClick the Browse button to upload the chart file.
  • Only .tgz files created through the helm package command can be uploaded.
Table. Chart Upload Input Items

Deleting Charts

To delete a chart, follow these steps.

  1. Click the Manage icon at the top right of the Main page. Move to the Tenant Dashboard page.
  2. Click the Tools & Templates > Chart Repository menu on the left menu. The Chart Repository screen appears.
  3. Select the checkbox of the item to be deleted in the Chart Repository list and click the Delete button.
  4. Click the Confirm button in the confirmation popup window.
Caution
If the chart is registered in the Helm chart, it cannot be deleted. Please remove the information from the Helm Chart menu first.

Deleting a Specific Version of a Chart

To delete a specific version of a chart, follow these steps.

  1. Click the Manage icon at the top right of the Main page. Move to the Tenant Dashboard page.
  2. Click the Tools & Templates > Chart Repository menu on the left menu. The Chart Repository screen appears.
  3. Click the item to be deleted in the Chart Repository list. Move to the Chart Version List page.
  4. Select the checkbox of the item to be deleted on the Chart Version List page and click the Delete button.
  5. Click the Confirm button in the confirmation popup window.

5 - Helm Chart

Helm Chart is a feature that allows you to register charts from the Chart Repository to be used in the DevOps Console.

Helm Chart can be used through Helm Install. It can also be linked to App templates through Adding Supported Helm Charts.

Getting Started with Helm Chart

To start managing Helm Charts, follow these steps:

  1. Main page, click the Manage icon at the top right. The Manage page opens.
  2. In the left menu, click Tools & Templates > Helm Chart.

Getting Started with Project Helm Chart

Note
You can register, modify, or delete Helm Charts that are only available within the project.
  1. Main page, click the Project card. The Project Dashboard page moves.
  2. In the left menu, click Repository > Helm Chart. The Helm Chart page moves.

Adding Helm Chart

Users can add their own Helm Charts.

Before registering a Helm Chart, users must upload the chart to be used through Uploading Charts.

To add a Helm Chart, follow these steps:

  1. Main page, click the Manage icon at the top right. The Manage page opens.
  2. In the left menu, click Tools & Templates > Helm Chart. The Helm Chart page opens.
  3. In the Helm Chart Type menu, select the type of Helm Chart. The Add Helm Chart button is only visible if you have registration permissions based on the selected information.
  4. Click the Add Helm Chart button. The Register Helm Chart page opens.
  5. Enter the Helm Chart Basic Information and click the Start button.
    ItemDescription
    Helm Chart TypeSelect the type of Helm Chart to add.
    Tenant/Project GroupSelect the tenant or project group where the Helm Chart will be added.
    • If you select a tenant, the registered chart can only be used in projects within that tenant.
    • If you select a project group, the registered chart can only be used in projects within that project group.
    Allow New InstallationSelect whether to allow new installations through Helm Install
    Table. Helm Chart Basic Information Setting Items
  6. Select the Helm Chart Repository and Helm Chart, then click the Validation Check button.
  7. Enter the remaining information and click the Next button.
    Repository
    Item
    Description
    ChartMuseumHelm Chart RepositorySelect ChartMuseum as the chart repository.
    Chart SelectionSelect the chart to register as a Helm Chart from the charts uploaded through Uploading Charts.
    Harbor OCIHelm Chart RepositorySelect Harbor OCI as the chart repository.
    Authentication InformationEnter the authentication information for the chart repository and click the Connection Test button.
    Chart SelectionSelect the Helm Chart that can be retrieved using the entered authentication information and click the Validation Check button.
    OCIHelm Chart RepositorySelect OCI as the chart repository.
    Authentication InformationEnter the authentication information for the chart repository and click the Connection Test button.
    Chart InputEnter the Helm Chart that can be retrieved using the authentication information entered in Authentication Information and click the Validation Check button.
    (e.g., oci://chart.url/repo/chartname:version)
    CommonIconSelect an icon to represent the Helm Chart.
    CI/CD InformationSelect whether to support CI/CD functionality.
    • This indicates whether the Helm Chart can be linked to an App template.
    • The Values.yaml file of the chart must contain the image.repository, image.tag, and imagePullSecrets[0].name keys.
    • If Support CI/CD is selected, the CI/CD information step is added.
    Chart ImageSelect whether to register an image.
    • The Values.yaml file of the chart must contain the imagePullSecrets[0].name key.
    • If No Image is selected, the image secret information step is excluded.
    Table. Chart Repository Setting Items
  8. Select the image repository and enter the authentication information, then click the Connection Test button.
  9. Enter the remaining information and click the Next button.
    ItemDescription
    Image Repository InformationSelect the image repository and enter the authentication information.
    • Administrator privileges are required for the image repository.
    • The user who will use the Helm Chart to perform Helm Install will be granted Read privileges for the image repository.
    • The entered authentication information will be used to grant privileges to the image repository.
    Add Used ImagesAdd the image paths from the selected image repository.
    • Select images from the list: Organization, Repository, and Tag can be selected and added.
    • User input: The docker repository and docker tag of the image can be entered directly and added.
    • Multiple inputs are possible.
    Use Register’s Authentication InformationThis option is available when the selected image repository is a tool that cannot grant privileges (e.g., SCR).
    • If not checked, when a user performs Helm Install, the user will be granted Pull privileges for the used image. If the tool cannot grant privileges, no privileges will be granted.
    • If checked, the Helm Chart user will use the registrant’s authentication information instead of their own privileges when performing Helm Install.
    Be cautious when checking this option:
    • The registrant’s authentication information may be exposed to the Helm Chart user, so use this option only when necessary.
    • This option must be selected for image repositories that only provide image pull functionality. A separate image repository for pull purposes only must be entered. (If checked, one image repository cannot be used for both pull and push at the same time.)
    • The registrant’s authentication information is used in Project > Image Repository > Pull-only Image and Helm Release’s Image Pull Secret. This information cannot be changed by the Helm Chart user, and changes to the registrant’s authentication information in the Helm Chart will be applied universally.
    Select Docker Base ImageSelect the image to be used as the Docker base image.
    • This option is only available if Support CI/CD was selected in the previous step.
    • The selected image will be used as the base image for Docker build.
    Table. Image Secret Information Setting Items
  10. Select the supported App template and click the Complete button.
Note
App templates marked as Environment Only provide only build/deployment environments without project sample code.

Modifying Helm Chart

To modify a Helm Chart, follow these steps:

  1. Main page, click the Manage icon at the top right. The Manage page opens.
  2. In the left menu, click Tools & Templates > Helm Chart.
  3. In the Helm Chart list, click the Helm Chart card you want to modify. The Helm Chart Details page opens.
  4. Click the Modify button at the bottom right.
  5. Modify the information and click the Save button to complete the modification.

Adding Helm Chart Version

To add a Helm Chart version, the chart with a different version must be registered in advance through Uploading Charts.

To add a Helm Chart version, follow these steps:

  1. Main page, click the Manage icon at the top right. The Manage page opens.
  2. In the left menu, click Tools & Templates > Helm Chart.
  3. In the Helm Chart list, click the Helm Chart card you want to modify. The Helm Chart Details page opens.
  4. Click the Add Version button at the bottom right. The Add Helm Chart Version popup opens.
  5. Enter the information and click the Save button to complete the version addition.
    ItemDescription
    Chart VersionSelect the chart version to add.
    • Chart versions that are not registered as Helm Charts in the chart repository are displayed.
    Table. Helm Chart Version Addition Setting Items

Deleting Helm Chart

To delete a Helm Chart, follow these steps:

  1. Main page, click the Manage icon at the top right. The Manage page opens.
  2. In the left menu, click Tools & Templates > Helm Chart. The Helm Chart page opens.
  3. In the Helm Chart list, click the Helm Chart card you want to delete. The Helm Chart Details page opens.
  4. Click the Delete button at the bottom right.
  5. In the confirmation popup, click the Confirm button to complete the deletion.

5.1 - Creating a Helm Chart that Supports Form Input

Users can create a Helm chart that supports form input.

Note
Only available in Helm 3 or later versions.

Form Input Support Helm Chart

Using a Helm chart that supports form input, users can input each item through a user interface when installing the Helm chart.

Helm Chart File Composition and values.schema.json File

Helm Chart File Composition

To support form input, a values.schema.json file is required in addition to the basic Helm chart file composition.

Helm Chart Directory Structure
Figure. Helm Chart Directory Structure

Relationship between values.schema.json and values.yaml Files

Relationship between values.schema.json and values.yaml files
Figure. Relationship between values.schema.json and values.yaml files

values.schema.json

  • A file defined in JSON Schema to validate the values entered in the values.yaml file.
  • DevOps Console provides additional features to display forms on the screen and allow users to easily input values.

JSON Schema Basics

The values.schema.json file used in DevOps Console supports the standard format defined in JSON Schema.

Note

For detailed guides on standard formats, please refer to the following sites:

The basic properties are described as follows:

PropertyDescriptionData TypeAllowed Values
$schemastringhttp://json-schema.org/schema#
typeData type
  • Determines the default rendering form based on the data type
string
  • string
    • Creates an input field for string input
    • Combobox rendering if oneOf or enum exists
    • Password input rendering if render is password
  • number
    • Creates an input field for integer and decimal input
  • integer
    • Creates an input field for integer input
  • object
    • Defines a form group with properties
    • Used for hierarchical structure processing
  • array
    • Renders a list of input fields for multiple data input
  • boolean
    • Renders a checkbox
  • null
titleLabelstringDefines the label for the item
descriptionDescriptionstringDisplays as a tooltip
readOnlyRead-only statusboolean
  • Default: false
  • The created form is displayed as read-only
requiredList of required input itemsarraye.g., "required": ["username", "password"]
Table. JSON Schema Property Items

DevOps Console Defined Items

The following items are defined in DevOps Console and only work in DevOps Console.

PropertyDescriptionData TypeAllowed Values
formDevOps Console screen display status
  • Only displays on the screen if set to true
booleandefault: false
renderRenderer changestring
  • password: Used for special processing (masking) in the form
formatString format referencestring
  • ip, hostname, uri, etc.: Input formats provided by JSON Schema
  • password_confirm: Creates an input field for password confirmation
form_localeDefined for internationalization processing
  • Uses the default property value if the set locale is not available
  • Supports Korean (ko) and English (en)
object
  • ko
    • label
    • description
  • en
    • label
    • description
Table. DevOps Console Defined Items

Hierarchical Processing

To process hierarchical structures, JSON Schema defines the "type": "object" property value and the properties property. Sub-properties are defined under the properties item.

The following example defines the service.internalPort property.

Color mode
"service": {
    "type": "object",
    "form": true,
    "properties": {
        "internalPort": {
            "type": "number",
            "title": "Container Port",
            "description": "HTTP port to expose at container level",
            "form": true
        }
<omitted>
"service": {
    "type": "object",
    "form": true,
    "properties": {
        "internalPort": {
            "type": "number",
            "title": "Container Port",
            "description": "HTTP port to expose at container level",
            "form": true
        }
<omitted>
Hierarchical Processing Example

Internationalization Processing

For internationalization processing, use the form_locale property and define it as follows.

Supports Korean and English.

Color mode
"db": {
  "type": "string",
  "title": "DB",
  "description": "choose db type",
  "oneOf": [
    {
      "const": "in",
      "title": "internal"
    },
    {
      "const": "ex",
      "title": "external"
    }
  ],
  "form": true,
  "form_locale": {
    "ko": {
      "label": "데이터베이스",
      "description": "데이터베이스 타입을 선택하세요",
      "internal": "내부",
      "external": "외부"
    },
    "en": {
      "label": "Database"
    }
  }
}
"db": {
  "type": "string",
  "title": "DB",
  "description": "choose db type",
  "oneOf": [
    {
      "const": "in",
      "title": "internal"
    },
    {
      "const": "ex",
      "title": "external"
    }
  ],
  "form": true,
  "form_locale": {
    "ko": {
      "label": "데이터베이스",
      "description": "데이터베이스 타입을 선택하세요",
      "internal": "내부",
      "external": "외부"
    },
    "en": {
      "label": "Database"
    }
  }
}
Internationalization Processing Example

values.schema.json Writing Example

Form Type Examples

Input

To display the defined fields in the values.schema.json file as a form on the screen, set the form field value to true.

Color mode
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "form_field": {
      "type": "string", 
      "form": true 
    },
    "hide_field": { 
      "type": "string"
    }
  }
}
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "form_field": {
      "type": "string", 
      "form": true 
    },
    "hide_field": { 
      "type": "string"
    }
  }
}
Input Processing Example

Password

Color mode
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "password_field": {
      "type": "string",
      "form": true,
      "render": "password", 
      "format": "password_confirm" 
    }
  }
}
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "password_field": {
      "type": "string",
      "form": true,
      "render": "password", 
      "format": "password_confirm" 
    }
  }
}
Password Processing Example

Checkbox

Color mode
"enabled": {
  "title": "enable persistence",
  "type": "boolean",
  "form": true
}
"enabled": {
  "title": "enable persistence",
  "type": "boolean",
  "form": true
}
Checkbox Processing Example

To display a dropdown field on the screen and specify allowed values, use the enum and oneOf properties.

enum

Used when the displayed text and stored value are the same.

Color mode
"postgres": {
  "type": "string",
  "title": "Postgres",
  "description": "choose PostgreSQL type.",
  "enum": [
    "internal",
    "external",
    "both"
  ],
  "form": true
}
"postgres": {
  "type": "string",
  "title": "Postgres",
  "description": "choose PostgreSQL type.",
  "enum": [
    "internal",
    "external",
    "both"
  ],
  "form": true
}
enum Processing Example

oneOf

Used when the displayed text and stored value are different.

Color mode
"Oneof": {
  "type": "string",
  "title": "DB",
  "description": "choose db type",
  "oneOf": [
    {
      "const": "in", 
      "title": "internal" 
    },
    {
      "const": "ex",
      "title": "external"
    }
  ],
  "form": true
}
"Oneof": {
  "type": "string",
  "title": "DB",
  "description": "choose db type",
  "oneOf": [
    {
      "const": "in", 
      "title": "internal" 
    },
    {
      "const": "ex",
      "title": "external"
    }
  ],
  "form": true
}
oneOf Processing Example

Array

Color mode
"Array": {
  "type": "array",
  "items": {
    "type": "string",
    "form": true
  },
  "form": true
}
"Array": {
  "type": "array",
  "items": {
    "type": "string",
    "form": true
  },
  "form": true
}
Array Processing Example

Object Array

Color mode
"objectArray": {
  "type": "array",
  "title": "Object Array",
  "form": true,
  "items": {
    "type": "object",
    "form": true,
    "properties": {
      "host": {
        "type": "string",
        "form": true
      },
      "path": {
        "type": "string",
        "form": true
      }
    }
  }
}
"objectArray": {
  "type": "array",
  "title": "Object Array",
  "form": true,
  "items": {
    "type": "object",
    "form": true,
    "properties": {
      "host": {
        "type": "string",
        "form": true
      },
      "path": {
        "type": "string",
        "form": true
      }
    }
  }
}
Object Array Processing Example

values.schema.json full file writing example

system-nginx

Color mode
{
    "$schema": "http://json-schema.org/schema#",
    "type": "object",
    "form": true,
    "properties": {
        "service": {
            "type": "object",
            "form": true,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Service Type",
                    "form": true,
                    "enum": ["ClusterIP", "NodePort", "LoadBalancer", "ExternalName"]
                },
                "externalPort": {
                    "type": "number",
                    "title": "Service Port",
                    "description": "HTTP port to expose at service level",
                    "form": true
                },
                "internalPort": {
                    "type": "number",
                    "title": "Container Port",
                    "description": "HTTP port to expose at container level",
                    "form": true
                }
            },
            "required": ["type", "externalPort", "internalPort"]
        },
        "ingress": {
            "type": "object",
            "form": true,
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "title": "Use Ingress",
                    "form": true
                },
                "domain": {
                    "type": ["string", "null"],
                    "format": "hostname",
                    "title": "Ingress Domain",
                    "description": "Default host for the ingress resource (required when `ingress.enabled=true`)",
                    "form": true
                }
            }
        },
        "networkPolicy": {
            "type": "object",
            "form": true,
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "title": "Use NetworkPolicy",
                    "form": true
                }
            }
        }
    }
}
{
    "$schema": "http://json-schema.org/schema#",
    "type": "object",
    "form": true,
    "properties": {
        "service": {
            "type": "object",
            "form": true,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Service Type",
                    "form": true,
                    "enum": ["ClusterIP", "NodePort", "LoadBalancer", "ExternalName"]
                },
                "externalPort": {
                    "type": "number",
                    "title": "Service Port",
                    "description": "HTTP port to expose at service level",
                    "form": true
                },
                "internalPort": {
                    "type": "number",
                    "title": "Container Port",
                    "description": "HTTP port to expose at container level",
                    "form": true
                }
            },
            "required": ["type", "externalPort", "internalPort"]
        },
        "ingress": {
            "type": "object",
            "form": true,
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "title": "Use Ingress",
                    "form": true
                },
                "domain": {
                    "type": ["string", "null"],
                    "format": "hostname",
                    "title": "Ingress Domain",
                    "description": "Default host for the ingress resource (required when `ingress.enabled=true`)",
                    "form": true
                }
            }
        },
        "networkPolicy": {
            "type": "object",
            "form": true,
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "title": "Use NetworkPolicy",
                    "form": true
                }
            }
        }
    }
}
values.schema.json full file writing example