O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Happy Usage

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

Arquivos de estado

Happy armazena e mantém cuidadosamente seu estado de topologia em um arquivo JSON com um único registro. Usando este arquivo de estado, Happy pode executar os comandos apropriados para criar ou remover uma topologia.

O arquivo estado padrão está localizado na ~/.happy_state.json . O nome do estado padrão é happy , como visto no happy-state de saída:

happy-state

State Name:  happy

Estados paralelos

Happy oferece suporte a vários estados paralelos coexistentes. O estado actual é ditada pela HAPPY_STATE_ID variável ambiente. Se HAPPY_STATE_ID não existe no ambiente, o valor estado padrão happy é usado.

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

export HAPPY_STATE_ID="sunny"

Agora verificando happy-state resulta em um estado diferente:

happy-state

State Name:  sunny

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

Desinstalar com estados paralelos

Se você usar estados felizes paralelas e que deseja desinstalar feliz, certifique-se de executar happy-state-delete com cada estado ativo. Isso garante que todos os namespaces de rede criados por Happy sejam removidos de seu sistema sem afetar a configuração de rede do host 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 syslog por padrão. Um segundo backup de log é enviado para /tmp/${HAPPY_STATE_ID}_debug_log.txt .

Para exibir logs felizes, execute happy-state -l em um terminal separado. Quando você insere os comandos Happy, os logs mostram os comandos do shell Happy Issues em segundo plano. Esta é uma boa maneira de entender como Happy funciona, se você estiver interessado em namespaces de rede Linux.

Por exemplo, happy-node-add node00 cria um nó feliz. 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

Todos os Driver:CallCmd() linhas são os comandos shell que feliz chama. Considere cada linha do 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

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

As topologias estão no formato JSON e Shell Script.

JSON

Arquivos de topologia JSON são carregados usando o happy-state-load ou weave-state-load comandos. Se a topologia inclui Weave, você deve usar weave-state-load para carregar a topologia, caso contrário, os comandos específicos do Weave são ignorados.

Por exemplo, uma topologia sem Weave:

happy-state-load thread_wifi_ap_internet.json

Uma topologia com 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 teste ), use happy-shell -s :

happy-shell -s my_topology.json

Isso economiza o arquivo de estado topologia no $HOME diretório.

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. Esses scripts, por padrão, não têm permissões de executável. Eles podem ser executados de duas maneiras:

Usando a bash comando:

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

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 plug-in. Definir esses valores usando a happy-configuration comando.
<path-to-happy> /happy/conf/main_config.json Variáveis ​​de configuração primárias da Happy.
<path-to-happy> /happy/conf/log_config.json Configuração de log.

Adicionar variáveis ​​de configuração

Recomendamos que você use a happy-configuration comando para definir todas as variáveis pessoais ou plug-in para além dos padrões que sua implantação específica de Happy necessita.

Por exemplo, para deixar feliz saber onde encontrar o Weave test-apps de diretório para scripts de teste, defina o weave_path variável:

happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps

Lojas Happy configuração variáveis em ~/.happy_conf.json .

Processos em nós

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

Processo de saída é em /tmp . Por exemplo, depois de iniciar o processo ContinuousPing, verifique o /tmp diretório:

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

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

Uso de sudo

Happy muda a configuração de rede que é controlada pelo kernel do Linux. Uma vez que apenas root pode alterar a configuração do kernel, feliz pede que você digite o sudo senha durante a operação.

Feliz usa o $SUDO variável de ambiente sistema de chamada sudo . Se $SUDO não está definido, feliz faz um normais sudo chamada.

Script Python

Após a instalação, pacotes feliz Python podem ser importados para um ambiente Python utilizando o seguinte import declaração:

import happy

Módulos de comando individuais encontrados no /happy são importadas da seguinte forma:

import happy.HappyNodeAdd

Para recuperar opções de módulo, ligue para a option() função. Por exemplo, para recuperar HappyNodeAdd opções de módulo:

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