Ideia impossível: scripts de automação arbitrários via imagem Docker

Automação do Discourse é muito legal e útil, mas as automações disponíveis são bastante limitadas. Muitas delas parecem hacks pontuais[1] criados para atender a casos de uso específicos de algum cliente CDCK, em vez de ferramentas de propósito geral.

É possível criar automações personalizadas, mas não há como os clientes hospedados implementarem essas automações, pelo que vejo. Além disso, elas parecem ser bastante perigosas. Tenho certeza de que poderia trabalhar com a equipe amigável do Discourse para implantar uma automação que escrevi, mas isso parece muito trabalho para ambos os lados.

Então, aqui está minha ideia:

  1. Uma interface de administrador[2] onde se poderia fornecer links para imagens OCI[3] (usando registry.example.org/imagename:tag).
  2. Uma maneira de associar uma chave de API a essa imagem (vinculada à página de administração de chaves de API existente).
  3. Uma maneira de associar um webhook a essa imagem (vinculada à página de administração de webhooks existente).
  4. Adicionar uma opção de agendamento recorrente para isso, ou (melhor, na minha opinião!) adicioná-la aos webhooks genericamente.

Um broker/dispatcher ouviria os webhooks e os encaminharia para o contêiner correspondente, fornecendo a chave de API como um segredo e a carga útil via stdin ou para uma porta http. (Imagino que muitos desses seriam “one shot” — o contêiner iniciaria, processaria um evento e sairia — mas poderia haver uma opção para os persistentes (ou, talvez, para ouvir por N segundos antes de sair).

Os contêineres seriam executados com limites razoáveis de recursos e sem armazenamento persistente ou acesso aos mesmos anexos de pool de armazenamento e outras coisas. Para sites hospedados, posso imaginar o tempo de CPU da automação como outro limite por plano, além de pageviews, e-mails e armazenamento.

A localização da API do site poderia ser fornecida como uma variável de ambiente ou outro segredo. Outro acesso à rede seria proibido por padrão, embora deva ser possível permitir conexões de saída específicas.

Pode-se, é claro, configurar tal coisa agora “por fora”, mas tê-la integrada às interfaces de administração de API e Webhooks seria muito elegante (e basicamente cuidaria totalmente do problema de gerenciar segredos). Além disso, a configuração do dispatcher/broker é um pouco complicada.


  1. Não quero dizer isso de forma negativa ↩︎

  2. provavelmente na seção de API ↩︎

  3. "Docker" ↩︎

2 curtidas

Além disso, isso teria um botão de “reimplantar” e, possivelmente, uma opção para verificar automaticamente novas versões de contêineres na implantação do Discourse ou em algum outro gatilho.