# Como rodar scripts nos edge nodes

import DocButton from '~/components/webkit/DocButton.vue';
import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'

Para conseguir orquestrar serviços em seu dispositivo, é necessário configurar todos os recursos necessários para instalar, desinstalar e recarregar seus serviços.

Este guia apresenta como instalar a [Azion CLI](/pt-br/documentacao/produtos/azion-cli/visao-geral/) em seus edge nodes por meio de um recurso do tipo `Shell Script` configurado em um edge service específico.

---

## Pré-requisitos

- Um edge node com o **Orchestrator Agent** instalado e autorizado.
- O gerenciador de pacotes Dpkg instalado neste edge node.

<DocButton href="/pt-br/documentacao/produtos/guias/deploy/instalar-orchestrator-agent/" label="ir para como instalar o agente de orquestração de borda" kind="secondary" target="_blank" size="medium" />
<DocButton href="/pt-br/documentacao/produtos/guias/deploy/autorizar-edge-node/" label="ir para como autorizar um edge node" kind="secondary" target="_blank" size="medium" />

:::note
Você pode encontrar os links para download das respectivas arquiteturas na [página de lançamentos da Azion CLI](https://github.com/aziontech/azion/releases). Ao acessar a página, você deve escolher o link de download correto com base na arquitetura do seu dispositivo (edge node) e substituir a variável `BINARY_URL` no script pela URL correta.
:::

---

## Crie um edge service

<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**, representado por três linhas horizontais, e em seguida selecione **Edge Services**.
3. Clique no botão **+ Service**.
4. Nomeie este serviço como `Instalação Azion CLI`.
5. Insira as varáveis e valores para o recurso, se necessário.
6. Defina o status como **Active**.
7. Clique no botão **Save**.
</Fragment>

<Fragment slot="panel.api">
1. Execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e informando o nome do serviço a ser criado:

<Code lang="bash" code={`
curl --location 'https://api.azionapi.net/edge_services/' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/json' \
--data '{
  "name": "Instalação do Azion CLI"
}'
`} />

2. Guarde o ID do edge service que você acabou de criar. Você pode acessá-lo no corpo da resposta, por exemplo:

```json
{
    "id": 1196,
    "name": "Instalação do Azion CLI",
    "updated_at": "2024-01-18T17:24:33Z",
    "last_editor": "xxxxx",
    "active": false,
    "bound_nodes": 0,
    "permissions": [
        "read",
        "write"
    ]
}
``` 

:::note
Ao executar a requisição no terminal, a resposta pode não retornar formatada como apresentado no exemplo acima.
:::

3. Execute a seguinte requisição `PATCH` no seu terminal para definir o serviço como ativo, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e `:id` pelo ID do edge service:

```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": "Instalação do Azion CLI",
  "variables": [
    {
      "name": "string",
      "value": "string"
    }
  ]
}'
``` 

:::note
Se um edge service não estiver definido como ativo, ele não estará disponível para vinculação a um edge node.
:::
</Fragment>

</Tabs>

---

## Crie um recurso

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

<Fragment slot="panel.console">
1. Dentro do serviço que você acabou de criar, chamado `Instalação Azion CLI` vá para a aba **Resources**.
2. Clique em **+ Resource**.
3. Insira `/scripts/install-cli` no campo **Filepath**.
4. Escolha o tipo **Shell Script**.
5. Escolha o *trigger* **Install**.
6. Adicione o seguinte conteúdo ao bloco **Content**: 

<Code lang="bash" code={`
#!/bin/bash

# Define a URL do binário para download
BINARY_URL="https://github.com/aziontech/azion/releases/download/1.10.2/azion_1.10.2_linux_arm64.deb"

# Baixa o binário
wget $BINARY_URL -O /tmp/azion.deb

# Instala o binário
# Isso pressupõe que você tem o dpkg instalado no seu sistema
sudo dpkg -i /tmp/azion.deb

# Limpa o binário baixado
rm /tmp/azion.deb

echo "Instalação concluída com sucesso"
`} />

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

Este script instalará o binário `azion` no seguinte caminho: `/usr/local/bin`
</Fragment>

<Fragment slot="panel.api">
1. Execute a seguinte requisição `POST` no seu terminal:

<Code lang="bash" code={`
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": "Shell Script",
  "name": "/scripts/install-cli/",
  "content": "#!/bin/bash\n\n# Define a URL do binário para download\nBINARY_URL=\"https://github.com/aziontech/azion/releases/download/1.10.2/azion_1.10.2_linux_arm64.deb\"\n\n# Baixa o binário\nwget $BINARY_URL -O /tmp/azion.deb\n\n# Instala o binário\n# Isso pressupõe que você tem o dpkg instalado no seu sistema\nsudo dpkg -i /tmp/azion.deb\n\n# Limpa o binário baixado\nrm /tmp/azion.deb\n\necho \"Instalação concluída com sucesso\""
}'
`} />

Substitua [TOKEN VALUE] pelo 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 a ser criado | Sim |
| `name` | Nome do recurso a ser criado | Sim |
| `content` | Conteúdo que define as ações realizadas quando o estado do recurso muda no edge node | Sim |
</Fragment>

</Tabs>

---

## Vincule um edge service a um edge node

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

<Fragment slot="panel.console">
1. No canto superior esquerdo da página, abra o **Products menu**, representado por três linhas horizontais, e em seguida selecione **Edge Services**.
2. Selecione o edge node ao qual você deseja vincular um serviço.
3. Vá para a guia **Services** e clique no botão **+ Service**.
4. Escolha o serviço `Instalação Azion CLI` que você criou.
5. 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 node ao qual deseja vincular a um edge service:

<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 `POST` no seu terminal: 

```bash
curl --location 'https://api.azionapi.net/edge_nodes/:id/services' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/json' \
--data '{
  "service_id": :id,
  "variables": [
    {
      "name": "string",
      "value": "string"
    }
  ]
}'
```

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

| Propriedade | Descrição | Obrigatório | 
| - | - | - | 
| `service_id` | ID do edge service a ser vinculado ao edge node | Sim |
| `variables` | Variáveis a serem substituídas durante o processamento no edge node| Não |
</Fragment>

</Tabs>

---

## Acesse a Azion CLI

Após este processo, em seu edge node, acesse a pasta:

```bash
cd /usr/local/bin
```

E execute:

```bash
./azion -h 
```

A saída será semelhante a:

```bash 
Azion CLI 1.10.2

DESCRIPTION
  The Azion Command Line Interface is a unified tool to manage your Azion projects and resources

SYNOPSIS
  azion <command> <subcommand> [flags]

EXAMPLES
  $ azion
  $ azion -t azionb43a9554776zeg05b11cb1declkbabcc9la
  $ azion --debug
  $ azion -h
...
```

:::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.
:::