Use a flag -h
com qualquer comando happy-*
para conferir a ajuda e a lista de
opções desse comando.
Arquivos de estado
O Happy armazena e mantém cuidadosamente o estado da topologia em um arquivo JSON com um único registro. Usando esse arquivo de estado, Happy pode executar os comandos apropriados para criar ou remover uma topologia.
O arquivo de estado padrão está localizado em ~/.happy_state.json
. O nome do estado
padrão é happy
, conforme visto na saída happy-state
:
happy-state
State Name: happy
Estados paralelos
O Happy oferece suporte a vários estados paralelos coexistentes. O estado atual é
ditado pela variável de ambiente HAPPY_STATE_ID
. Se HAPPY_STATE_ID
não existir no ambiente, o valor de estado padrão de happy
será usado.
O HAPPY_STATE_ID
não é criado durante a instalação do Happy. Crie um com um
valor diferente de state
para mudar imediatamente para outro estado "Happy".
export HAPPY_STATE_ID="sunny"
Agora, verificar happy-state
resulta em um estado diferente:
happy-state
State Name: sunny
Cada estado é mantido no próprio arquivo ~/.${HAPPY_STATE_ID}_state.json
. Para
alternar entre estados, execute o
comando export HAPPY_STATE_ID="<state-name>"
novamente.
Desinstalação com estados paralelos
Se você usar estados felizes paralelos e quiser desinstalar o Happy, execute
happy-state-delete
com cada estado ativo. Isso garante que todos os namespaces de rede criados pela Happy sejam removidos do sistema sem afetar a configuração de rede do host do Linux.
Por exemplo, com dois estados de happy
e sunny
:
export HAPPY_STATE_ID="sunny"
happy-state-delete
export HAPPY_STATE_ID="happy"
happy-state-delete
Remova manualmente cada arquivo de estado paralelo conforme necessário:
rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock
Registros
O Happy envia registros para syslog
por padrão. Um segundo backup de registro é enviado para
/tmp/${HAPPY_STATE_ID}_debug_log.txt
.
Para ver os registros da Happy, execute happy-state -l
em uma janela de terminal separada. Quando você
digita comandos Happy, os registros mostram os comandos do shell Happy em segundo
plano. Essa é uma boa maneira de entender como o Happy funciona, se você tiver
interesse nos namespaces de rede do Linux.
Por exemplo, happy-node-add node00
cria um nó feliz. A saída do registro para
esse comando é:
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist DEBUG [Driver:writeState():365] Happy: writing Happy state to file DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000 DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up
Todas as linhas Driver:CallCmd()
são os comandos do shell que Happy chama.
Considere cada linha no registro:
# Check to see if the target namespace (happy000) exists DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist # Write the link between node00 and happy000 in ~/.happy_state.json DEBUG [Driver:writeState():365] Happy: writing Happy state to file # Create the network namespace for the node DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000 # Check to see if the target namespace (happy000) exists DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists # Bring up the loopback interface within the happy000 namespace DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up
Exemplos de topologias
As topologias de amostra estão incluídas nos repositórios Happy e OpenWeave para testes. Use-os também para aprender os comandos de construção de topologias complexas.
- Feliz:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
As topologias estão nos formatos JSON e Shell Script.
JSON
Os arquivos de topologia JSON são carregados usando os comandos happy-state-load
ou
weave-state-load
. Se a topologia incluir a Weave, use
weave-state-load
para carregar a topologia. Caso contrário, os comandos específicos da Weave
serão ignorados.
Por exemplo, uma topologia sem a Weave:
happy-state-load thread_wifi_ap_internet.json
Uma topologia com a interpolação:
weave-state-load three_nodes_on_thread_weave.json
Para salvar a topologia atual como um arquivo JSON separado para uso posterior (por exemplo, um script de caso de teste), use happy-shell -s
:
happy-shell -s my_topology.json
Isso salva o arquivo de estado de topologia no diretório $HOME
.
Scripts de shell
Os arquivos de topologia de script de shell contêm o conjunto de comandos Happy e Weave para criar as topologias nos arquivos JSON correspondentes. Por padrão, esses scripts não têm permissões executáveis. Eles podem ser executados de duas maneiras:
Usando o comando bash
:
bash thread_wifi_ap_internet.sh
Ao aplicar permissões executáveis:
chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh
Configuração
O Happy tem três arquivos de configuração:
Arquivo de configuração | Descrição |
---|---|
~/.happy_conf.json | Variáveis de configuração para uso pessoal ou de plug-in. Defina esses valores usando o comando happy-configuration . |
<path-to-happy>/happy/conf/main_config.json | Variáveis de configuração principais do Happy. |
<path-to-happy>/happy/conf/log_config.json | Configuração de registros. |
Adicionar variáveis de configuração
Recomendamos que você use o comando happy-configuration
para definir variáveis pessoais ou de plug-in além dos padrões necessários para sua implantação específica da Happy.
Por exemplo, para que Happy saiba onde encontrar o diretório test-apps
do Weave para
scripts de teste, defina a variável weave_path
:
happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps
Happy armazena variáveis de configuração em ~/.happy_conf.json
.
Processos em nós
Happy fornece comandos para iniciar e interromper processos em nós simulados.
Para iniciar um processo:
happy-process-start <node-name> <custom-process-name> <command>
Por exemplo, para executar continuamente um ping em um nó chamado ThreadNode:
happy-process-start ThreadNode ContinuousPing ping 8.8.8.8
No exemplo acima, ContinuousPing é o nome definido pelo usuário para o processo
que Happy usa para gerenciá-lo. Use happy-process-wait
para suspender
a execução do processo e happy-process-stop
para encerrar o processo.
A saída do processo está em /tmp
. Por exemplo, depois de iniciar o processo ContinuousPing, verifique o diretório /tmp
:
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
Esse arquivo .out
contém a saída do processo ContinuousPing.
Uso de sudo
Happy muda a configuração de rede controlada pelo kernel do Linux.
Como apenas root
pode mudar a configuração do kernel, a Happy solicita que você
insira a senha sudo
durante a operação.
Happy usa a variável de ambiente do sistema $SUDO
para chamar sudo
. Se $SUDO
não
for definido, o Happy fará uma chamada sudo
normal.
Scripting do Python
Após a instalação, os pacotes Happy Python podem ser importados para um ambiente Python
usando a seguinte instrução import
:
import happy
Módulos de comando individuais encontrados em /happy
são importados da seguinte maneira:
import happy.HappyNodeAdd
Para recuperar as opções do módulo, chame a função option()
. Por exemplo, para
extrair as opções do módulo HappyNodeAdd
:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()