2
respostas

Problema ao criar o hosts no gitlab ci

Alguém aí já escreveu múltiplas linhas com o GITLAB? Tentei subsituir o "- CAT" por "- > " mas não deu certo.

Stage do CI

Setup:
  stage: Setup
  image: alpine
  script:
    - ls -lha
    - apk add ansible openssh-client
    - cat <<EOF > hosts
        [host]
        server_ip 

        [host:vars]
        ansible_connection=winrm
        ansible_ssh_port=5986
        ansible_user=Administrator
        ansible_password=WINDOWS_PASSWORD
        ansible_winrm_server_cert_validation=ignore
        ansible_winrm_scheme=https

        EOF
    - echo "Antes ansible"
    - ls -lha
    - ansible-playbook -i hosts main.yml

Objecto: Criar a infra com o Terraform e aplicar as configurações da EC2 via ansible.

2 respostas

Não sei se é a melhor forma, mas funcionou criar o arquivo hosts da seguinte forma:

Setup:
  stage: Setup
  image: alpine
  script:
    - ls -lha
    - apk add ansible openssh-client
    - apk update && apk add bash
    - ansible --version
    - cd ansible-windows    
    - ls -lha
    - echo "[host]" >> hosts
    - echo ${SERVER_IP} >> hosts
    - echo "[host:vars]" >> hosts
    - echo "ansible_connection=winrm" >> hosts
    - echo "ansible_ssh_port=5986" >> hosts
    - echo "ansible_user=Administrator" >> hosts
    - echo "ansible_password=WINDOWS_PASSWORD >> hosts
    - echo "ansible_winrm_server_cert_validation=ignore" >> hosts
    - echo "ansible_winrm_scheme=https" >> hosts
    - cat hosts

Oi estudante, tudo bem?

Desculpe a demora em retornar.

No trecho de código que você compartilhou, você está tentando criar um arquivo chamado "hosts" dentro de um pipeline do GitLab CI. O arquivo "hosts" provavelmente será usado para definir a configuração de conexão para a execução de um playbook do Ansible em um host remoto. Parece que você está tentando configurar uma conexão com um host Windows usando WinRM.

A abordagem que você tentou inicialmente envolveu o uso do comando "cat" para redirecionar o conteúdo para o arquivo "hosts". No entanto, você mencionou que substituir "- CAT" por "- >" não funcionou como esperado. Isso pode ter ocorrido devido a problemas de formatação ou espaçamento.

Aqui está uma explicação sobre o que pode ter dado errado com a primeira abordagem:

script:
  - cat <<EOF > hosts
    [host]
    server_ip 

    [host:vars]
    ansible_connection=winrm
    ansible_ssh_port=5986
    ansible_user=Administrator
    ansible_password=WINDOWS_PASSWORD
    ansible_winrm_server_cert_validation=ignore
    ansible_winrm_scheme=https
    EOF

O problema aqui pode estar relacionado à formatação do código dentro do bloco "script". O GitLab CI interpreta as instruções do script como comandos do shell, e a formatação correta é importante. O uso de espaços e recuos incorretos pode levar a erros na execução do script.

A abordagem alternativa que você compartilhou parece ter resolvido o problema ao criar o arquivo "hosts" de forma mais gradual. Aqui está um trecho do código que você usou:

script:
  - echo "[host]" >> hosts
  - echo ${SERVER_IP} >> hosts
  - echo "[host:vars]" >> hosts
  - echo "ansible_connection=winrm" >> hosts
  - echo "ansible_ssh_port=5986" >> hosts
  - echo "ansible_user=Administrator" >> hosts
  - echo "ansible_password=WINDOWS_PASSWORD >> hosts
  - echo "ansible_winrm_server_cert_validation=ignore" >> hosts
  - echo "ansible_winrm_scheme=https" >> hosts
  - cat hosts

Nessa abordagem, você está usando comandos "echo" para adicionar linhas ao arquivo "hosts". Isso pode ser uma maneira mais segura de garantir que as linhas sejam adicionadas corretamente, pois você evita possíveis problemas de formatação.

Agora, falando sobre a solução alternativa que você implementou, ela parece ser uma boa maneira de criar o arquivo "hosts" com as configurações necessárias para a conexão com o host Windows. Você está adicionando cada configuração em uma linha separada, o que torna o processo mais legível e menos suscetível a erros de formatação.

Certifique-se de substituir ${SERVER_IP} pelo endereço IP real do seu host. Além disso, certifique-se de que a variável WINDOWS_PASSWORD esteja definida corretamente para que a senha seja inserida corretamente no arquivo "hosts".

Se você ainda está enfrentando problemas com essa abordagem, verifique cuidadosamente se todos os comandos estão escritos corretamente, incluindo aspas e espaçamento. Erros de digitação ou formatação podem afetar o funcionamento do script.

No geral, sua solução alternativa parece ser eficaz para criar o arquivo "hosts" e configurar a conexão com o host Windows usando o Ansible. Lembre-se de testar o pipeline para garantir que tudo esteja funcionando conforme o esperado.

Espero que essa explicação tenha sido útil para você.

Um abraço e bons estudos.