コード例 #1
0
    def test_parser_inventario_ansible_grupo_var_duplicada(
            self, _, servidor_acesso, monkeypatch):
        dados_teste = DadosTeste()
        nome_grupo = dados_teste.get_nome_unico()
        nome_var = dados_teste.get_nome_unico()
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'vms': [{
                'nome':
                dados_teste.get_nome_unico(),
                'ansible': [{
                    'grupo':
                    nome_grupo,
                    'vars': [{
                        'nome': nome_var,
                        'valor': dados_teste.get_random_word()
                    }, {
                        'nome': nome_var,
                        'valor': dados_teste.get_random_word()
                    }]
                }]
            }]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, msg = parser_local.get_inventario(servidor_acesso)

        assert status is False
        assert msg == f"Variável '{nome_var}' do grupo ansible '{nome_grupo}' " \
            f"referenciada mais de uma vez na VM '{inventario[0][0]['vms'][0]['nome']}'."
コード例 #2
0
    def test_parser_inventario_vm_sem_rede(self, _, servidor_acesso,
                                           monkeypatch):
        dados_teste = DadosTeste()
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'imagem_padrao':
            dados_teste.get_random_word(),
            'qtde_cpu_padrao':
            randint(Base.CPU_MIN, Base.CPU_MAX),
            'qtde_ram_mb_padrao':
            randint(Base.RAM_MIN, Base.RAM_MAX),
            'vms': [{
                'nome': dados_teste.get_nome_unico()
            } for _ in range(randrange(1, Base.VMS_POR_TESTE_MAX))]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, msg = parser_local.get_inventario(servidor_acesso)

        assert status is False
        assert msg == f"VM {inventario[0][0]['vms'][0]['nome']}" \
            ' deve ter exatamente uma rede principal.'
コード例 #3
0
    def test_parser_inventario_nome_vm_duplicado(self, _, servidor_acesso,
                                                 monkeypatch):
        dados_teste = DadosTeste()
        nome_vm = dados_teste.get_nome_unico()
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'imagem_padrao':
            dados_teste.get_random_word(),
            'qtde_cpu_padrao':
            randint(Base.CPU_MIN, Base.CPU_MAX),
            'qtde_ram_mb_padrao':
            randint(Base.RAM_MIN, Base.RAM_MAX),
            'redes_padrao': [{
                'nome': dados_teste.get_random_word()
            } for _ in range(randrange(1, Base.REDES_POR_VM_MAX))],
            'vms': [{
                'nome': nome_vm
            } for _ in range(randrange(2, Base.VMS_POR_TESTE_MAX))]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, msg = parser_local.get_inventario(servidor_acesso)

        assert status is False
        assert msg == f"VM {inventario[0][0]['vms'][0]['nome']}" \
            ' referenciada mais de uma vez no inventário.'
コード例 #4
0
    def test_parser_inventario_ansible_var_invalida(self, _, servidor_acesso,
                                                    monkeypatch):
        dados_teste = DadosTeste()
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'vms': [{
                'nome':
                dados_teste.get_nome_unico(),
                'ansible': [{
                    'grupo': dados_teste.get_random_word(),
                    'vars': [{
                        'nome': ''
                    }]
                }]
            }]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, msg = parser_local.get_inventario(servidor_acesso)

        assert status is False
        assert "vms.0.ansible.0.vars.0.nome: '' is not a caracteres alfabéticos" in msg
        assert 'vms.0.ansible.0.vars.0.valor: Required field missing' in msg
コード例 #5
0
    def test_parser_inventario_vms_com_regiao_invalida(self, _,
                                                       servidor_acesso,
                                                       monkeypatch):
        dados_teste = DadosTeste()
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'imagem_padrao':
            dados_teste.get_random_word(),
            'qtde_cpu_padrao':
            randint(Base.CPU_MIN, Base.CPU_MAX),
            'qtde_ram_mb_padrao':
            randint(Base.RAM_MIN, Base.RAM_MAX),
            'redes_padrao': [{
                'nome': dados_teste.get_nome_unico(),
                'principal': num_iter == 0,
            } for num_iter in range(randrange(1, Base.REDES_POR_VM_MAX))],
            'vms': [{
                'nome':
                dados_teste.get_nome_unico(),
                'regiao':
                DadosTeste.get_regiao_vm_por_iteracao(num_iter + 1)
            } for num_iter in range(randrange(1, Base.VMS_POR_TESTE_MAX))]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, msg = parser_local.get_inventario(servidor_acesso)

        assert status is False
        assert 'Região' in msg and 'não é válida.' in msg
コード例 #6
0
    def test_parser_inventario_min_sem_padrao(self, _, servidor_acesso,
                                              monkeypatch):
        dados_teste = DadosTeste()
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'vms': [{
                'nome':
                dados_teste.get_nome_unico(),
                'descricao':
                dados_teste.get_random_word(),
                'imagem':
                dados_teste.get_random_word(),
                'qtde_cpu':
                randint(Base.CPU_MIN, Base.CPU_MAX),
                'qtde_ram_mb':
                randint(Base.RAM_MIN, Base.RAM_MAX),
                'redes': [{
                    'nome': dados_teste.get_nome_unico(),
                    'principal': num_iter == 0
                } for num_iter in range(randrange(1, Base.REDES_POR_VM_MAX))],
            } for _ in range(randrange(1, Base.VMS_POR_TESTE_MAX))]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, inventario_resposta = parser_local.get_inventario(
            servidor_acesso)

        assert status is True
        assert inventario_resposta == self.get_obj_inventario(inventario)
コード例 #7
0
    def test_parser_inventario_vazio(self, tmpdir, servidor_acesso):
        arquivo_inventario = tmpdir.join('inventario_vazio.yaml')
        arquivo_inventario.write('')

        parser_local = ParserLocal(arquivo_inventario.strpath)
        status, msg = parser_local.get_inventario(servidor_acesso)

        assert status is False
        assert msg == 'Arquivo de inventário vazio.'
コード例 #8
0
    def test_parser_inventario_com_discos_adicionais(self, _, servidor_acesso,
                                                     monkeypatch):
        dados_teste = DadosTeste()
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'imagem_padrao':
            dados_teste.get_random_word(),
            'qtde_cpu_padrao':
            randint(Base.CPU_MIN, Base.CPU_MAX),
            'qtde_ram_mb_padrao':
            randint(Base.RAM_MIN, Base.RAM_MAX),
            'redes_padrao': [{
                'nome': dados_teste.get_nome_unico(),
                'principal': num_iter == 0,
            } for num_iter in range(randrange(1, Base.REDES_POR_VM_MAX))],
            'vms': [{
                'nome':
                dados_teste.get_nome_unico(),
                'discos_adicionais': [{
                    'arquivo':
                    dados_teste.get_nome_unico(),
                    'tipo':
                    choice([enum.value for enum in SCDiskBusType]),
                    'tamanho_mb':
                    randint(1, 1073741824),
                    'tamanho_tipo':
                    choice([enum.value for enum in SCDiskSizeType]),
                } for _ in range(randrange(1, Base.DISCOS_POR_VM_MAX))],
            } for _ in range(randrange(1, Base.VMS_POR_TESTE_MAX))]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, inventario_resposta = parser_local.get_inventario(
            servidor_acesso)

        # Assert inventário
        assert status is True
        assert inventario_resposta == self.get_obj_inventario(inventario)

        # Assert discos adicionais
        for nome_vm in inventario_resposta.vms:
            discos_adicionais_vm = inventario_resposta.vms[
                nome_vm].discos_adicionais
            discos_adicionais_ok = self.get_discos_adicionais_vm(
                inventario, nome_vm)

            assert not discos_adicionais_vm.keys() - discos_adicionais_ok.keys(
            )
            for arquivo in discos_adicionais_vm:
                assert discos_adicionais_vm[arquivo] == discos_adicionais_ok[
                    arquivo]
コード例 #9
0
def obter_inventario_local(servidor_acesso, arquivo_inventario, ocultar_progresso,
                           filtro_nome_vm=None, filtro_dados_completos=True):
    imprimir_acao_corrente('Obtendo inventário local', ocultar_progresso)

    parser_local = ParserLocal(arquivo_inventario)
    status, inventario_local = parser_local.get_inventario(
        servidor_acesso, filtro_nome_vm, filtro_dados_completos)
    validar_retorno_operacao_sem_lock(
        status, inventario_local, ocultar_progresso)

    return inventario_local
コード例 #10
0
    def test_parser_inventario_com_ansible(self, _, servidor_acesso,
                                           monkeypatch):
        dados_teste = DadosTeste()
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'imagem_padrao':
            dados_teste.get_random_word(),
            'qtde_cpu_padrao':
            randint(Base.CPU_MIN, Base.CPU_MAX),
            'qtde_ram_mb_padrao':
            randint(Base.RAM_MIN, Base.RAM_MAX),
            'redes_padrao': [{
                'nome': dados_teste.get_nome_unico(),
                'principal': num_iter == 0,
            } for num_iter in range(randrange(1, Base.REDES_POR_VM_MAX))],
            'vms': [{
                'nome':
                dados_teste.get_nome_unico(),
                'ansible': [{
                    'grupo':
                    dados_teste.get_nome_unico(),
                    'vars': [{
                        'nome': dados_teste.get_nome_unico(),
                        'valor': dados_teste.get_random_word()
                    } for _ in range(randrange(0, Base.ANSIBLE_ITERACAO_MAX))],
                } for _ in range(randrange(1, Base.ANSIBLE_ITERACAO_MAX))],
            } for _ in range(randrange(1, Base.VMS_POR_TESTE_MAX))]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, inventario_resposta = parser_local.get_inventario(
            servidor_acesso)

        # Assert inventário
        assert status is True
        assert inventario_resposta == self.get_obj_inventario(inventario)

        # Assert dados ansible
        for nome_vm in inventario_resposta.vms:
            dados_ansible_vm = inventario_resposta.vms[nome_vm].dados_ansible
            dados_ansible_ok = self.get_dados_ansible_vm(inventario, nome_vm)

            assert not dados_ansible_vm.keys() - dados_ansible_ok.keys()
            for nome_grupo in dados_ansible_vm:
                assert dados_ansible_vm[nome_grupo] == dados_ansible_ok[
                    nome_grupo]
コード例 #11
0
    def test_parser_inventario_disco_adicional_duplicado(
            self, _, servidor_acesso, monkeypatch):
        dados_teste = DadosTeste()
        arquivo = dados_teste.get_nome_unico()
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'vms': [{
                'nome':
                dados_teste.get_nome_unico(),
                'discos_adicionais': [{
                    'arquivo':
                    arquivo,
                    'tipo':
                    choice([enum.value for enum in SCDiskBusType]),
                    'tamanho_mb':
                    randint(Base.TAMANHO_DISCO_MIN, Base.TAMANHO_DISCO_MAX),
                    'tamanho_tipo':
                    choice([enum.value for enum in SCDiskSizeType]),
                }, {
                    'arquivo':
                    arquivo,
                    'tipo':
                    choice([enum.value for enum in SCDiskBusType]),
                    'tamanho_mb':
                    randint(Base.TAMANHO_DISCO_MIN, Base.TAMANHO_DISCO_MAX),
                    'tamanho_tipo':
                    choice([enum.value for enum in SCDiskSizeType]),
                }]
            }]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, msg = parser_local.get_inventario(servidor_acesso)

        assert status is False
        assert msg == f"Disco '{arquivo}' referenciado mais de uma vez " \
            f"para a VM '{inventario[0][0]['vms'][0]['nome']}'."
コード例 #12
0
    def test_parser_inventario_vms_sem_imagem(self, _, servidor_acesso,
                                              monkeypatch):
        dados_teste = DadosTeste()
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'vms': [{
                'nome': dados_teste.get_nome_unico()
            } for _ in range(randrange(1, Base.VMS_POR_TESTE_MAX))]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, msg = parser_local.get_inventario(servidor_acesso)

        assert status is False
        assert msg == f"Imagem da VM {inventario[0][0]['vms'][0]['nome']} não definida."
コード例 #13
0
    def test_parser_inventario_vms_nome_invalido(self, _, servidor_acesso,
                                                 monkeypatch):
        dados_teste = DadosTeste()
        qtde_vms = randrange(1, Base.VMS_POR_TESTE_MAX)
        inventario = [({
            'agrupamento':
            dados_teste.get_random_word(),
            'nuvem':
            dados_teste.get_random_word(),
            'vms': [{
                'nome': dados_teste.get_random_nome_vm_incorreto()
            } for _ in range(qtde_vms)]
        }, 'inventario.yaml')]
        monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml',
                            lambda mock: inventario)

        parser_local = ParserLocal(None)
        status, msg = parser_local.get_inventario(servidor_acesso)

        assert status is False
        assert qtde_vms == sum(1 for _ in re.finditer(
            re.escape('is not a caracteres alfanuméricos (máx 15)'), msg))