Olá Rohit! Você está no caminho certo. Eis como costumo estruturar scripts do Genesys Cloud com Terraform para manter portabilidade e automação:
1) Formatos: .script (UI) vs .json (Terraform)
-
O export da UI entrega um arquivo com extensão .script, mas o conteúdo é JSON puro.
-
Para usar no Terraform, basta salvar o mesmo conteúdo como .json (por exemplo, renomear para meu_script.script.json).
-
Dica: garanta que o arquivo esteja em UTF-8 sem BOM.
2) Usando o arquivo exportado no recurso genesyscloud_script
Exemplo funcional (similar ao que já foi mencionado):
Pontos importantes:
-
filepath aponta para o arquivo JSON do script.
-
file_content_hash com filesha256(...) garante que mudanças no arquivo acionem atualização.
-
substitutions injeta valores nos placeholders do arquivo (ex.: {{queue_id_sales}}).
3) Tornando o script "genérico" sem IDs fixos
O segredo é trocar IDs por placeholders no arquivo exportado da UI. Exemplos práticos:
No JSON do script (arquivo):
No Terraform:
Assim você evita IDs "hard-coded" e mantém portabilidade: em cada ambiente, muda apenas *.tfvars com os nomes dos recursos e o Terraform resolve os IDs dinamicamente via data sources.
4) "Como exportar da UI e usar no Terraform"
Passo a passo objetivo:
-
Na UI, exporte o script (extensão .script).
-
Renomeie para algo como meu_script.script.json.
-
Abra o arquivo e substitua IDs fixos por placeholders {{...}} onde for necessário (queueId, divisionId, datatableId, etc.).
-
Referencie esse arquivo no recurso genesyscloud_script e preencha os placeholders via substitutions, usando:
-
data "genesyscloud_*" para resolver IDs por nome, ou
-
variáveis var.* para valores específicos por ambiente.
5) Uso de ID nos exports
-
Exports da UI trazem vários IDs. Troque por {{placeholders}} e resolva no Terraform com:
-
data "genesyscloud_routing_queue" por nome de fila
-
data "genesyscloud_auth_division" por nome de divisão
-
data "genesyscloud_*" equivalentes para outros recursos
-
Se algum recurso não existe no ambiente de destino, crie-o com Terraform e depois referencie resource.*.id na substitution.
6) Portabilidade entre ambientes
7) Deployment cycle recomendado
-
Fonte única do JSON do script em repositório (padrão *.script.json).
-
PR revisa mudanças no JSON e placeholders.
-
Pipeline executa terraform plan e apply com o -var-file correto.
-
file_content_hash assegura atualização quando o conteúdo muda.
-
Monitorar drift (se alguém editar o script na UI, o plan acusará divergência).
8) E se já existe um script em produção?
-
Use terraform import genesyscloud_script.<nome> <script_id> para trazer ao estado do Terraform.
-
Em seguida, alinhe o arquivo e as substituições até o plan ficar limpo.
------------------------------
Fernando Sotto dos Santos
Consultor Grupo Casas Bahia
------------------------------