This repository is used to develop storage templates to install your vendor storage solution in clusters that run in IBM Cloud Satellite. As a vendor, you can create and test your storage templates by following this README. After your template is approved, it can be deployed to clusters that run in IBM Cloud Satellite.
With IBM Cloud Satellite, you can bring your own compute infrastructure that is in your on-premises data center, at other cloud providers, or in edge networks as a Satellite Location to IBM Cloud. Then, you use the capabilities of Satellite to run IBM Cloud services on this infrastructure, and consistently deploy, manage, and control your app workloads. For more information, see the IBM documentation.
-
Email
contsto2@in.ibm.com
.- Include the subject line:
IBM Cloud Satellite Storage <storage-solution-name> Integration
*. For example:IBM Cloud Satellite Storage LocalVolume Integration
. - Provide a high level description of the storage solution with a link to the user documentation or public repository.
- Include the subject line:
-
Create a
deployment.yaml
file to deploy Kubernetes resources for the storage operator or driver in the development enviornment. Review the following exampledeployment.yaml
to deploy thelocal-volume
operator.apiVersion: v1 kind: List metadata: name: local-storage namespace: kube-system annotations: version: local-storage-45 items: - apiVersion: v1 [1] kind: Namespace metadata: name: local-storage - apiVersion: operators.coreos.com/v1alpha2 [2] kind: OperatorGroup metadata: name: local-operator-group namespace: local-storage spec: targetNamespaces: - local-storage - apiVersion: operators.coreos.com/v1alpha1 [3] kind: Subscription metadata: name: local-storage-operator namespace: local-storage spec: channel: "4.5" installPlanApproval: Automatic name: local-storage-operator source: redhat-operators sourceNamespace: openshift-marketplace - apiVersion: local.storage.openshift.io/v1 [4] kind: LocalVolume metadata: name: local-disk namespace: local-storage spec: nodeSelector: nodeSelectorTerms: - matchExpressions: - key: storage operator: In values: - "localvol" storageClassDevices: - storageClassName: "localblock-sc" volumeMode: Block devicePaths: - /dev/xvde
-
Once you get your development environment, test your deployment.
- From
IBM Cloud Console
->Satellite
->Configurations
->Create Configuration
- From
IBM Cloud Console
->Satellite
->Configurations
->Select the Configuration
->Add version and upload the deployment yaml
- From the
IBM Cloud Console
->Satellite
->Configurations
->Select the Configuration
->Create Subscription
- Verify that the resources are deployment to the cluster.
- Create a PVC and run the sniff test using the IBM Provides test bucket to make sure deployment is working as expected.
- From
-
After you have verified your template in the development environment, create an issue in this repo.. Review the formatting of the example issue. Include the following information in your issue and ensure that you remove any secrets from your files.
- Your
deployment.yaml
file. - An example
pvc.yaml
file. - An example
app.yaml
. - The output of the
oc get sc
command that displays the storage classes your deployment creates. - The output of the
oc get -n <namespace> pvc
command that displays the PVCs your deployment creates. - The output of the
oc get -n <namespace> pods
command that displays the pods your deployment creates.
- Your
-
Fork this repository.
-
Convert the
deployment.yaml
to a Satellite storage template. In your fork, make sure that you create your directory structure in the following format. For more information about the template files, review the reference table.config-templates ---<storage-provider-name> ---<storage-offering-name> ---<template-version> ---deployment.yaml ---custom-parameters.json ---storage-class-template.yaml ---storage-class-parameters.json ---metadata.json ---README.md
| storage-provider-name
| The name of storage provider. Example: ibm
, aws
, azure
, netapp
, dell
. |
| storage-offering-name
| The storage offerig name. A provider can have multiple storage offerings for IBM satallite. |
| template-version
| The template version. There can be multiple tempalte version for a storage offering |
| deployment.yaml
| A custom Kubernetes List
that includes the resources like Deployment, StatefulSet, DaemonSet, Configmap, secrets, and storage classes. Example deployment.yaml
. |
| custom-parameters.json
| This file contains the list of parameters that your deployment accepts. Include any required and optional paramters and their default values. Example customer-paramerters.json
. |
| storage-class-template.yaml
| The storage class template. This template can be used to create storage classes on a Satellite cluster. Example storage-class-template.yaml
. |
| storage-class-parameters.json
| The list of storage class parameters. User / admin can override the values from GUI. The parameter values are injected in storage class template to generate the storage class specifications to deploy on the target clusters. storage-class-parameters.json
|
| README.md
| Contains prerequisites, deployment steps, and additional information about your template. Copy and fill out the README_TEMPLATE.md. |
| metadata.json
| This file contains the metadata for GUI display. Example metadata.json
. |
In this example, the devicepath
parameter is set dynamically. In a local storage configuration, the device path of the local disks might vary from one cluster to another. To account for this in your configuration template, you can create a dynamic parameter.
-
Parameterize the device path in the template
deployment.yaml
file in the following format. The parameter namedevicepath
is passed in the format:"{{ <parameter-name> }}"
storageClassDevices: - storageClassName: "localblock-sc" volumeMode: Block devicePaths: - "{{ devicepath }}"
-
Add the parameter to your
custom-parameters.json
file in the following format. You can also include a default value for the parameter.{ "description": "A description of the parameter.", "displayname": "The display name for the Satellite UI", "name": "devicepath", "default": "/dev/sdc", "required": true, "type": "text" }
| description
| A description of the parameter. |
| displayname
| The display name of the parameter that is used in the Satellite UI. |
| name
| The name of the parameter in string format. |
| default
| Optional. The default value for the parameter. If the does not specify the parameter in their configuration, this value entered as default
is used. |
| required
| Specify true
or false
. |
| type
| Specify the parameter type. Valid parameter types are: text
, secret
, boolean
, option
, or dropdown
. |
-
Create a configuration from a template in your fork. When you run the
sat storage config create
command, specify thesource-org
andsource-branch
of your fork and any other parameters for your configuration.ibmcloud sat storage config create --name <config-name> --template-name <template-name> --template-version <template-version> --source-org <your-github-org> --source-branch <your-github-branch> [-p "<parameter>=<value>" -p "<parameter>=<value>"]
-
Assign your configuration to a cluster.
ibmcloud sat storage assignment create --name <assignment-name> --group <cluster-group> --configuration <config-name>
-
Develop test cases for verification testing. You test case should include the following:
- Steps to set up the environment or deploy any prerequisites.
- Test to verify the functionality of the Storage driver.
-
Provide a runbook for customer support. Include the following information in your support runbook.
- Support contact details.
- Link to support site or support ticket process.
- Steps to collect data for debugging.
- Known issues and steps to resolve the issue.
After you have completed testing, you can open a PR to request a review from the Satellite storage team.
-
Create a PR from your fork to the
develop
branch of this repo. -
The Satellite storage team will review your PR and request changes or approve.