# Como trabalhar com variáveis no Orchestrator

import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'

Durante o processo de implantação no [Orchestrator](/pt-br/documentacao/produtos/deploy/orchestrator/), você pode trabalhar com variáveis. Uma variável pode ser definida em [edge services](#variaveis-em-edge-services) e [edge nodes](#variaveis-em-edge-nodes).

Você pode criar variáveis de edge node e de edge services usando:

- [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/)
- [API da Azion](https://api.azion.com/)

:::note
A prioridade é sempre a variável do edge node. Portanto, se você tiver uma variável configurada em um edge service e a mesma variável configurada em um edge node, a do edge node irá substituir a configurada no edge service.
:::

---

## Variáveis em edge services

<Tabs client:visible>
    <Fragment slot="tab.console">Console</Fragment>
    <Fragment slot="tab.api">API</Fragment>

<Fragment slot="panel.console">
1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/).
2. No canto superior esquerdo da página, abra o **Products menu**, identificado pelas três linhas horizontais; abaixo do item **Edge Libraries**, selecione **Edge Services**.
3. Selecione o [edge service](/pt-br/documentacao/produtos/guias/deploy/criar-edge-service/) ao qual você deseja adicionar uma variável.
4. Na seção **Variables**, adicione a seguinte variável:

<Code lang="bash" code={`
name=azion
`} />

5. Clique no botão **Save**.

Agora, você criou uma variável relacionada a um serviço específico. Você precisa acessar essa variável através de um recurso.

1. Navegue até a aba **Resources** .
2. Clique em **+ Resource** ou selecione o recurso no qual você deseja usar a variável.
3. Insira o **Path** do arquivo do recurso.
4. Escolha o tipo **Text**.
5. Adicione o seguinte conteúdo ao bloco **Content**:

```bash
Estou usando {{name}} Orchestrator
```

6. Clique no botão **Save**.
</Fragment>

<Fragment slot="panel.api">
1. Execute a seguinte requisição `GET` no seu terminal, substituindo [TOKEN VALUE] pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e recupere o ID do edge service ao qual você deseja adicionar uma variável:

<Code lang="bash" code={`
curl --location 'https://api.azionapi.net/edge_services/' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]'
`} />

2. Crie uma variável relacionada ao serviço. Execute a seguinte requisição `PATCH` no seu terminal, substituindo `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), `:id` pelo ID do service e informe o nome e o valor da variável:

```bash 
curl --location --request PATCH 'https://api.azionapi.net/edge_services/:id' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/json' \
--data '{
  "active": true,
  "name": "service",
  "variables": [
    {
      "name": "name",
      "value": "azion"
    }
  ]
}'
```

Agora, você criou uma variável relacionada a um serviço específico. Você precisa acessar essa variável através de um recurso.

3. Execute a seguinte requisição `POST` no seu terminal:

```bash 
curl --location 'https://api.azionapi.net/edge_services/:id/resources' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/json' \
--data '{
  "content_type": "Text",
  "name": "/resource",
  "content": "Estou usando {{name}} Orchestrator"
}'
```

Substitua `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), `:id` pelo ID do edge service e informe os seguintes parâmetros no corpo da requisição:

| Propriedade | Descrição | Obrigatório |
| - | - | - |
| content_type | Tipo de conteúdo do recurso sendo criado | Sim |
| name | Nome do recurso sendo criado | Sim |
| content | Conteúdo que define ações realizadas quando o estado do recurso muda no edge node | Sim |

:::tip
Confira a [documentação da API da Azion](https://api.azion.com/) e a [especificação OpenAPI](https://github.com/aziontech/azionapi-openapi/) para saber mais sobre todos os recursos disponíveis via API.
:::
</Fragment>

</Tabs>

---

## Variáveis em edge nodes

<Tabs client:visible>
    <Fragment slot="tab.console">Console</Fragment>
    <Fragment slot="tab.api">API</Fragment>

<Fragment slot="panel.console">
1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/).
2. No canto superior esquerdo da página, abra o **Products menu**, identificado pelas três linhas horizontais e selecione **Edge Nodes**.
3. Selecione o edge node ao qual você deseja adicionar uma variável.
4. Vá para a aba **Services**.
5. Escolha o [serviço](/pt-br/documentacao/produtos/guias/deploy/criar-edge-service/) ao qual você deseja aplicar a variável.
6. Adicione o seguinte conteúdo ao bloco de variáveis:

<Code lang="bash" code={`
name=azion2
`} />

7. Clique no botão **Save**.

Agora, você criou uma variável relacionada a um node específico. Você precisa acessar essa variável através de um recurso.

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Edge Services**.
2. Selecione o serviço relacionado ao recurso.
3. Clique em **+ Resource**.
4. Insira o **Path** do arquivo do recurso.
5. Escolha o tipo **Text**.
6. Adicione o seguinte conteúdo ao bloco de conteúdo:

```bash
Estou usando {{name}} Orchestrator
```

7.Clique no botão **Save**.
</Fragment>

<Fragment slot="panel.api">
1. Execute a seguinte requisição `GET` no seu terminal, substituindo [TOKEN VALUE] por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e recupere o ID do edge node ao qual você deseja adicionar uma variável:

<Code lang="bash" code={`
curl --location 'https://api.azionapi.net/edge_nodes/' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]'
`} />

2. Execute a seguinte requisição `GET` no seu terminal, substituindo [TOKEN VALUE] por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e `:id` pelo ID do edge node, e recupere o ID da relação entre o edge node e o serviço escolhido:

```bash 
curl --location 'https://api.azionapi.net/edge_nodes/:id/services' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]'
``` 

3. Execute a seguinte requisição `PATCH` no seu terminal:

```bash
curl --location --request PATCH 'https://api.azionapi.net/edge_nodes/:node_id/services/:bind_id' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]' \
--data '{
  "variables": [
    {
      "name": "name",
      "value": "azion2"
    }
  ]
}'
``` 

Substitua [TOKEN VALUE] por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), `:id` pelo ID do edge node e `:bind_id` pelo ID da relação recuperada na etapa 2, informando as seguintes propriedades no corpo da requisição:

| Propriedade | Descrição | Obrigatório |
| - | - | - |
| variables | Variáveis a serem substituídas durante o processamento no edge node. | Não  |

Agora, suas variáveis estão criadas e prontas para serem acessadas durante a execução em seus nodes relacionados ao serviço específico. É relevante enfatizar que, quando você tem uma variável com o mesmo nome configurada em um serviço e em um node, o valor armazenado no node prevalecerá, por exemplo:

Variável configurada no edge service:

```bash 
name=azion 
```

Variável configurada no edge node:

```bash 
name=azion2
```

Quando o recurso é acessado, o valor da variável será azion2 em vez de azion.

Para acessar o recurso no edge node, você precisa acessar o arquivo. Você pode acessá-lo através do caminho do arquivo que você informou durante a criação do recurso.

Nome do recurso:

```bash 
/txt/test
```

Para acessá-lo:

```bash
nano /txt/test
``` 

:::tip
Confira a [documentação da API da Azion](https://api.azion.com/) e a [especificação OpenAPI](https://github.com/aziontech/azionapi-openapi/) para saber mais sobre todos os recursos disponíveis via API.
:::
</Fragment>

</Tabs>