Teste do estado de sal via Jenkins

7

Tudo,

Estamos tentando realizar testes automatizados em nossa configuração do Jenkins para executar o tipo de teste "fumaça" e "fiapo" em nossos arquivos de estado salt ( .sls ). Todos os google-foo até agora renderam muito pouca informação. Existe uma maneira de testar via test=True na linha de comando, mas isso não funciona com uma conta no shell (como normalmente são os relatos de Jenkin).

Ainda não esbarrei em ninguém que faça esse tipo de teste automatizado dos estados do SaltStack. Então:

1) É possível

2) Alguém sabe de um bom recurso onde eu poderia olhar

TIA.

    
por rdodev 16.04.2015 / 23:19

3 respostas

7

Docker. O teste automatizado rápido da configuração do servidor é um inegável problema do mundo real que o docker unha. Ele pode fornecer um computador limpo já inicializado e escutando na rede em um segundo. Inicie uma imagem com / srv / salt bind-mounted e você pode executar salt-call --local state.highstate -l debug nos estados de teste sem exagerar com salt-key .

Eu sei que o SaltStack, Inc usou o LXC da mesma maneira. Eles provavelmente ainda fazem.

Quanto ao teste - se você for inteligente e cuidadoso com seus arquivos de estados, pode considerar uma segunda execução limpa como uma indicação de sucesso.

Isso é difícil de conseguir, pois alguns estados sempre serão executados novamente. A pilha de sal tem sido boa em consertar esses estados conforme são encontrados. Enquanto isso, você terá que cercar esses estados com condicionais inline jinja que executam comandos no minion em tempo de execução:

{% if salt['cmd.retcode']('your test here') %} 
some-identifier:
  some.module:
    - name: some anme
{% endif %}'

Existe um plug-in jenkins-docker :

The aim of the docker plugin is to be able to use a docker host to dynamically provision a slave, run a single build, then tear-down that slave.

Como alternativa, você pode automatizar tudo por meio do novo docker- ng salt module :

salt dockhost docker-ng.create states-qa rm=True binds="/srv/salt:/srv/salt"
salt dockhost docker-ng.retcode states-qa 'salt-call --local state.highstate' # run 1
salt dockhost docker-ng.retcode states-qa 'salt-call --local state.highstate' # run 2
salt dockhost docker-ng.stop states-qa
    
por 17.04.2015 / 04:26
0

Você pode querer dar uma olhada em TestInfra

    
por 01.04.2016 / 22:08
0

Estou procurando há um bom tempo para conseguir esse material de controle de qualidade no estado de sal, e minha melhor resposta até agora é:

  1. Usando o jenkins para iniciar jobs (através do ssh), baseado em um branch de desenvolvimento que:

    • Provisione um lxc em nossa nuvem privada proxmox de laboratório (da mesma maneira que fazemos isso em prod)

    • Usando reatores de sal, o contêiner obtém sua configuração (como seria em prod)

    • Usando o testinfra para executar o teste de unidade no contêiner construído e configurado

    • Finalmente, se tudo correr bem, destrua o container, se não mantê-lo vivo para uma sessão matinal de depuração:)

  2. Também executamos trabalhos jenkins de linting como:

    for state in $(sudo /usr/bin/salt-call cp.list_states | awk '{print $2}' | grep -v "^top$"); do sudo /usr/bin/salt-call --retcode-passthrough state.show_sls ${state} ; done
    

Ainda tenho algum problema em obter o código de retorno correto para este último trabalho de linting (por causa do ssh e assim por diante).

Esse processo como um todo garante:

  1. Nosso processo de provisionamento está correto
  2. Nossa base de código (estado + pilar) está funcionando como esperado
  3. Podemos mesclar o desenvolvedor com uma ótima relação de confiança

O bom ponto do testinfra é que ele pode usar um backend de conexão salt que permite que o testinfra se conecte ao container sem a necessidade de implantar a chave ssh, ou qualquer outra coisa (já que estamos usando a salt-cloud para o provisionamento inicial)

Mais sobre backend de conexão de sal do testinfra , testinfra sistema de sal .

Isso não é perfeito, mas ainda faz um bom trabalho.

    
por 07.03.2018 / 10:34