Este é um módulo fantoche para configurar o Pulse Secure vTM - anteriormente:
Zeus Load Balancer
Zeus eXtensible Traffic Manager (ZXTM)
Zeus Traffic Manager
Riverbed Stingray
Riverbed SteelApp
Brocade vTM
O Puppet mudou a forma como os escapes eram tratados em strings entre aspas simples da versão 4 do Puppet.
A versão 1.x deste módulo inclui manifestos que suportam o fantoche 3.x.
A versão 2.x deve ser usada se você estiver usando o puppet 4.x ou superior.
Usando genManifests e genNodeConfig
Se você gerar seus próprios manifestos, haverá um sinalizador @PUP4X em lib/brocade/puppetmanifest
que controla o formato do manifesto. O sinalizador será verdadeiro nos módulos 2.x e falso nos módulos 1.x. Isso é tudo que você precisa alterar para alternar entre a geração de manifesto 3.xe 4.x.
Se você deseja gerenciar vTMs executando versões 9.9 e superiores, você pode usar 1.33.x
No entanto, se você quiser acessar todos os recursos do seu vTM atual, use a versão mais recente da API disponível
Versão vTM | API REST | Versão do fantoche 3.x | Versão fantoche 4+ |
---|---|---|---|
10.4 (LTS) | 3.8 | 1.38.x | - |
17.2 (LTS) | 4,0 | 1.400.x | 2.400.x |
17.3 | 5,0 | 1.500.x | 2.500.x |
17.4 | 5.1 | 1.501.x | 2.501.x |
18.1 | 5.2 | 1.502.x | 2.502.x |
18.2 | 6,0 | 1.600.x | 2.600.x |
Veja as notas sobre o versionamento do módulo abaixo....
Este módulo não envolve a implantação do vTM. Há muitas maneiras de automatizar a implementação do vTM dependendo de onde ele está sendo executado... Incluindo:
Cloud APIs (Amazon, RackSpace, Joyent, etc, etc)
Docker modules (if you use docker)
puppetlabs-vsphere (if you run ESXi)
Guest Customisations (if you run ESXi)
cloud-init (Openstack and others)
./zinstall --replay-from= on generic Linux
Depois de levantar seu vTM. Este módulo pode ajudá-lo a gerenciar a configuração dessa instância vTM.
Você pode tentar um destes locais:
Pulso Seguro - Informações vADC
Pulse Secure - Experimente agora
Pulse Secure - Documentação vADC
Pulse Secure - Imagem Docker vTM
O versionamento deste módulo não segue exatamente o Versionamento Semântico.
Quero indicar a versão da API REST fornecida no número da versão e, portanto, em vez de usar
Principal . Menor. Correção
Incluímos a versão restante da API no número Menor.
Versão do módulo. API-Maior + API-Menor . Correção
Por exemplo.
puppet module install pulse-pulsevtm
puppet module install pulse-pulsevtm -v 1.35.0
puppet module install pulse-pulsevtm -v '>=1.35.0 <1.36.0'
Ao declarar sua classe pulsevtm, você deve fornecer um parâmetro rest_user
e rest_pass
. Todos os outros parâmetros são opcionais.
Defaults:
rest_user = undef
rest_pass = undef
rest_ip = 127.0.0.1
rest_port = 9070
purge = false
purge_state_dir = undef
Por padrão, o fantoche se preocupa apenas com a configuração que você declara explicitamente. Se existir configuração no vTM que não esteja incluída no manifesto do seu nó, ela será ignorada.
Se você deseja que o puppet remova a configuração não gerenciada, você pode definir $purge => true
(e fornecer um local para o módulo armazenar o estado $purge_state_dir
). O Puppet armazenará então os nomes dos recursos conhecidos no diretório de estado e removerá todos os recursos desconhecidos do vTM.
Aviso: a purga é perigosa! Aviso: Se você usar $purge
, deverá incluir os objetos de configuração padrão. (ou seja, não use genNodeConfig -n
)
Exemplo simples de serviço web. Utiliza um único VIP com dois servidores virtuais: HTTP e HTTPS. O serviço HTTPS descarrega SSL e ambos usam o mesmo pool de servidores.
class { 'pulsevtm':
rest_user => 'puppet',
rest_pass => 'master',
rest_ip => '10.1.1.22',
}
include pulsevtm::global_settings
pulsevtm::traffic_ip_groups { 'Web%20VIP':
ensure => present,
basic__enabled => true,
basic__ipaddresses => ["10.1.1.10"],
basic__machines => ["vtm1.internal.local"],
}
pulsevtm::virtual_servers { 'WebService':
ensure => present,
basic__enabled => true,
basic__listen_on_any => false,
basic__listen_on_traffic_ips => ["Web VIP"],
basic__pool => "WebPool",
basic__port => 80,
}
pulsevtm::virtual_servers { 'WebService%20SSL':
ensure => present,
basic__enabled => true,
basic__listen_on_any => false,
basic__listen_on_traffic_ips => ["Web VIP"],
basic__pool => "WebPool",
basic__port => 443,
basic__ssl_decrypt => true,
ssl__server_cert_default => 'TEST-CERT',
}
pulsevtm::pools { 'WebPool':
ensure => present,
basic__nodes_table => '[{"node":"10.1.1.1:80","priority":1,"state":"active","weight":1}]',
}
pulsevtm::ssl_server_keys { 'TEST-CERT':
ensure => present,
basic__note => '',
basic__private => '-----BEGIN RSA PRIVATE KEY-----nMIIEpAIBAAKCAQEAsiZD53KCrcN3r4yAW6GwkITYEQyzg1bbDP8fiRvaWJxOgRtEn/8E4KRDdeqOCuV1YNuLaTsfCkF34T4pvI00wZ5lSdXBnVrEie49ip7z0QNQ/W4mvnDzkDQ/Och1lRevflAhJUfgiVizCxDbxJfR6oSip3RAeGarBIhp7TlfLKQj7YdnIynFROcHIMkLZ7aq7tUzVvcGonz5YXrmDDKFoGvbaJnNC0SAiM0aJIomOlexQmL4cgInhQQ1YlrF9hnulSbZN20zNz8fSeJ1UmyUgrYqLgzLXUb54pqK1aGg4rQNIqwoAbyqnibqzc2rO/o6MXgEb9zzFwAyHI38nptE7OdiC+wIDAQABAoIBAEk98iz1p0RJWKuTn2DHUCANimnJoBmW5D9YIDa8RBHPpz1zFGVkM10oK5QPGtbf/6ISoP5ikCBnSiIQrnJgYddgkhwAUIcXPy33ptOOI9jS4aFPJNaOuZRP5q6a+7yQQFZuGzJ4mpfdH78s7yn2kPWltnnG6GcdmbmkurF4beEWiNhgsex2hLhhj20oVUaGF1BGMdrp20vYE496B52n4Wuax9lfFoFuv8FAz96EZQOQS6J1Wf+o0qqZYNDaBRI5wi3EjrNpcEHhELp9eHeGnnFwDgQD15HyK2Qio4ig3T386OTUGT/FCNMxqT3wDn4ov+kTFtDoI+2qvJ/l6vULvn20f50AECgYEA6f7K1jVb7nNLwUjPld0azXbQgE3mdlwJVI8urz80JLQwKckg53tPngol8NaZOxo7gQlML/5ltK/y5cW6B2JhxjFtNoAAzNNBmGTRvLpLK3HHGEfVRVexZn8ZmssEzG49Xk6l1A7O+UWgqFUMlLBcYFKEvvGS8efcXBLwOV7G3EXxsCgYEAwucKnJ4jN8ECtDuMHY0sKbbfLXpqPS7KMfdWio1SaR1ctEos5wrKaX3vG3Zbiz6weYCkontNI9ioQVQ7D0Uc+lhhhlxeHAVnNFJhpZowYdf44mI/LCW2pga3dOZ9vDRqWP29KGnUwzH1RfXPtZBqMC5vPHd42kAGgGXwBvPZChOSaECgYEAiNjyV4StVy8mxsuGW+cLnnc428lKczevVqRZz/xm/rReUc1ulWrvLLFSrx9STjZxRm3hmM/3O00LiUWyHk9zTny3o6U7DKQcD/dQ4tV9eRvIrtg+MsxkuL7rgpPpIoX2bgkhAnwGn9IQu2HCEdNyswnKPj/xILCGlxlNtGqBLPNfLECgYEAlYqHtAW3XRuCrOVsibbN7ZkTpSaZw87fFL2Rn6BfFt+8fWhcQ3l4DLDfgQay/oe/B7q4l2XdmWJ03Y5SmIQ9dRSH7FHU+Chave6jEnFd1fTLtYcESW82UPTeVgdzebAN2PH27MOXSY7ts3/7KM9lnJKTu6r/2kYk/Oi0vLnOGHkj4ECgYBaxw/qFIMWAvi8r84cbUG/PYivHeJNJ53EhXE6UZPxi6QuVhlbitrinHk6SP443RCdjAR9IiZoDQkl+yW0z86ZShJYXF+1JFQU+ftsRzCtfx2XLD5dQO5qnnleXIH8z/4lUuPMyBw5bGj9eRXat7/SI2W6cuksMHLIMBiAognmdvRw==n-----END RSA PRIVATE KEY-----n',
basic__public => '-----BEGIN CERTIFICATE-----nMIIDFjCCAf4CCQD4M1+rCABUDjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQGEwJHnQjESMBAGA1UEBxMJQ2FtYnJpZGdlMRAwDgYDVQQKEwdCcm9jYWRlMRgwFgYDVQQDnEw93d3cuYnJvY2FkZS5jb20wHhcNMTUwODIwMTQ1MzQ3WhcNMTYwODE5MTQ1MzQ3nWjBNMQswCQYDVQQGEwJHQjESMBAGA1UEBxMJQ2FtYnJpZGdlMRAwDgYDVQQKEwdCncm9jYWRlMRgwFgYDVQQDEw93d3cuYnJvY2FkZS5jb20wggEiMA0GCSqGSIb3DQEBnAQUAA4IBDwAwggEKAoIBAQCyJkPncoKtw3evjIBbobCQhNgRDLODVtsM/x+JG9pYnnE6BG0T/wTgpEN16o4K5XVg24tpOx8KQXfhPim8jTTBnmVJ1cGdWsSJ7j2KnvPRAn1D9bia8POQND85yHWVF69+UCElR+CJWLMLENvEl9HqhKKndEB4ZqsEiGntOV8spCnPth2cjIVE5wcgyQtntqru1TNW9waifPlheuYMMoWga9tomc0LRICIzRokiiY6V7FnCYvhyAiFBDViWsX2Ge6VJtk3bTM3Px9J4nVSbJSCtiouDMtdRvnimorVoaDitA0inrCgBvKqJurNzas7+joxeARv3PMXADIcjfyem0Ts52IL7AgMBAAEwDQYJKoZIhvcNnAQELBQADggEBAJcuRIh3ngpFz0nHym5z56tbzHBrjF3frwp75Nknz3kuyCjdG7NrnPF5WvDl7lb1WX9EgAn/vJznYCmMxbjnUhHTMIMWbyIoTKJIIHCsrDyiK21NoI3nYnu/9V1TADGdkqGSag00UqygF4nVkbvKJcjXHq9t0zz56xAvCamBvlNCkJ0/mQN3Qdn5r/HgiRX69MSG1RRAFB+rkZInGekedLumBYCuALFCY5SB1+ns9XtGGJGRMh74oUpngjE62k/mEGPhLaXGJRupY07ezQKJOMBLRN1+HzIETsdH68FDdowFLzcH8fOn9HIgnCuhlcpfk5VfCaeIqdqYEsrxY+KADA8ss06M=n-----END CERTIFICATE-----n',
basic__request => '-----BEGIN NEW CERTIFICATE REQUEST-----nMIICkjCCAXoCAQAwTTELMAkGA1UEBhMCR0IxEjAQBgNVBAcTCUNhbWJyaWRnZTEQnMA4GA1UEChMHQnJvY2FkZTEYMBYGA1UEAxMPd3d3LmJyb2NhZGUuY29tMIIBIjANnBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsiZD53KCrcN3r4yAW6GwkITYEQyzng1bbDP8fiRvaWJxOgRtE/8E4KRDdeqOCuV1YNuLaTsfCkF34T4pvI00wZ5lSdXBnnVrEie49ip7z0QNQ/W4mvDzkDQ/Och1lRevflAhJUfgiVizCxDbxJfR6oSip3RAeGnarBIhp7TlfLKQj7YdnIyFROcHIMkLZ7aq7tUzVvcGonz5YXrmDDKFoGvbaJnNC0SnAiM0aJIomOlexQmL4cgIhQQ1YlrF9hnulSbZN20zNz8fSeJ1UmyUgrYqLgzLXUb5n4pqK1aGg4rQNIqwoAbyqibqzc2rO/o6MXgEb9zzFwAyHI38nptE7OdiC+wIDAQABnoAAwDQYJKoZIhvcNAQELBQADggEBAGnf+2VPIY8zW6IE2htseeLHxH5SlNc6GJsInkGmc9WG72yV97EakpzwsIgsz06QXwCh+HloNUPZQAQ9KcUFhskLXxLE7PYXKnPLrnMMAvA7aqCGPhb3/p738tT+G9IKUQfkbYmvY4ROIk56XzWT0ufVTw11jrIglQXo+gnWdJt2MbNC6f/1+NVL85q9pRBvFSeBk7D43U/B+KkM/7wmB+5fMB6DJfRAHCvjOEInX56MyO4UJXsvs9jriDHLoqpAu3IkV1oxGzdaE/dRveqq21q1hz5S2PaOU5jPzetHnAra3APjd55zS5EGex8t82ZJbI3aru2lPl6ztfErSWQLGNrxbVlE=n-----END NEW CERTIFICATE REQUEST-----n',
}
O diretório bin contém as ferramentas usadas para gerar os arquivos de manifesto para este módulo.
cleanup
- remove os manifestos atuais e arquivos de suporte
updateDocs
– gera documentação para uso nos manifestos
genManifests
- gera os próprios manifestos.
genNodeConfig
- gera um manifesto de nó diretamente de um vTM
Você pode fazer upgrade ou downgrade para qualquer versão da API usando essas ferramentas. Por exemplo, para atualizar para a API REST versão 3.5, você pode executar
./bin/cleanup -d
./bin/updateDocs -d zxtm10.1/3.5
./bin/genManifests -v 3.5 -h <clean vtm host> -U admin -P password -d 1
Eu recomendo que você execute genManifests em um host vTM recém-criado/limpo, a menos que você queira incluir explicitamente algumas de suas configurações como manifestos padrão.
Esta ferramenta é a mais útil para a maioria das pessoas. Ele permite que você crie um manifesto importando a configuração de um vTM pré-configurado.
Por padrão, ele gerará configuração para todos os objetos em sua configuração e incluirá todos os parâmetros para esses objetos. Você pode dizer à ferramenta para gerar um arquivo de configuração esparso com -s
ou para ignorar objetos integrados não modificados com -n
.
Uso:
Usage: genNodeConfig [options]
Specific options:
-h, --host <vTM Host> The hostname or ip address of the vTM to probe
-p, --port <vTM Port> The REST API port of the vTM to probe
-v, --version <REST Version> The REST Version
-U, --user <username> The REST API User
-P, --pass <password> The REST API Password
-o, --outfile <filename> The output file to write
-b, --bindir <filename> The directory in which to store any binary content (eg rules)
-m, --mandir <manifest dir> The location of the manifests
-d, --debug <level> The Debug level, 0 (lowest) to 5 (highest)
-s Generate a sparse configuration (ignore default params)
-n Generate a sparse configuration (ignore built-in objects)
-?, --help Show this message
Mandatory Parameters: --version, --user, --password, --outfile
Para gerar o menor manifesto possível, sem padrões/objetos integrados, você usaria:
./bin/genNodeConfig -h vtm1 -v 3.3 -U admin -P admin -d 1 -o vtm1_manifest.pp -s -n
Para gerar uma configuração completa – que é o método padrão e recomendado:
./bin/genNodeConfig -h vtm1 -v 3.3 -U admin -P admin -d 1 -o vtm1_manifest.pp
Qualquer configuração não JSON/binária será armazenada em arquivos, prefixados com o arquivo de saída. Você pode usar -b dir
para especificar uma pasta para colocá-los.
Nota: O vTM não fornece chaves SSL privadas por meio da API REST. Portanto, esta ferramenta não pode armazenar suas chaves privadas. Em vez disso, armazenará uma impressão digital SHA256 fornecida pelo REST. Você precisará adicionar manualmente suas chaves privadas ao seu manifesto, se desejar.
Exclua os arquivos em manifestos, modelos, arquivos e, opcionalmente, skel/docs e, em seguida, copie a configuração inicial da pasta skel.
Uso:
Usage: cleanup [options]
Specific options:
-y, --jfdi Just do it, don't ask me
-d, --docs Clean the skel/docs tree too
-?, --help Show this message
Para limpar todos os arquivos, incluindo a documentação em skel/docs
./bin/cleanup -d
A configuração inicial contém apenas init.pp, você precisará executar genManifests após executar a limpeza
Você precisará ter uma cópia dos esquemas REST disponíveis para usar isso. Os esquemas podem ser encontrados em $ZEUSHOME/zxtm/etc de qualquer versão 10.0 e mais recente do vTM. Extraia os esquemas em uma pasta e aponte a ferramenta para eles.
Uso:
Usage: updateDocs [options]
Specific options:
-y, --jfdi Just do it, don't ask me
-d, --dir REST FOLDER folder containing REST schemas
-o, --outdir Docs Folder output folder for documentation
-?, --help Show this message
Mandatory Parameters: --dir
Se você deseja criar documentação para a versão 3.3 da API, a partir de uma cópia ZXTM 10.1 dos esquemas REST, você pode usar
./bin/updateDocs -d zxtm-10.1/3.3
updateDocs coloca um arquivo markdown para cada esquema REST na pasta skel/docs. A ferramenta genManifests procurará nesta pasta enquanto cria manifestos, portanto, você deve garantir o uso da mesma versão da API em ambos.
Eu mesmo escrevi os manifestos init.pp e purge.pp, o restante é gerado por um script Ruby. O script percorre a API REST do vTM e, em seguida, grava manifestos para cada tipo e objeto encontrado.
A versão da API dos manifestos é indicada pelo número do meio (o número secundário) na string da versão. Qualquer versão "x.33.z" indicaria REST API 3.3 e é compatível com vTM versão 9.9 (LTS) e mais recente.
Se você estiver executando uma versão anterior à 9.9, provavelmente deverá atualizar.
Uso:
Usage: genManifests [options]
Specific options:
-h, --host <vTM Host> The hostname or ip address of the vTM to probe
-p, --port <vTM Port> The REST API port of the vTM to probe
-v, --version <REST Version> The REST Version
-U, --user <username> The REST API User
-P, --pass <password> The REST API Password
-d, --debug <level> The Debug level, 0 (lowest) to 5 (highest)
-y, --[no-]jfdi Don't print warning, just do it
-?, --help Show this message
Mandatory Parameters: --version, --user, --password
A ferramenta Ruby que gera os manifestos está incluída e pode ser encontrada em bin/genManifests.
Se você quiser usar o puppet para gerenciar uma versão anterior à 9.9 (ou seja, uma versão mais antiga da API), então genManifests pode ajudar.
Todas as versões do vTM lançadas desde 9.9 ainda têm suporte para API versão 3.3, mas se desejar fazer uso de chamadas ou recursos de API mais recentes, você pode regenerar seus manifestos usando esta ferramenta.
./bin/genManifests -h <vTM Host> -v <API Version> -U <User> -P <Pass> -d <debug level>
A ferramenta gera manifestos percorrendo a API. Quaisquer tipos encontrados (por exemplo, servidores virtuais, pools, monitores) são criados tipos definidos, para que você possa implantar instâncias desses tipos. Qualquer configuração encontrada será usada para gerar Classes. Por exemplo, os monitores padrão são criados como classes, então você pode simplesmente include pulsevtm::moinitors_simple_http
.
Isso tem o efeito colateral interessante de também poder gerar classes para qualquer configuração padrão que você deseja incluir. Por exemplo, você poderia ter uma classe personalizada para sua chave FLA criada simplesmente carregando a chave FLA antes de executar genManifests. Em seguida, include pulsevtm::licenses_myfla