Feliz uso

Use a sinalização -h com qualquer comando happy-* para visualizar a ajuda e a lista de opções para esse comando.

Arquivos de estado

O Happy armazena e mantém cuidadosamente o estado de topologia dele em um arquivo JSON com um único registro. Usando esse arquivo de estado, o 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 exibido na saída happy-state:

happy-state

State Name:  happy

Estados paralelos

Happy é compatível com 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, a verificação de 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.

Desinstalar com estados paralelos

Se você usar estados felizes e quiser desinstalar o Happy, execute happy-state-delete com cada estado ativo. Isso garante que todos os namespaces de rede criados pelo Happy sejam removidos do sistema sem afetar a configuração da 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

Feliz 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 felizes, execute happy-state -l em uma janela de terminal separada. Quando você inseriu comandos Happy, os registros mostram os comandos Shell problemas 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 de 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 de Driver:CallCmd() são os comandos do shell que o 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

Topologias de amostra

As topologias de amostra estão incluídas nos repositórios Happy e OpenWeave para testes. Use-os também para aprender os comandos e criar topologias complexas.

As topologias estão no formato JSON e no script de shell.

JSON

Os arquivos de topologia JSON são carregados usando os comandos happy-state-load ou weave-state-load. Se a topologia incluir o Weave, você precisará usar weave-state-load para carregar a topologia. Caso contrário, os comandos específicos do Weave serão ignorados.

Por exemplo, uma topologia sem o Weave:

happy-state-load thread_wifi_ap_internet.json

Uma topologia com o Weave:

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 do 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çãoDescrição
~/.happy_conf.jsonVariáveis de configuração para uso pessoal ou do plug-in. Defina esses valores usando o comando happy-configuration.
<path-to-happy>/happy/conf/main_config.jsonPrincipais variáveis de configuração do Happy.
<path-to-happy>/happy/conf/log_config.jsonConfiguração do registro.

Adicionar variáveis de configuração

Recomendamos o uso do comando happy-configuration para definir qualquer variável pessoal ou de plug-in além dos padrões necessários para a implantação específica do Happy.

Por exemplo, para permitir que o 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

O Happy armazena variáveis de configuração em ~/.happy_conf.json.

Processos em nós

O Happy fornece comandos para iniciar e parar processos nos nós simulados.

Para iniciar um processo, siga estas etapas:

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, ContinuaPing é o nome definido pelo usuário para o processo que o Happy usa para gerenciar o processo. 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 ContinuaPing, 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 ContinuaPing.

Uso de sudo

Happy altera a configuração de rede que é controlada pelo kernel do Linux. Como apenas root pode alterar a configuração do kernel, o Happy solicita que você insira a senha sudo durante a operação.

Feliz usa a variável de ambiente do sistema $SUDO para chamar sudo. Se $SUDO não estiver definido, Happy fará uma chamada normal de sudo.

Script do Python

Após a instalação, os pacotes do Happy Python podem ser importados em um ambiente Python usando a seguinte instrução import:

import happy

Os 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 recuperar opções de módulo HappyNodeAdd:

module options
import happy.HappyNodeAdd
options = happy.HappyNodeAdd.option()