Create or update a resource specification injection (RSI)
patch.
- Required role
-
Instance administrator An instance administrator can
run this command.
Extended description
You can use resource specification injection (RSI) to create
patches to customize the pods in your IBM® Software Hub
environment.
Important: Create RSI patches only if you are an advanced user on Red Hat®
OpenShift® Container Platform. It is your responsibility to ensure
that any patches that you apply to not introduce issues to your IBM Software Hub installation.
You can either:
- Update the specified pods when you create an RSI patch
- Use the
apply-rsi-patches command to apply the active
RSI patches at the same time. For details, see apply-rsi-patches.
When you apply an RSI patch, the RSI webhook restarts any pods with the
appropriate pod selector labels that meet either of the following criteria:
- Pods with outdated patches
- Pods that have not yet been patched
RSI patches are applied only to pods that are associated with Kubernetes
Deployments, StatefulSets, ReplicaSets, ReplicaControllers, Jobs and
CronJobs.
Tip: If you plan to apply multiple RSI patches, it is less disruptive to apply the RSI
patches in a batch. For details, see
manage
apply-rsi-patches
If you are creating a new patch, specify the following options:
--cpd_instance_ns
--description
--patch_name
--patch_spec
--patch_type
--include_labels or --select_all_pods
--skip_apply
--spec_format
--state
If you are updating an existing patch, the options that you specify depend on what you are trying
to do. At a minimum, you must specify:
--cpd_instance_ns
--patch_name
You can change the following aspects of an existing patch:
- --description
- You can update the description for the patch.
--patch_spec
- You can change the contents of the JSON file that defines the patch.
--state
- You can make the patch active or inactive.
- labels
- If you use either of the following options, you can change the pods that the patch applies to:
--include_labels
--exclude_labels
Restriction: You cannot switch between the --include_labels option and the --select_all_pods option.
Syntax
cpd-cli manage create-rsi-patch \
--cpd_instance_ns=<project-name> \
--patch_name=<patch-name> \
[--patch_type=rsi_pod_env_var|rsi_pod_label|rsi_pod_annotation|rsi_pod_spec|rsi_pod_init_container|rsi_pod_side_car_container] \
[--description=<description>] \
[--patch_spec=/tmp/work/rsi/<patch-spec-JSON-file>] \
[--spec_format=json|json-merge|set-env] \
[--include_labels=<comma-separated-key-value-pairs-representing-pod-labels>] \
[--exclude_labels=<comma-separated-key-value-pairs-representing-pod-labels>] \
[--select_all_pods=true|false] \
[--state=active|inactive] \
[--skip_apply=true|false] \
[-vv][-vv][-vvv]
Arguments
The create-rsi-patch command has no arguments.
Options
Table 1: Command options
| Option |
Description |
--cpd_instance_ns |
The project (namespace) where you want to create or update the patch.
If there are any projects tethered to this project, the patch will also apply to the tethered
projects.
- Status
- Required.
- Syntax
--cpd_instance_ns=<project-name>
- Default value
- No default. User-defined.
- Valid values
- The name of the project where you want to create the RSI feature. IBM Software Hub must be installed in this project.
|
--description |
The description for the
patch.
Use the description to describe the purpose and intent of the patch.
- Status
- Optional.
- Syntax
--description=<description>
- Default value
- No default.
- Valid values
- A description.
|
--exclude_labels |
Specify a subset of pods to skip based on the labels on the
pods. If you specify multiple key-value pairs, the patch
will skip any pods that have all of the specified labels.
- Status
- Optional.
Use this option in combination with the --include_labels option or the --select_all_pods option.
- Syntax
--exclude_labels=<comma-separated-key-value-pairs-representing-pod-labels>
- Default value
- No default.
- Valid values
- Specify valid pod labels as key-value pairs. Separate the key and the value with a colon.
Separate multiple key-value pairs with a comma. For example:
--exclude_labels=key1:value1,key2:value2
|
--include_labels |
Specify which pods the patch will apply to based on the labels on the
pods. If you specify multiple key-value pairs, the patch will
be applied only to pods that have all of the specified labels. For example, if you specify
app.kubernetes.io/component:zen-core,component:zen-core, the patch will apply to
any pods with both of these labels, even if they have additional labels.
- Status
- Optional.
If you omit this option, you must specify the --select_all_pods option.
- Syntax
--include_labels=<comma-separated-key-value-pairs-representing-pod-labels>
- Default value
- No default.
- Valid values
- Specify valid pod labels as key-value pairs. Separate the key and the value with a colon.
Separate multiple key-value pairs with a comma. For example:
--include_labels=key1:value1,key2:value2
|
--patch_name |
The name of the patch to create or
update.
- Status
- Required.
- Syntax
--patch_name=<patch-name>
- Default value
- No default. User defined.
- Valid values
- The name must adhere to the following rules:
- Be 50 characters or less.
- Contain only lowercase alphanumeric characters, hyphen (-), or period (.).
- Start and end with an alphanumeric character.
|
--patch_spec |
The JSON file that contains the
patch.
Save the file in the cpd-cli-workspace/olm-utils-workspace/work/rsi/ directory.
- Status
- Required to create a patch.
- Syntax
--patch_spec=/tmp/work/rsi/<patch-spec-JSON-file>
- Default value
- No default.
- Valid values
- Specify the name of the JSON file in the
cpd-cli-workspace/olm-utils-workspace/work/rsi/ with the
format: /tmp/work/rsi/<file-name.json>
|
--patch_type |
The type of patch to
create.
- Status
- Required to create a patch.
- Syntax
--patch_type=rsi_pod_env_var|rsi_pod_label|rsi_pod_annotation|
rsi_pod_spec|rsi_pod_init_container| rsi_pod_side_car_container
- Default value
- No default.
- Valid values
-
rsi_pod_env_var
- Specify this option to add environment variables to pod containers.
rsi_pod_label
- Specify this option to add labels to pods.
rsi_pod_annotation
- Specify this option to add annotations to pods.
rsi_pod_spec
- Specify this option to add fields to the
spec section of pods.
rsi_pod_init_container
- Specify this option to add an
init container to pods.
rsi_pod_side_car_container
- Specify this option to add a
sidecar container to pods.
|
--select_all_pods |
Specify whether you want to apply the patch to all of the pods in the
operands project and any tethered projects for the
instance.
- Status
- Optional.
If you omit this option, you must specify the --include_labels option.
- Syntax
--select_all_pods=true|false
- Default value
falseIf you omit this option, the
default value is used.
- Valid values
-
false
- Do not apply the patch to all of the pods in operands project and any projects that are tethered
to the operands project.
true
- Apply the patch to all of the pods in operands project and any projects that are tethered to the
operands project.
|
--skip_apply |
Specify whether the RSI webhook waits to apply the patch or whether
it applies the patch immediately.
- Status
- Optional.
- Syntax
--skip_apply=true|false
- Default value
falseIf you omit this option, the default
value is used.
- Valid values
-
false
- Force the webhook to apply the patch immediately.
true
- Wait for the patch to be applied. The patch will be applied the next time the RSI CronJob runs or when you run the
apply-rsi-patches command, whichever occurs first.
|
--spec_format |
The format of the patch spec JSON
file.
- Status
- Optional.
- Syntax
--spec_format=json|json-merge|set-env
- Default value
json-mergeIf you omit this option, the default
value is used.
- Valid values
-
json
- Specify
json if the --patch_spec JSON file contains a JSON array of patch operations that
should be applied in sequence. For
example:[{"op":"add","path":"/metadata/labels/label-1","value":"value-1"}]
Ensure
that json patches follow the JavaScript Object
Notation (JSON) Patch (RFC 6902) standard.
json-merge
- Specify
json-merge if the --patch_spec JSON file contains a JSON pod spec path. For
example:{"metadata":{"labels":{"label-1": "value-1"}}}
Ensure that
json patches follow the JSON Merge Patch (RFC
7386) standard.
set-env
- Specify
set-env if the --patch_spec JSON file contains a JSON array of key-value pairs. For
example:[{"name": "env-var-1","value": "env-var-value-1"}]
Restriction: This option applies only if you are creating an rsi_pod_env_var patch.
|
--state |
Specify whether the patch can be applied by the RSI
webhook.
- Status
- Optional.
- Syntax
--state=active|inactive
- Default value
activeIf you omit this option, the default
value is used.
- Valid values
-
active
- Specify
active to enable the webhook to apply the
patch.
inactive
- Specify
inactive to prevent the webhook from
applying the patch.
|
|
-v
-vv
-vvv
|
Display verbose output. Options are listed from least verbose to the most verbose.
- Status
- Optional.
- Syntax
-
- Verbose output
-v
- Very verbose output
-vv
- Most verbose output
-vvv
- Default value
- Not applicable.
- Valid values
- Not applicable.
|
Examples
Note: The following example uses the recommended installation environment variables.
It is strongly recommended that you use a script to create
environment variables with the correct values for your
environment. For details, see Setting up installation environment variables.
- Create an environment variable patch that is applied to
zen-core pods
-
cpd-cli manage create-rsi-patch \
--cpd_instance_ns=${PROJECT_CPD_INST_OPERANDS} \
--patch_type=rsi_pod_env_var \
--patch_name=sample-env-var-patch \
--patch_spec=/temp/work/rsi/zen-core-env-var.json \
--spec_format=json \
--include_labels=app.kubernetes.io/component:zen-core,component:zen-core \
--state=active
- Update an existing patch to make it inactive
-
cpd-cli manage create-rsi-patch \
--cpd_instance_ns=${PROJECT_CPD_INST_OPERANDS} \
--patch_name=my-pod-annotation-patch \
--state=inactive