Pular para o conteúdo principal
Version: v4.5.0

Crie os seus pacotes

Package, Components e Revision

Para você que desenvolve aplicações poder acessar e usar os componentes de Cloud, é necessário disponibilizar um pacote com esses componentes. Em Runtimes, a criação desses pacotes é abstraída em:

Dessa forma, o motor de Runtimes agrupa, versiona e disponibiliza os componentes de Cloud. Confira abaixo os passos para criar um pacote de componentes Cloud com Runtimes.

Criar Package

O Package é a estrutura que vai agrupar os seus componentes. Para criar o Package, informe nos campos "name:" o nome do pacote e no campo "description:" a descrição do conteúdo do pacote e execute o comando abaixo no seu terminal:

curl --location --request PUT 'https://runtime-engine-api.runtimes.stackspot.com/packages' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "package-name",
"description": "package-description"
}'

A requisição irá retornar o ID do Package.

Criar Revision

Uma Revision representa uma versão dos componentes do seu pacote. Cada Revision gera uma nova versão dos componentes de um Package. Para gerar uma Revision siga os passos abaixo:

Empacotar os Components

Os Components (componentes de Cloud) precisam estar em uma estrutura de diretórios que representem o seu Package para que você possa gerar o pacote de componentes. Em Runtimes os Components devem estar dentro de uma pasta /definitions e na raiz da pasta você deve criar o arquivo metadata.yaml. Para gerar o pacote, siga os passos abaixo:

Passo 1. Criar a pasta do seu pacote

Crie uma pasta com o nome informado ao criar o Package, em seguida dentro dela, crie a pasta definitions.

Passo 2. Criar o arquivo metadata.yaml

Na raiz do diretório, crie o arquivo metadata.yaml como no exemplo abaixo:

root/User/package-name/metadata.yaml
name: "package-name"                                              
version: 1.0.0
description: "package_description"
icon: https://stackspot.com/_next/static/media/logo.e8653093.svg
url: http://stackspot.com/

tags:
- stackspot
- package

deployTo:
control_plane: true
runtime_cluster: true

invisible: false
}

Passo 3. Adicionar os seus componentes na pasta definitions

Considere que você escreveu um componente de banco de dados DynamoDB "dynamodb.yaml"

Clique aqui para ver os exemplos dos componentes
root/User/package-name/definitions/dynamodb.yaml
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
name: sample-dynamodb
namespace: samples
annotations:
definition.oam.dev/description: "Sample AWS dynamoDB resource"
spec:
workload:
type: autodetects.core.oam.dev
schematic:
cue:
template: |
import("encoding/json")
output: {
apiVersion: "dynamodb.aws.crossplane.io/v1alpha1"
kind: "Table"
metadata: {
name: context.name
namespace: context.namespace
}
spec: {
forProvider: {
attributeDefinitions: [
for _, v in parameter.attributes {
attributeName: v.name
attributeType: v.type
}
]
keySchema: [
for _, v in parameter.primaryKey {
attributeName: v.name
keyType: v.type
}
]
globalSecondaryIndexes: [
for _, gs in parameter.globalSecondary {
indexName: gs.name
projection: {
projectionType: gs.projection
}
provisionedThroughput: {
readCapacityUnits: gs.rcu
writeCapacityUnits: gs.wcu
}
keySchema:[
for _, v in gsi.keySchema {
attributeName: v.name
keyType: v.type
}
]
}
]
provisionedThroughput: {
readCapacityUnits: 1
writeCapacityUnits: 1
}

billingMode: "PROVISIONED"
region: parameter.region
sseSpecification: enabled: true
}
providerConfigRef: name: "aws-provider"
}
}
outputs: {
"policy": {
apiVersion: "iam.aws.crossplane.io/v1beta1"
kind: "Policy"
metadata: name: context.name+"-policy"
spec: {
forProvider: {
name: context.name+"-policy"
document:
json.Marshal({
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Action: [
"dynamodb:UpdateTimeToLive",
"dynamodb:UpdateItem",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:GetItem",
"dynamodb:DescribeTimeToLive",
"dynamodb:DescribeTable",
"dynamodb:DeleteItem",
"dynamodb:ConditionCheckItem",
"dynamodb:BatchWriteItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
],
Resource: [
"arn:aws:dynamodb:"+parameter.region+":*:table/"+context.name,
"arn:aws:dynamodb:"+parameter.region+":*:table/"+context.name+"/*"
]
}
]
})
}
providerConfigRef: name: "aws-provider"
}
}
"attach": {
apiVersion: "iam.aws.crossplane.io/v1beta1"
kind: "RolePolicyAttachment"
metadata: name: context.name+"-role-policy-attachment"
spec: {
forProvider: {
policyArnRef: name: context.name+"-policy"
roleNameRef: name: context.appName
}
providerConfigRef: name: "aws-provider"
}
}
}
parameter: {
// +usage=region where resource will be create us-east-1 is default value
region: *"us-east-1" | string
// +usage=attribute definitions using format {name: ... type: ...}
attributes: [...{name:string,type:string}]
// +usage=keys definitions using format {name: ... type: ...}
primaryKey: [...{name:string,type:string}]
globalSecondary: [...{name:string,projection:string,wcu:int,rcu:int,keySchema:[...{name:string,type:string}]}]
}

Coloque todos os componentes dentro da pasta /definitions, e você terá a seguinte estrutura:

.
├── package-name
│   ├── definitions
│   └── dynamodb.yaml
| ├── metadata.yaml

Passo 4. Empacotar os arquivos para gerar a sua Revision

Agora é o momento de enviar o pacote para a StackSpot gerar a Revision, mas antes, os arquivos metadata.yaml e todo o conteúdo da pasta /definitions devem ser empacotados como um único arquivo para ser processado pelo Runtimes. Você deve compactar esses arquivos no formato .zip ou .tar.

Confira os exemplos a seguir para gerar um arquivo .tar ou .zip:

Dentro da pasta do pacote, execute o comando:

Zip:

zip package-name.zip definitions/*.yaml metadata.yaml

Tar:

tar cfv package-name.tar definitions/*.yaml metadata.yaml

Gerar a versão do seu pacote

info

Utilize o Package ID gerado anteriormente no lugar de "{pkgId}" da requisição abaixo.

Preencha a requisição informando o Package ID na URL da requisição e no campo --form 'package=@"{/path}"' o caminho do arquivo .tar ou .zip (Ex.: --form 'package=@"/root/User/package-name/package-name.tar"').

Após isso, execute a requisição no seu terminal:

curl --location --request PUT 'https://runtime-engine-api.runtimes.stackspot.com/packages/{pkgId}' \
--form 'package=@"/root/User/package-name/package-name.tar"'

Consultar Revision

Após publicar uma ou mais Revisions, você pode consultá-las com a API de Runtimes. Preencha na requisição os campos {packageId}/{revision} (PackageID e Revision) desejada, em seguida, execute o comando abaixo:

curl --location --request GET 'https://runtime-engine.runtime-controlplane.sbox.stackspot.com/packages/{packageId}/{revision}'

Habilitar e desabilitar Revisions

Ao criar uma Revision, por padrão ela estará habilitada para uso.

Você desabilitar e habilitar Revisions para controlar melhor o ciclo de vida do seu componente e garantir que todos os usuários usarão a versão mais atualizada de algum componente.

Preencha na requisição a seguir os campos {packageId}/{revision} (PackageID e Revision desejada), em seguida, preenchao campo --data-raw e defina na opção "enable:" os valores:

  • true para Habilitar a Revision:
curl --location --request PATCH 'https://runtime-engine.runtime-controlplane.sbox.stackspot.com/packages/{packageId}/{revision}/' \
--header 'Content-Type: application/json' \
--data-raw '{
"enabled": true
}'
  • false para Desabilitar a Revision
curl --location --request PATCH 'https://runtime-engine.runtime-controlplane.sbox.stackspot.com/packages/{revision}/{revision}/' \
--header 'Content-Type: application/json' \
--data-raw '{
"enabled": false
}'

Esta página foi útil?