oc describe po pod-name
oc exec pod-name cat /sys/devices/virtual/net/eth0/iflink
ip a
| --- | |
| - hosts: all | |
| become: yes | |
| become_user: jboss | |
| vars: | |
| jboss_home: /opt/jboss-eap-6.4 | |
| patch_file: jboss-eap-6.4.9-patch.zip | |
| patch_dest: /tmp | |
| patch_version: 6.4.9 |
| --- | |
| - hosts: all | |
| become: yes | |
| become_user: root | |
| vars: | |
| appliance_file_name: "https_{{ appliance_name }}" | |
| tasks: | |
| - name: SAML configuration dir |
| [----] I, [2017-12-04T09:04:52.316647 #17000:fe7130] INFO -- : <AutomationEngine> Updated namespace [/System/Process/Event?EventStream%3A%3Aevent_str | |
| eam=301&MiqEvent%3A%3Amiq_event=301&MiqServer%3A%3Amiq_server=1&User%3A%3Auser=1&VmOrTemplate%3A%3Avm=273&event_stream_id=301&event_type=vm_create&miq | |
| _event_id=301&object_name=Event&vm_id=273&vmdb_object_type=vm ManageIQ/System] | |
| [----] E, [2017-12-04T09:04:52.347746 #17009:fe7130] ERROR -- : <AutomationEngine> MiqAeServiceModelBase.ar_method raised: <NameError>: <uninitialized | |
| constant MiqAeMethodService::MiqAeServiceManageIQ_Providers_OracleCloud_CloudManager_Vm> | |
| [----] E, [2017-12-04T09:04:52.347928 #17009:fe7130] ERROR -- : <AutomationEngine> /var/www/miq/vmdb/lib/miq_automation_engine/engine/miq_ae_method_se | |
| rvice/miq_ae_service_model_base.rb:132:in `const_get' | |
| ManageIQ_Providers_OracleCloud_CloudManager_Vm exists at manageiq/providers/oracle_cloud/cloud_manager/vm.rb |
Se você trabalha com Puppet há um certo tempo TEM que entender como Types e Providers funcionam.
Não apenas para decidir quando deve utilizá-lo em vez de um exec que executa um script - ou dois, mas também porque é essencial para entender o funcionamento do Puppet e dos types e providers nativos e/ou entregues por módulos de terceiros utilizados.
Não confundir custom types com defined types, que são apenas uma forma de criar um wrapper em cima de/reutilizando outro(s) recurso(s) existente(s). Neste artigo falaremos de custom resource types, mas iremos nos referir a estes apenas como types.
Na continuação desta série o foco será em testes de aceitação, com a seguinte definição:
Aceitação: O sistema como um todo funciona?
Características: Lento, não-determinístico (frágil), alto custo para construção, porém com alto valor de negócio (provê feedback do funcionamento da perspectiva do usuário final).
Enquanto testes unitários provêem feedback quase imediato, executando em poucos segundos, os testes de aceitação precisam de um pouco mais de tempo para executar, de poucos minutos a horas.
Testes de infraestrutura aos poucos vem ganhando espaço e novas ferramentas vem surgindo (molecule e goss) enquanto as mais maduras (beaker, serverspec, rspec-puppet) tem sido ativamente mantidas e constantemente melhoradas.
Se você não está testando seu código está optando por passar algo adiante no pipeline com um baixo grau de confiança e consequentemente maior chance de falhar.
Porque escrever especificamente para Puppet? Toda a parte de fundamentos de testes pode ser reusada e aplicada para as demais tecnologias, mas hoje o conjunto de ferramentas utilizados para testar, bem como a estratégia, variam consideravelmente, visto que cada tecnologia optou por uma abordagem diferente para resolver o problema de gerenciamento de configuração.
Podemos encontrar mais similaridades em nível de aceitação, onde meus testes são totalmente caixa preta, mas mesmo neste caso,
| - name: Configure datasource | |
| jboss_resource: | |
| name: "/subsystem=datasources/data-source=DemoDS" | |
| state: present | |
| attributes: | |
| driver-name: h2 | |
| connection-url: "jdbc:h2:mem:demo;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE" | |
| jndi-name: "java:jboss/datasources/DemoDS" | |
| user-name: sa | |
| password: sa |
Quem me conhece um pouco melhor sabe o quanto gosto de recomendar a leitura de livros.
Após ler um livro muito bom que me faz repensar o que sei ou apresentar algo completamente novo irei chatear as pessoas mais próximas até que elas o comprem e possam entender melhor aquela linha de pensamento ou mesmo ajudar a ajustar/melhorar algo que interpretei de uma forma diferente - basicamente forço a pessoa a entrar em um "Clube do Livro" comigo (:
Há também o caso de livros que compilam boa parte do que estudei no passado recente e me dão um feedback que estou no caminho certo - ou próximo dele.
Costumo dizer que se você está fazendo algo inédito em computação é um forte candidato ao próximo Turing Award ou idiota do ano. Minha auto-crítica sempre leva a crer na segunda opção e me obriga a constantemente a encontrar referências ou construí-las a partir de connhecimento existinte, afinal, pouquíssimas vezes na vida fui realmente pioneiro.
| SimpleCov.start do | |
| add_group "Puppet Types", '/lib/puppet/type/' | |
| add_group "Puppet Providers", '/lib/puppet/provider/' | |
| add_group "Puppet Functions", 'lib/puppet/parser/functions/' | |
| add_group "Puppet Extensions", 'lib/puppet_x/' | |
| add_group "Facts", 'lib/facter' | |
| add_filter '/spec' |