quinta-feira, 19 de novembro de 2020

Exemplo de Função no PostgreSQL

     Neste post eu trago um exemplo de função no PostgreSQL.

CREATE OR REPLACE FUNCTION public.executa_migracao()
 RETURNS void
 LANGUAGE plpgsql
AS $function$

DECLARE
  dados record;  

BEGIN

    for dados in
 
        select * from public.v_paciente
 
          loop

                  BEGIN

 
                    INSERT INTO public.t_paciente
                     (num_prontuario, dsc_nome, num_cpf, num_rg,
                     dsc_orgao_emissao_rg, dat_nascimento, dsc_mae, dsc_pai,
                     dat_cadastro, dsc_endereco, dsc_complemento, dsc_bairro,
                     isn_municipio, isn_uf, num_cep, cod_tipo_telefone_1,
                     num_ddd_1, num_telefone_1, cod_certidao, dsc_cartorio,
                     dsc_livro, dsc_folha, dsc_termo, dat_emissao_certidao,
                     isn_cor, num_cns, isn_sexo, isn_nacionalidade,
                     cod_estado_civil, nome_social, isn_naturalidade,
                     num_prontuario_referencia, flg_obito)                                          VALUES  (dados.prontuario,dados.nome,dados.cpf,dados.rg,
                     dados.orgaoexpedidor, dados.datanascimento, dados.nomemae,
                     dados.nomepai, dados.data_cadastro, dados.logradouro,
                     dados.complemento,dados.bairro, dados.municipio, dados.uf,
                     dados.cep, dados.cod_tipo_telefone_1, dados.ddd,
                     dados.telefone, dados.cod_certidao, dados.dsc_cartorio,
                     dados.dsc_livro, dados.dsc_folha,dados.dsc_termo,
                     dados.dat_emissao_certidao, dados.isn_cor,
                     dados.cns,dados.sexo,dados.isn_nacionalidade,
                     dados.estadocivil,dados.nomesocial,dados.naturalidade,
                     dados.num_prontuario_referencia,dados.flg_obito);
               
                EXCEPTION
                    when unique_violation then
                        INSERT INTO public.log_table
                        (prontuario)
                        VALUES (dados.prontuario);

                END;
        end loop;
END;

$function$
;

terça-feira, 10 de novembro de 2020

Principais comandos do Docker Swarm

 Nesse artigo vou trazer o resumo dos principais comandos do Docker Swarm.


·        docker swarm init --advertise-addr <ip_máquina> – Mostra o status do swarm
·        docker info – Mostra o status do swarm
·        docker node ls – Exibe informações sobre os nós
·        docker swarm join-token worker – Mostra o comando necessário para adicionar um
nó como worker ao swarm. O comando que resulta como saída deve ser aplicado na VM 
a ser adicionada.
·        docker service create --replicas 1 --name nome_do_servico -p 8080: 3000 
nome_da_imagem – Cria um serviço no swarm com apenas uma réplica com a porta interna
3000 mapeada para a porta 8080.
·        docker service inspect --pretty id_servico – Mostra detalhes do serviço de forma 
amigável (pretty)
·        docker service ps id_servico – Exibe os nós que estão rodando o serviço 
·        docker service scale <SERVICE-ID>=<NUMBER-OF-TASKS> - Escala o serviço para a 
quantidade desejada.
·        docker service rm id_servico – Remove o serviço.
·        docker service update --image nome_imagem nome_servico – Atualiza os serviços com
a nova versão da imagem.
·        docker node update --availability drain nome_do_no – Deixa o nó indisponível para 
executar containers.
·        docker service update --contraint-add node.role==worker id_servico – Restringe 
determinado serviço a rodar apenas em nós worker.
·        docker service update --contraint-add node.id==id_do_no id_servico – Restringe 
determinado serviço a rodar apenas no nó especificado (também pode ser passado
o nome da VM, mas tem que trocar node.id por node.hostname).
·        docker service update --contraint-rm node.role==worker id_servico – Remove a 
restrição do serviço de rodar apenas em nós worker.
·        docker service update --contraint-rm node.id==id_do_no id_servico – Remove a  
restrição do serviço de rodar apenas no nó especificado ( também pode ser passado 
o nome da VM, mas tem que trocar node.id por node.hostname).

Desfazer um commit antes do push

         As vezes acontece de fazermos alterações e meio que no automático darmos o "git add ." adicionanco tudo para commitar e logo em seguida dar o commit e então lembrar que não era pra ir tudo 😖. E agora? Simples: basta executar o comando:


git reset HEAD~1


        Com esse comando as alterações são mantidas mas voltam para o status de antes do "git add . " 🙌

quinta-feira, 5 de novembro de 2020

Erro VT-x is not available (verr_vmx_no_vmx)

             Hoje vou trazer uma solução para um erro que me deu um trabalhão para encontrar uma solução, o erro VT-x is not available (verr_vmx_no_vmx).

         

          Passei por este erro ao instalar o Docker-Machine na minha máquina com Windows 10 e o VirtualBox, resultando que nenhum dos dois funcionou mais.

 

          1 - Vamos entender o problema:

 

VT-x é a Tecnologia de Virtualização da Intel que permite o processador rodar varios SOs ao mesmo tempo de forma que eles “achem” que estão rodando de forma independente. (tem link sobre isso no final).

 

Bem, até aí, tudo normal, você pode instalar VirtualBox por exemplo e mandar ver. A questão é quando você instala algum programa ou usa alguma funcionalidade que usa o Hyper-v no Windows 10 ele simplesmente “toma” o driver VT-x pra ele e não divide com outros programas, assim, o VirtualBox, por exemplo, para de funcionar. E geralmente habilitamos o Hyper-v pra trabalhar com o Docker. Isso quer dizer que as duas tecnologias Docker podem gerar incompatibilidade entre si dependendo da forma que usadas no Windows.

 

          O que é o Hyper-v? É o sistema de virtualização nativo do Windows 10. (link no final).

 

2 – Solução:

 

Para o caso de o problema ter sido gerado pelo uso do Docker-Machine você pode usar o driver Hyper-v ao invés do VirtualBox para criar as VMs. Veja como aqui: https://docs.docker.com/machine/drivers/hyper-v/

 

Para outros casos, ou quando quiser forçar o uso do VirtualBox com o Docker-Machine você vai precisar ficar habilitando e desabilitando o Hyper-v pela linha de comando e também na tela de ativação/desativação de recursos do windows, e vai precisar reiniciar ao fazer isso.

 

          Com esse comando você desabilita:

 

> bcdedit /set hypervisorlaunchtype off

         

          Com esse você habilita:

 

> bcdedit /set hypervisorlaunchtype on 

ou

bcdedit /set hypervisorlaunchtype auto


          E depois na tela de recursos do Windows você também habilita/desabilita:




 

          !IMPORTANTE! O Docker está dando a opção de usar o Windows Subsystem Linux - WSL 2 no lugar do Hyper-v, mas essa solução continua usando o Hyper-v por baixo dos panos, veja no link https://docs.docker.com/docker-for-windows/wsl/Por hoje é isso, espero ter ajudado!

 

Links:

https://www.clubedohardware.com.br/artigos/processadores/tudo-o-que-voc%C3%AA-precisa-saber-sobre-a-tecnologia-de-virtualiza%C3%A7%C3%A3o-da-intel-r34579/

 

https://docs.microsoft.com/pt-br/virtualization/hyper-v-on-windows/about/

 

https://docs.microsoft.com/en-us/archive/blogs/gmarchetti/turning-hyper-v-on-and-off

Principais comandos Docker-Machine

Instalar:

base=https://github.com/docker/machine/releases/download/v0.16.0 && mkdir -p "$HOME/bin" && curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && chmod +x "$HOME/bin/docker-machine.exe"
 

Executar o comando no GitBash. Nesta versão do Docker-Machine os comandos precisam ser executados nele.

Principais comandos:


⦁    docker-machine ls  - lista máquinas disponíveis
⦁    docker-machine create --driver virtualbox nome_maquina  -  cria uma máquina virtual. É preciso especificar do driver e o nome da máquina.
⦁    docker-machine ip nome_maquina  -   mostra o ip da máquina criada.
⦁    nome_maquina  start  nome_maquina - starta a máquina.
⦁    nome_maquina  stop  nome_maquina  -  para a máquina.
⦁    nome_maquina  restart  nome_maquina - restarta a máquina.
⦁    nome_maquina  ssh  nome_maquina  -  acessa a máquina.
⦁    nome_maquina  inspect  nome_maquina  -  mostra configurações da máquina.
⦁    nome_maquina  status  nome_maquina  - exibe o status da máquina.

Outros:


⦁    nome_maquina  config  nome_maquina.
⦁    nome_maquina  env  nome_maquina.
⦁    nome_maquina  kill  nome_maquina.
⦁    nome_maquina  upgrade  nome_maquina.
⦁    nome_maquina  url  nome_maquina.
⦁    nome_maquina  provision  nome_maquina.


Fonte:
https://docs.docker.com/engine/swarm/swarm-tutorial/
https://docs.docker.com/machine/

terça-feira, 3 de novembro de 2020

Docker Machine

        Quando as pessoas falam em "Docker", normalmente se referem ao Docker Engine, o aplicativo cliente-servidor composto do daemon Docker, uma API REST que especifica interfaces para interagir com o daemon e um cliente de interface de linha de comando (CLI) que se comunica com o daemon (por meio do wrapper REST API). O Docker Engine aceita comandos docker da CLI, como docker run <image>, docker ps para listar contêineres em execução, docker image ls para listar imagens e assim por diante.
 
 
         Docker Machine é uma ferramenta para provisionar e gerenciar seus hosts Dockerizados (hosts com Docker Engine neles). Normalmente, você instala a Máquina Docker em seu sistema local. Docker Machine tem seu próprio cliente docker-machine de linha de comando e o cliente Docker Engine (Docker). Você pode usar o Machine para instalar o Docker Engine em um ou mais sistemas virtuais. Esses sistemas virtuais podem ser locais (como quando você usa a Máquina para instalar e executar o Docker Engine no VirtualBox no Mac ou Windows) ou remotos (como quando você usa a Máquina para provisionar hosts Dockerizados em provedores de nuvem). Os próprios hosts Dockerizados podem ser considerados, e às vezes são chamados de "máquinas" gerenciadas.

 
 
        Resumindo, com o Docker Machine você gerencia um ou vários Docker Engines, onde em cada um você tem suas imagens e gerencia elas através do CLI. Quando falamos em Docker estamos em um nível mais próximo do desenvolvimento (subir aplicações e gerenciá-las), quando falamos em Docker Machine estamos mais próximo da infra (prover máquinas para as equipes subirem e gerenciarem suas aplicações).  Obs: Não que a infra não esteja envolvida no processo de subir aplicações e gerenciá-las, mas com certeza o dev está mais longe de prover máquinas ;)

        O Docker Machine pode ser usado em conjunto com o Docker Swarm, provendo as VMs que o Swarm vai orquestrar.

Fonte: https://docs.docker.com/machine/

segunda-feira, 2 de novembro de 2020

Resumo dos principais comandos Docker

 

Resumo dos principais comandos Docker para acesso rápido:

 

  • docker ps - exibe todos os containers em execução no momento.
  • docker ps -a - exibe todos os containers, independentemente de estarem em execução ou não.
  • docker run -it NOME_DA_IMAGEM - conecta o terminal que estamos utilizando com o do container.
  • docker start ID_CONTAINER - inicia o container com id em questão.
  • docker stop ID_CONTAINER - interrompe o container com id em questão.
  • docker start -a -i ID_CONTAINER - inicia o container com id em questão e integra os terminais, além de permitir interação entre ambos.
  • docker rm ID_CONTAINER - remove o container com id em questão.
  • docker container prune - remove todos os containers que estão parados.
  • docker rmi NOME_DA_IMAGEM - remove a imagem passada como parâmetro.
  • docker container prune - remove todos os containers parados.
  • docker images prune -a - remove todas as imagens não ligadas a containers. 
  • docker run -d -P --name NOME dockersamples/static-site - ao executar, dá um nome ao container.
  • docker run -d -p 12345:80 dockersamples/static-site - define uma porta específica para ser atribuída à porta 80 do container, neste caso 12345.
  •  docker run -d -P -e AUTHOR="Fulano" dockersamples/static-site - define uma variável de ambiente AUTHOR com o valor Fulano no container criado. (Neste caso a imagem usada espera o valor da variável de ambiente.)
  • docker run -v "[CAMINHO_VOLUME_LOCAL]:CAMINHO_VOLUME_CONTAINER" NOME_DA_IMAGEM - cria um volume no respectivo caminho do container, caso seja especificado um caminho local monta o volume local no volume do container.
  • docker inspect ID_CONTAINER - retorna diversas informações sobre o container.
  • docker build -f Dockerfile - cria uma imagem a partir de um Dockerfile.
  • docker build -f CAMINHO_DOCKERFILE/Dockerfile -t NOME_USUARIO/NOME_IMAGEM - constrói e nomeia uma imagem não-oficial informando o caminho para o Dockerfile.
  • docker login - inicia o processo de login no Docker Hub.
  • docker push NOME_USUARIO/NOME_IMAGEM - envia a imagem criada para o Docker Hub.
  • docker pull NOME_USUARIO/NOME_IMAGEM - baixa a imagem desejada do Docker Hub.
  • hostname -i - mostra o ip atribuído ao container pelo docker (funciona apenas dentro do container).
  • docker network create --driver bridge NOME_DA_REDE - cria uma rede especificando o driver desejado.
  • docker run -it --name NOME_CONTAINER --network NOME_DA_REDE NOME_IMAGEM - cria um container especificando seu nome e qual rede deverá ser usada.
  • docker-compose build - Realiza o build dos serviços relacionados ao arquivo docker-compose.yml, assim como verifica a sua sintaxe.
  • docker-compose up - Sobe todos os containers relacionados ao docker-compose, desde que o build já tenha sido executado.
  • docker-compose down - Para todos os serviços em execução que estejam relacionados ao arquivo docker-compose.yml.
  • docker-compose ps - lista os serviços que estão rodando.
  • docker exec -it nome_do_no comando- executa um comando dentro do container de forma interativa (-it)

Fonte: Alura