AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1005761
Accepted
Juan Jimenez
Juan Jimenez
Asked: 2020-03-06 12:54:42 +0800 CST2020-03-06 12:54:42 +0800 CST 2020-03-06 12:54:42 +0800 CST

O que significa "Erro: Ciclo". significa no Terraform?

  • 772

Os documentos do Terraform, por algum motivo estranho, não explicam o que significa "Error: Cycle". Procurei em todos os lugares, mas não há menção disso nos documentos oficiais. (Acontece que é um termo bem conhecido, uma dependência circular, que alguém aparentemente renomeou pensando que faria parecer legal ...)

terraform
  • 1 1 respostas
  • 45193 Views

1 respostas

  • Voted
  1. Best Answer
    Martin Atkins
    2020-03-06T17:09:57+08:002020-03-06T17:09:57+08:00

    Como parte do trabalho do Terraform, ele analisa as dependências entre seus resourceblocos, datablocos e outras construções de configuração para determinar uma ordem adequada para processá-los para que os dados de entrada necessários estejam disponíveis.

    Por exemplo, considere a seguinte configuração simples planejada:

    resource "null_resource" "foo" {
    }
    
    resource "null_resource" "bar" {
      triggers = {
        foo = null_resource.foo.id
      }
    }
    

    O Terraform analisará o que foi dito acima e perceberá que a configuração de null_resource.barcontém uma referência a null_resource.fooe, portanto, as operações relacionadas a null_resource.foodevem ocorrer antes null_resource.bar. Podemos visualizar isso como um gráfico onde uma seta representa "deve acontecer depois" ou "depende de":

    uma caixa para null_resource.foo e uma caixa para null_resource.bar, com uma seta apontando do último para o primeiro

    • As operações para null_resource.bar devem ocorrer após as operações para null_resource.foo.

    Considere agora o que acontece se modificarmos essa configuração assim:

    resource "null_resource" "foo" {
      triggers = {
        bar = null_resource.bar.id
      }
    }
    
    resource "null_resource" "bar" {
      triggers = {
        foo = null_resource.foo.id
      }
    }
    

    Agora null_resource.footambém se refere a null_resource.bar. Existem agora duas relações "deve acontecer depois" implícitas nessa configuração:

    uma caixa para null_resource.foo e uma caixa para null_resource.bar, com uma seta apontando do último para o primeiro, com setas apontando em ambas as direções entre eles

    • As operações para null_resource.bar devem ocorrer após as operações para null_resource.foo.
    • As operações para null_resource.foo devem ocorrer após as operações para null_resource.bar.

    As duas declarações acima se contradizem: null_resource.barnão podem ser processadas antes e depois de null_resource.foo. O Terraform responderá a essa situação relatando um ciclo de dependência, usando a mensagem de erro que você viu:

    Cycle: null_resource.foo, null_resource.bar
    

    Quando o Terraform retorna esse erro, a solução é remover pelo menos uma das setas "deve acontecer depois" (dependências) da configuração para que não seja mais contraditória. Sem ver sua configuração, não posso sugerir qual alteração específica pode alcançar isso no seu caso, mas é provável que em algum lugar em sua configuração você tenha dois recursos mutuamente dependentes como este, ou talvez um recurso referente a si mesmo.


    Se você estiver avistado, dependendo de quão complicada seja sua configuração, pode ser útil pedir ao Terraform para produzir um gráfico semelhante aos que incluí acima nesta resposta, mas destacando os ciclos. Para fazer isso, você pode usar o terraform graphcomando , assim:

    terraform graph -draw-cycles
    

    A saída deste comando é uma descrição do gráfico no formato aceito pelo Graphviz . Se você não tiver o Graphviz instalado em seu computador local, poderá copiar e colar a saída no Graphviz Online para produzir uma imagem de gráfico. O -draw-cyclescomando faz com que o Terraform marque as setas relacionadas ao ciclo que está sendo relatado usando a cor vermelha. Se você não conseguir distinguir visualmente o vermelho do preto, talvez queira primeiro editar o código Graphviz gerado para substituir redpor alguma outra cor que você possa distinguir.

    A visualização do gráfico da configuração tende a se tornar inutilizável para configurações não triviais, pois existem muitos gráficos e arestas, portanto, se sua configuração tiver muitos objetos, talvez seja melhor seguir as dependências pela própria configuração.

    • 59

relate perguntas

  • Usando o Terraform para criar instâncias do GCE, ocorre um erro ao anexar o disco secundário?

  • Terraform, obtendo o erro "A raiz do módulo não tem recursos" no taint

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve