O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Uso feliz

Use o sinalizador -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 seu estado de topologia 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 , como visto na saída do happy-state :

 happy-state

State Name:  happy 

Estados paralelos

Happy suporta 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 do estado padrão de happy será usado.

HAPPY_STATE_ID não é criado durante a instalação feliz. Crie um com um valor diferente de state para mudar imediatamente para outro estado Happy.

 export HAPPY_STATE_ID="sunny"

Agora, a verificação happy-state resulta em um estado diferente:

 happy-state

State Name:  sunny 

Cada estado é mantido em seu próprio ~/.${HAPPY_STATE_ID}_state.json . Para alternar entre estados, execute o export HAPPY_STATE_ID=" <state-name> " novamente.

Desinstalar com estados paralelos

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

Histórico

Feliz envia logs para o syslog por padrão. Um segundo backup de log é enviado para /tmp/${HAPPY_STATE_ID}_debug_log.txt .

Para visualizar logs felizes, execute happy-state -l em uma janela de terminal separada. Quando você insere comandos felizes, os logs mostram os comandos do shell Problemas felizes em segundo plano. Essa é uma boa maneira de entender como o Happy funciona, se você estiver interessado nos namespaces da rede Linux.

Por exemplo, happy-node-add node00 cria um nó Happy. A saída do log para este 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 log:

# 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 teste. Também use-os para aprender os comandos para construir topologias complexas.

As topologias estão no formato 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 Weave, você deve 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 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 sua 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 da topologia no diretório $HOME .

Scripts de shell

Os arquivos de topologia de script do shell contêm o conjunto de comandos Happy e Weave para criar as topologias nos arquivos JSON correspondentes. Esses scripts, por padrão, 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

Aplicando permissões executáveis:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Configuração

Happy possui três arquivos de configuração:

Arquivo de configuração Descrição
~/.happy_conf.json Variáveis ​​de configuração para uso pessoal ou plug-in. Defina esses valores usando o comando happy-configuration .
<path-to-happy> /happy/conf/main_config.json Variáveis ​​de configuração feliz primária.
<path-to-happy> /happy/conf/log_config.json Configuração de log.

Adicionar variáveis ​​de configuração

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

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

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

Processos em nós

Happy fornece comandos para iniciar e parar processos dentro de 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 o Happy usa para gerenciar o processo. Use happy-process-wait para suspender a execução do processo e happy-process-stop para happy-process-stop o processo.

A saída do processo está em /tmp . Por exemplo, depois de iniciar o processo ContinuousPing, verifique o /tmp :

ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out

Este arquivo .out contém a saída para o processo ContinuousPing.

Uso de sudo

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

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

Script Python

Após a instalação, os pacotes Happy Python podem ser importados para um ambiente Python usando a seguinte instrução de 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 recuperar HappyNodeAdd opções do módulo HappyNodeAdd :

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