CLI
Users can use RCTL to automate the lifecycle of operations associated with Resource Blueprints/Templates, Environment Blueprints/Templates, Contexts, and Environments.
Context¶
Create Context¶
To create a config context, use the below command.
./rctl apply -f <demo-context.yaml>
Below is an example of a Context Config YAML file:
apiVersion: eaas.envmgmt.io/v1
kind: ConfigContext
metadata:
name: demo-context
project: defaultproject
description: demo-description
spec:
envs:
- key: RCTL_REST_ENDPOINT
options:
description: demo-description
override:
restrictedValues:
- qc-console.stage.rafay.dev
- console-user1-env1.dev.rafay-edge.net
- console.stage.rafay.dev
- console.rafay.dev
type: restricted
required: true
selectors:
- selector1
- selector2
value: qc-console.stage.rafay.dev
- key: RCTL_API_KEY
options:
override:
type: allowed
required: true
sensitive: true
value: rctl_api_key
- key: RCTL_API_SECRET
options:
override:
type: notallowed
sensitive: true
value: rctl_api_secret
- key: DRIVER_DEBUG
options:
override:
restrictedValues:
- "true"
- "false"
type: restricted
value: "false"
files:
- data: dmFsdWU=
name: config.json
options:
description: config file
override:
type: allowed
required: true
variables:
- name: rafay_config_file
value: config.json
valueType: text
Get Config Context¶
Use the below command to retrieve/list the Config Contexts in the current project.
./rctl get configcontext
Example
./rctl get configcontext
+--------------------+--------------------------------+---------+
| CONFIGCONTEXT NAME | MODIFIED AT | SHARING |
+--------------------+--------------------------------+---------+
| config-context-1 | 2024-06-20 09:28:40.441923 | - |
| | +0000 UTC | |
+--------------------+--------------------------------+---------+
| demo-context-1 | 2024-06-20 08:28:40.441923 | - |
| | +0000 UTC | |
+--------------------+--------------------------------+---------+
Get Specific Config Context
Use this command to retrieve a specific config context detailed information.
./rctl get configcontext <context_name>
Example
./rctl get configcontext demo-context-1
+--------------------+--------------------------------+---------+
| CONFIGCONTEXT NAME | MODIFIED AT | SHARING |
+--------------------+--------------------------------+---------+
| demo-context-1 | 2024-06-20 08:28:40.441923 | - |
| | +0000 UTC | |
+--------------------+--------------------------------+---------+
Delete Config Context¶
Use the below command to delete a specific config context
./rctl delete configcontext <demo-context>
Resource Template¶
Create Resource Template¶
To create a resource template, use the below command.
./rctl apply -f <resource-template.yaml>
Below is an example of a Resource Template YAML file:
apiVersion: eaas.envmgmt.io/v1
kind: ResourceTemplate
metadata:
description: This is a resource template
name: demo-resource-temp
project: demo-project
spec:
agents:
- name: sp-agent1
contexts:
- name: demo-context
provider: opentofu
providerOptions:
workflowHandler:
name: demo-WorkflowHandler
openTofu:
backendConfigs:
- key=tmp3
- bucket=demo-eaas1
- region=us-west-2
- encrypt=true
backendType: custom
repositoryOptions:
branch: main
directoryPath: terraform-guides/infrastructure-as-code/aws-ec2-instance
name: demo-envmgr
version: v1
Get Resource Templates¶
Use the below command to retrieve/list the resource templates in the current project.
./rctl get resourcetemplate
Example
./rctl get resourcetemplate
+--------------------------+-----------------------+------------------+--------------------------------+---------+
| RESOURCE TEMPLATE NAME | LATEST ACTIVE VERSION | RESOURCE TYPE | MODIFIED AT | SHARING |
+--------------------------+-----------------------+------------------+--------------------------------+---------+
| sample-resource-template | version-1 | ResourceTemplate | 2024-06-20 09:33:57.615714 | - |
| | | | +0000 UTC | |
+--------------------------+-----------------------+------------------+--------------------------------+---------+
| demo-resource-template | version-2 | ResourceTemplate | 2024-06-20 08:33:57.615714 | - |
| | | | +0000 UTC | |
+--------------------------+-----------------------+------------------+--------------------------------+---------+
Get a Specific Resource Template
Use this command to retrieve a specific resource template detailed information.
rctl get resourcetemplate <resourcetemp_name>
Example
./rctl get resourcetemplate sample-resource-template
+--------------------------+-----------------------+------------------+--------------------------------+---------+
| RESOURCE TEMPLATE NAME | LATEST ACTIVE VERSION | RESOURCE TYPE | MODIFIED AT | SHARING |
+--------------------------+-----------------------+------------------+--------------------------------+---------+
| sample-resource-template | version-1 | ResourceTemplate | 2024-06-20 09:33:57.615714 | - |
| | | | +0000 UTC | |
+--------------------------+-----------------------+------------------+--------------------------------+---------+
Delete Resource Template¶
Use the below command to delete a specific Resource Template
./rctl delete resourcetemplate <demo-resource-temp>
Environment Template¶
Create Environment Template¶
To create an environment template, use the below command.
./rctl apply -f <environment-template.yaml>
Below is an example of an Environment Template YAML file:
apiVersion: eaas.envmgmt.io/v1
kind: EnvironmentTemplate
metadata:
name: envmgr-1
project: defaultproject
description: This is an environment template
displayName: demo-environment-template
annotations:
eaas.envmgmt.io/category: AWS,Nvidia,AI/ML
envmgmt.io/project-limits: "2"
labels:
env: qc
release: stable
spec:
agentOverride:
required: true
restrictedAgents:
- sp-scale
- sp-agent1
type: restricted # Supported values are allowed, notallowed and restricted
agents:
- name: sp-scale
contexts:
- name: sp1
- name: sp2
hooks:
onFailure:
- agents:
- name: sp-agent1
workflowHandler:
name: sp-art
name: onfailure-workflowHandler
onFailure: continue
timeoutSeconds: 3600
type: workflowHandler
onInit:
- agents:
- name: sp-agent1
name: oninit-approval
onFailure: continue
options:
approval:
type: internal
timeoutSeconds: 3600
type: approval
- agents:
- name: sp-agent1
dependsOn:
- oninit-approval
name: oninit-container
onFailure: continue
options:
container:
arguments:
- -refresh=false
- --log-level=2
commands:
- /bin/sh
- -c
cpuLimitMilli: "512"
envvars:
DOWNLOAD_TOKEN: "token"
DOWNLOAD_URL: "url"
image: docker.io/demouser569/security:1.1
memoryLimitMB: "1024"
successCondition: |-
if #status.http.statusCode == 200 {
success: true
}
if #status.http.statusCode != 200 {
failed: true
reason: "url not reachable"
}
workingDirPath: /security/
timeoutSeconds: 3600
type: container
onSuccess:
- agents:
- name: sp-agent1
name: onsuccess-http
onFailure: continue
options:
http:
body: <h1>This is a heading</h1>
endpoint: https://httpbin.org
headers:
Content-type: application/json
X-TOKEN: 1234
method: GET
successCondition: |-
if #status.http.statusCode == 200 {
success: true
}
if #status.http.statusCode != 200 {
failed: true
reason: "url not reachable"
}
timeoutSeconds: 3600
type: http
iconURL: iconurl
readme: |-
This is an
environment template
with all options
resources:
- kind: resourcetemplate
name: sp-rt-hcp
resourceOptions:
dedicated: true
version: v1
type: dynamic
- kind: resource
name: sp-stat
type: static
- kind: environment
name: sp-env
type: static
- kind: resourcetemplate
name: sp-tf1
resourceOptions:
version: v1
type: dynamic
- dependsOn:
- name: tf1
kind: resourcetemplate
name: sp-rt-tf
resourceOptions:
version: v1
type: dynamic
variables:
- name: aws_cloud_provider_name
options:
description: Enter the cloud credential name
override:
type: allowed
required: true
value: '[sp]'
valueType: hcl
- name: aws_cloud_provider_access_key
options:
override:
type: allowed
sensitive: true
value: accesskey
valueType: text
- name: aws_cloud_provider_secret_key
options:
override:
type: notallowed
sensitive: true
value: secretkey
valueType: text
- name: eks_cluster_project
options:
override:
restrictedValues:
- sp
- defaultproject
- sp-git-sync
type: restricted
value: defaultproject
valueType: text
- name: eks_blueprint
options:
override:
type: allowed
value: '{"default"}'
valueType: json
- name: rafay_config_file
options:
override:
type: notallowed
value: config.json
valueType: text
- name: eks_cluster_name
options:
override:
type: allowed
value: $(environment.name)$
valueType: expression
version: v1
sharing:
enabled: true
projects:
- name: a1
Get Environment Template¶
Use the below command to retrieve/list the Environment Templates in the current project.
./rctl get environmenttemplate
Example
./rctl get environmenttemplate
+---------------------------+-----------------------+----------------+--------------------------------+---------+
| ENVIRONMENT TEMPLATE NAME | LATEST ACTIVE VERSION | RESOURCE COUNT | MODIFIED AT | SHARING |
+---------------------------+-----------------------+----------------+--------------------------------+---------+
| sample-test-template | v1 | 1 | 2024-06-20 04:46:31.130737 | - |
| | | | +0000 UTC | |
+---------------------------+-----------------------+----------------+--------------------------------+---------+
| demo-template | v2 | 1 | 2024-06-20 03:46:31.130737 | - |
| | | | +0000 UTC | |
+---------------------------+-----------------------+----------------+--------------------------------+---------+
Use this command to retrieve a specific environment template detailed information.
./rctl get environmenttemplate <envtemp_name>
Example
./rctl get environmenttemplate demo-template
+---------------------------+-----------------------+----------------+--------------------------------+---------+
| ENVIRONMENT TEMPLATE NAME | LATEST ACTIVE VERSION | RESOURCE COUNT | MODIFIED AT | SHARING |
+---------------------------+-----------------------+----------------+--------------------------------+---------+
| demo-template | v2 | 1 | 2024-06-20 03:46:31.130737 | - |
| | | | +0000 UTC | |
+---------------------------+-----------------------+----------------+--------------------------------+---------+
Delete Environment Template¶
Use the below command to delete a specific Environment Template
./rctl delete environmenttemplate <demo-env-temp>
Workflow Handler¶
To create a Workflow Handler, use the below command
./rctl create workflowhandler -f workflow-handler.yaml
(or)
./rctl apply -f workflow-handler.yaml
Below is an example of a Workflow Hanlder YAML file of Container type:
apiVersion: eaas.envmgmt.io/v1
kind: WorkflowHandler
metadata:
name: workflowhandler-container
project: raghav
spec:
config:
type: container
container:
arguments:
- -h
- -v
commands:
- /bin/bash
cpuLimitMilli: "200"
memoryLimitMb: "512"
envVars:
ENV_VAR1: "env1"
ENV_VAR2: "env2"
image: alpine
imagePullCredentials:
registry: ecr.example.com
username: user@example.com
password: password
files:
config.ini: cmVwb3J0aW5nLWRpc2FibGVkID0gdHJ1ZQpiaW5kLWFkZHJlc3MgPSAiOjgwODgiCgpbbWV0YV0KICBkaXIgPSAiL3Zhci9saWIvZGF0YS9tZXRhIgogIHJldGVudGlvbi1hdXRvY3JlYXRlID0gdHJ1ZQogIGxvZ2dpbmctZW5hYmxlZCA9IHRydWU=
kubeConfigOptions:
outOfCluster: true
kubeConfig: "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EY3lNREV4TXpZd05Wb1hEVE15TURjeE56RXhNell3TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUhYCmlmbFp5SSt4aCtteHNQd3RQdWV0UDhQaUNwOW9MclBTQ3VwWjZybFg5TnJZZVlqWCtxVSsxZHVwQzlpcGlzcU0KNGJvcUxqNDU5aVJFOFBuQ0JUVVZEY3RsUTFGLzUvbVFwbHQvbU5yNmxiVG94NWdmeFpsSUIyS2l2bmtxWXhQSgowUklCQVhkSS9xS3B1Z1duajNjeSt6ZDhBNXpqak9IUmdrcG5xMFVWUm1lWXh5U01hellCelZ2MjM3ZCtwemRlCkNMVldNd2t2clZKOVNoNm5yUzN0T2FyU0liOUwwVGdMSjRDRytReHg5eHIzSzRwd01jMTFwbjhxMkpobDJJUEcKUUZEaVllSGFFUTF1Tzd6RHJEWlloYWxTaHJzcnB1RU04UDJZb2lXdmIwZnoySys0WlM0aWhvYkJnUnQ4UmUwcgphY29UV3o0R1FTKzdOeVcwU2dVQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZFSUNkRGpjNlF4YlNUQlpPRUFXeEpxSGtLU1ZNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBSER2Mi85QkU2SGVoTVZCUDRPcgo4Zm15a0NtbmhBUjhHUkNOV2Zkc3BkYzVWczBuMnVCTFE4M0FoREtwc0lxZTFZNTZ3ZHBreHpucElTN0J0L2pFCnVmYzZSeFJZMUhFQzBEcS9TdklTMFRSZ01wK2U4eTR4STJSVkFIVVBsMUdpQWYrTEpQNjlyZ0doZ1dwdkk0aU0KR0V3OXVQbGM1UXZMTjRSbE1MNTUyOFJtWWtRM1FtRzBsZ0NFZHpVNDZNRE1qL3NJOWdqOTNpN0lLSDlJYUhZZQpNaUhwZTc0bFBKcStKR3BoU3NPTk8vSUk1MmZjODRnVlNjZWJvNnd2Njh3OFRESnpIVlFIVkkzeHJiaVI5V3Z4CncvSEhteUtpZjViRFlMSzRFcC92S0cwbVRXaVgxdmZyYjc0MTl4aHdONzhob0JzVXhDOU1xTmFlMlIwbE1LYkMKczhnPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n server: https://example-cluster-name.dev.example.com\n name: example-cluster-name.dev.example.com\ncontexts:\n- context:\n cluster: example-cluster-name.dev.example.com\n user: admin@example.com@example-cluster-name.dev.example.com\n name: admin@example.com@example-cluster-name.dev.example.com\ncurrent-context: admin@example.com@example-cluster-name.dev.example.com\nkind: Config\npreferences: {}\nusers:\n- name: admin@example.com@example-cluster-name.dev.example.com\n user:\n exec:\n apiVersion: client.authentication.k8s.io/v1beta1\n args:\n - token\n - -i\n - costmgmt-dashboard\n command: aws-iam-authenticator\n env:\n - name: STS_REGIONAL_ENDPOINTS\n value: regional\n - name: DEFAULT_REGION\n value: us-west\n provideClusterInfo: false\n"
kubeOptions:
labels:
email: owner@example.com
region: us-west
namespace: default
nodeSelector:
kubernetes.io/os: linux
serviceAccountName: alpine-svc
tolerations:
- effect: NoSchedule
key: region
operator: Equal
value: us-east
- effect: NoExecute
key: region
operator: Equal
value: us-east
tolerationSeconds: 3600
- effect: PreferNoSchedule
key: kubernetes.io/arch
operator: Equal
value: arm64
volumes:
- mountPath: /mnt/volume1
usePVC: false
workingDirPath: /user/ubuntu/
Below is an example of a Workflow Hanlder YAML file of HTTP type:
apiVersion: eaas.envmgmt.io/v1
kind: WorkflowHandler
metadata:
name: workflowhandler-http
project: raghav
spec:
config:
type: http
http:
endpoint: "/api/v1/object"
method: POST
body: ""
Below is an example of a Workflow Hanlder YAML file of Function type:
apiVersion: eaas.envmgmt.io/v1
kind: WorkflowHandler
metadata:
name: workflowhandler-function
project: raghav
spec:
config:
type: function
function:
language: python
source: "import os\nimport logging\n\n# Set up logging\nlogging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')\n\n# Read environment variable\nmy_env_var = os.getenv('MY_ENV_VAR', 'default_value') # Default value if the env var is not set\n\n# Log and print messages\nlogging.info('Starting the script...')\nlogging.debug(f'Read environment variable MY_ENV_VAR: {my_env_var}')\n\n# Example of using the environment variable in your code\nif my_env_var == 'some_value':\n logging.info('The environment variable has the expected value.')\nelse:\n logging.warning('The environment variable does not have the expected value.')\n\n# Print to console\nprint(f'The environment variable MY_ENV_VAR is: {my_env_var}')"
languageVersion: "3.13"
cpuLimitMilli: "50"
memoryLimitMb: "128"
maxConcurrency: 10
numReplicas: 1
skipBuild: {}
Get Workflow Handler¶
Use the below command to retrieve/list the Workflow Handlers in the current project.
./rctl get workflowhandler
Example
./rctl get workflowhandler
+-----------------------------+-----------------------+-----------------------------------------------------------------------+
| WORKFLOW HANDLER NAME | WORKFLOW HANDLER TYPE | WORKFLOW HANDLER DETAILS |
+-----------------------------+-----------------------+-----------------------------------------------------------------------+
| workflowhandler-function | function | language:"python" source:"import |
| | | os\nimport logging\n\n# Set up |
| | | logging\nlogging.basicConfig(level=logging.DEBUG, |
| | | format='%(asctime)s - %(levelname)s |
| | | - %(message)s')\n\n# Read environment |
| | | variable\nmy_env_var = os.getenv('MY_ENV_VAR', |
| | | 'default_value') # Default value if the |
| | | env var is not set\n\n# Log and print |
| | | messages\nlogging.info('Starting the |
| | | script...')\nlogging.debug(f'Read environment |
| | | variable MY_ENV_VAR: {my_env_var}')\n\n# |
| | | Example of using the environment variable in |
| | | your code\nif my_env_var == 'some_value':\n |
| | | logging.info('The environment variable |
| | | has the expected value.')\nelse:\n |
| | | logging.warning('The environment variable |
| | | does not have the expected value.')\n\n# |
| | | Print to console\nprint(f'The environment |
| | | variable MY_ENV_VAR is: {my_env_var}')" |
| | | languageVersion:"3.13" cpuLimitMilli:"50" |
| | | memoryLimitMb:"128" skipBuild:{} |
| | | maxConcurrency:10 numReplicas:1 |
+-----------------------------+-----------------------+-----------------------------------------------------------------------+
| workflowhandler-http | http | endpoint:"/api/v1/upload" |
| | | method:"POST" |
| | | headers:{key:"API-KEY" |
| | | value:""} |
+-----------------------------+-----------------------+-----------------------------------------------------------------------+
| workflowhandler-container | container | image:"alpine" arguments:"-h" arguments:"-v" |
| | | commands:"/bin/bash" envVars:{key:"ENV_VAR1" |
| | | value:""} envVars:{key:"ENV_VAR2" |
| | | value:""} files:{key:"config.ini" |
| | | value:""} workingDirPath:"/user/ubuntu/" |
| | | cpuLimitMilli:"200" memoryLimitMb:"512" |
| | | kubeConfigOptions:{outOfCluster:true} |
| | | kubeOptions:{namespace:"default" |
| | | serviceAccountName:"alpine-svc" |
| | | labels:{key:"email" value:"owner@example.com"} |
| | | labels:{key:"region" value:"us-west"} |
| | | nodeSelector:{key:"kubernetes.io/os" |
| | | value:"linux"} tolerations:{key:"region" |
| | | operator:"Equal" value:"us-east" |
| | | effect:"NoSchedule"} tolerations:{key:"region" |
| | | operator:"Equal" value:"us-east" |
| | | effect:"NoExecute" tolerationSeconds:3600} |
| | | tolerations:{key:"kubernetes.io/arch" |
| | | operator:"Equal" value:"arm64" |
| | | effect:"PreferNoSchedule"}} |
| | | imagePullCredentials:{registry:"ecr.example.com" |
| | | username:"user@example.com"} |
| | | volumes:{usePVC:{} mountPath:"/mnt/volume1"} |
+-----------------------------+-----------------------+-----------------------------------------------------------------------+
Get a Specific Workflow Handler
Use this command to retrieve details of a specific workflow handler.
./ rctl get workflowhandler <workflowhandler-name>
Example
./ rctl get workflowhandler workflowhandler-http
+-----------------------------+-----------------------+-----------------------------------------------------------------------+
| WORKFLOW HANDLER NAME | WORKFLOW HANDLER TYPE | WORKFLOW HANDLER DETAILS |
+-----------------------------+-----------------------+-----------------------------------------------------------------------+
| workflowhandler-http | http | endpoint:"/api/v1/upload" |
| | | method:"POST" |
| | | headers:{key:"API-KEY" |
| | | value:""} |
+-----------------------------+-----------------------+-----------------------------------------------------------------------+
Delete Workflow Handler¶
To delete a workflow handler, use the command below
./rctl delete workflowhandler <workflowhandler-name>
Environment¶
Create Environment¶
To create an environment, use the below command
./rctl apply -f environment.yaml
Below is an example of an Environment YAML file:
apiVersion: eaas.envmgmt.io/v1
kind: Environment
metadata:
description: This is an environment
name: demo-env
project: defaultproject
spec:
template:
name: demo-env1
version: v1
Get Environment¶
Use the below command to retrieve/list the Environments in the current project.
./rctl get environment
Example
./rctl get environment
+----------------------------+----------------------+------------------+----------+
| ENVIRONMENT NAME | ENVIRONMENT TEMPLATE | TEMPLATE VERSION | STATUS |
+----------------------------+----------------------+------------------+----------+
| eks-em-testing | sample-test-template | v5 | StatusOK |
+----------------------------+----------------------+------------------+----------+
| demo-env | demo-template | v4 | StatusOK |
+----------------------------+----------------------+------------------+----------+
Get a Specific Environment
Use this command to retrieve an environment detailed information.
./rctl get environment <env_name>
Example
./rctl get environment eks-em-testing
+----------------------------+----------------------+------------------+----------+
| ENVIRONMENT NAME | ENVIRONMENT TEMPLATE | TEMPLATE VERSION | STATUS |
+----------------------------+----------------------+------------------+----------+
| eks-em-testing | sample-test-template | v5 | StatusOK |
+----------------------------+----------------------+------------------+----------+
Deploy Environment¶
To deploy an environment created using the template(s) and other configurations, use the command below
./rctl deploy environment <demo-env>
Destroy Environment¶
Use the command below to remove the environment resources; however, this will not delete the environment
./rctl destroy environment demo-env
Delete Environment¶
To delete an environment completely, use the command below
./rctl delete environment demo-env