info_i_25x25.png See important information about Ubiquiti Devices and KRACK Vulnerability in this article. We will update this document as more information becomes available.

EdgeMAX - Tutorial de instalação do assistente com exemplos

Visão geral


Os leitores aprenderão como configurar o recurso de assistentes de configuração para EdgeRouters.

 

Um assistente de trabalho inclui quatro partes:

  1. Ver os..--wizard.html
  2. Validator..--validator.json
  3. processo de back-end..--assistente de gerência (Assistente de gerência é um shellscript no exemplo que se segue posteriormente neste artigo)
  4. formato de resultado - result.json (dependente as partes anteriores)

Abaixo está um screenshot de uma configuração do assistente de teste. Quando é clicado o botão aplicar, o sistema irá realizar a validação de acordo com o validador personalizado JSON formatado (se houver algo no validator.json). Supondo que a validação passa, a função adicionada no assistente de gerência será disparado na EdgeOS. No exemplo fornecido, a única "função" é salvar o resultado de formato JSON, ou seja, result.json para o diretório/tmp do roteador quando as alterações são aplicadas.

 

 

Arquivos explicados


Eis o conteúdo do arquivo wizard.html:

 

<div class="instructions">
    Test wizard configuration
</div>

<fieldset name="test" class="primary expanded">
    <legend>Title</legend>
    <div><span>Addable Configs:</span></div>
    <div class="clear"></div>
    <div class="addable" data-min="2" data-max="10" data-object="addable-test" data-objectify="1">
        <div class="addable-template">
            <div class="multi">
                <div><span class="text">Interfaces</span></div><div><span><select name="interfaces" /></span></div>
                <div><span class="text">text input</span></div><div><input type="text" name="text" data-infotip='This is a test infotip.' /></div>
                <div><span class="text">same line checkbox</span></div><div><input name="nchecks" type="checkbox" value="nc" /><span data-infotip='This is a same line checkbox.'>c2</span></div>
            </div>
            <div class="clear"></div>
            <div><span class="text" style="width:110px;">new line checkbox</span></div><div><input name="checks" type="checkbox" value="c" /><span data-infotip='This is a new line checkbox.'>c1</span></div>
            <div><button type="button" class="addable-remove">Remove</button></div>
            <div class="clear"></div>
        </div>
        <div class="addable-container">
            <!-- the addable templates will be inserted here -->
        </div>
        <button type="button" class="addable-add">Add New</button>
    </div>
</fieldset>

Para a seção addable, há alguns atributos úteis:

 

<div class="addable" data-min="0" data-max="10" data-object="addable-test" data-objectify="1"></div>

dados-min é o número mínimo de modelos addable. Ele ainda será inicial o assistente com zero addables, mas se os dados-min é maior que zero, o primeiro (dados-min - 1) modelos não teria o botão remover. É o exemplo com dados-min = 2:

 

 

Como você pode ver, os dois primeiros addable entrada não tem botão remover.

 

<div class="addable" data-min="2" data-max="10" data-object="addable-test" data-objectify="1"></div>

dados-max é o número máximo de modelos addable. Se há um número máximo de modelos addable, seria desativado no botão Adicionar.

 

<div class="addable" data-min="2" data-max="10" data-object="addable-test" data-objectify="1"></div>

 objeto de dados é a chave da parte addable em result.json.

 

{                                                                               
    "addable-test":                                                             
    [                                                                           
        {                                                                       
            "interfaces": "e123",                                               
            "text": "1.1.1.1",                                                       
            "nchecks": "nc",                                                    
            "checks": "c"                                                       
        },                                                                      
        {                                                                       
            "interfaces": "eth0",                                               
            "text": "1.1.1.2",                                                       
            "nchecks": "nc",                                                    
            "checks": "c"                                                       
        },                                                                      
        {                                                                       
            "interfaces": "eth0",                                               
            "text": "1.1.1.3",                                                       
            "nchecks": "nc",                                                    
            "checks": "c"                                                       
        },                                                                      
        {                                                                       
            "interfaces": "eth0",                                               
            "text": "1.1.1.4",                                                       
            "nchecks": "nc",                                                    
            "checks": "c"                                                       
        }                                                                       
    ]                                                                           
}

Aqui está um exemplo para o validador:

 

{
    "rules": {
        "interfaces": {
            "required": true,
            "interfaceName": 1
        },
        "text": {
            "required": true,
            "ipv4": 1
        },
        "checks": {
            "required": true
        },
        "nchecks": {
            "required": true
        }
    }
}

No validador, nome dos métodos de validador são bastante intuitiva.  exigido significa que este campo é obrigatório, ipv4 significa a entrada para este campo tem de estar no formato ipv4 válido, e Nome_Da_Interface significa a sequência de entrada precisa ser um nome de interface válido. Cada validador procura o elemento com o nome correspondente. Dê uma olhada no script a seguir:

 

        "interfaces": {
            "required": true,
            "interfaceName": 1
        },

O script acima procura o elemento com o nome 'interfaces' e verifique se o campo estiver preenchido e se a entrada seqüência de caracteres é um nome de interface válido.

 

Eis algumas dicas para uma Convenção de nomenclatura dos elementos de entrada em wizard.html:

  1. nomes não começam com 'DİĞERLERİ'
  2. nomes não terminam com os números. Por exemplo, 'eth1' não é um nome válido para assistente. Você pode usar nomes mais específicos como 'eth1_address' e etc. em vez disso.
  3. Se uma das entradas tem um nome que é o prefixo do outro, não vai funcionar. Por exemplo, se as entradas com nomes de 'entrada' e 'inputa' estão sob a mesma forma de assistente, não pouparia resultado corretamente. Você pode mudar 'inputa', 'inputb'.
  4. nomes não contêm caracteres especiais 

 

O shos de captura de tela a seguir que o vista parece quando a validação falhar.

 

 

Se passa todas as validações, o aplicar função assistente de gerência é acionado. Se as alterações são aplicadas com êxito, você pode encontrar o JSON formatado resultado localizado no diretório/tmp.

 

Nota: O resultado é salvo apenas para fins de demonstração, e você pode escrever sua própria função de aplicar com ou sem salvá-los.