Base de conhecimento  /  Gerenciador de aplicativos em nuvem  /  Administração da sua organização
Base de conhecimento  /  Gerenciador de aplicativos em nuvem  /  Administração da sua organização

Integrar soluções de gerenciamento de rede com webhooks

Atualizado por Arya Roudi e Sergio Quintana em 22 de maio de 2019
Código do artigo: kb/402

Neste artigo:

Visão geral

O Cloud Application Manager integra-se às soluções de gerenciamento de rede de IPAM, DNS, DHCP e CMDB através de webhooks. Os webhooks estão disponíveis na edição corporativa.

Um webhook requer um serviço de rede customizado para se conectar à sua solução de gerenciamento de rede. Você pode criar este serviço de rede customizado como uma caixa. Mostraremos como isso funciona usando a Infoblox como exemplo.

Digamos que você implemente uma instância no vCenter a partir do Cloud Application Manager. O Cloud Application Manager chama o serviço de rede customizado da Infoblox pelo webhook e dá a configuração de IP da instância. O serviço de rede transmite para a Infoblox. Depois que o serviço de rede obtém o IP e o nome de domínio da Infoblox, ele retorna as informações para o Cloud Application Manager, que atribui a configuração de IP à instância.

Público

Todos os usuários com acesso de administrador da organização do Cloud Application Manager.

Pré-requisitos

  • Acesso ao site  de gerenciamento do Cloud Application Manager.

  • O usuário deve ser um administrador da organização no Cloud Application Manager.

  • O usuário deve estar no escopo da organização para acessar as Configurações no menu do lado esquerdo. O acesso a essa opção também é possível através do botão de lápis de um elemento de organização no alternador de contexto.

Integração com a Infoblox

Neste exemplo, a Infoblox fornece um IP estático e um nome de domínio para cada instância que você implementa por meio do Cloud Application Manager no vCenter.

Antes de começar

  • Configure uma especificação personalizada no vCenter para Linux e Windows, se estiver implementando em ambas as plataformas.

  • Instale o software da Infoblox e configure-o da seguinte forma:

    1. Crie uma rede para cada rede vCenter na qual você implementar a partir do Cloud Application Manager. Ela tem o intervalo de CIDR de endereços de IP que a Infoblox pode atribuir. Em Gerenciamento de dados > Barra de ferramentas, clique em Adicionar e Adicionar rede.

    2. Adicione atributos extensíveis globais para as redes do vCenter. Em Administração > Atributos Extensíveis, adicione esses quatro:

    Extensíveis globais da Infoblox

    • Network (rede) - Nome da rede do vCenter.
    • Gateway - Endereço do gateway do vCenter.
    • Netmask (máscara de rede) - Endereço de sub-rede para a rede vCenter.
    • DNS Suffix (sufixo DNS) - Sufixo do nome de domínio que registra e resolve o nome DNS.
    1. Adicione os quatro atributos extensíveis globais a cada rede. Edite cada rede. Em Atributos extensíveis, adicione os atributos e especifique os valores.
      Rede extensível global da Infoblox

      Ao implementar, o Cloud Application Manager mapeia a rede que você selecionou na política de implementação a esses atributos de rede da Infoblox para obter a correta configuração de IP.

Etapas

  1. Crie um serviço da rede customizado da Infoblox. Definimos o serviço de rede em uma caixa. Entre em contato conosco para compartilharmos a caixa com você.

    Serviço de rede customizado da Infoblox

    Script de instalação

    Esta caixa instala o Python, as dependências do Python e o servidor de rede Apache.

    #!/bin/bash
    
    yum -y install httpd mod_wsgi python-virtualenv
    curl -k https://bootstrap.pypa.io/get-pip.py | python
    
    pip install --upgrade bottle
    pip install --upgrade requests
    

    Script de configuração

    A caixa configura o Apache usando a variável de arquivo virtual.conf. Para criar o ponto de extremidade de serviço de rede, ele executa o script webhook.py de uma variável de arquivo.

    #!/bin/bash
    
    mkdir -p /var/www/webhook
    
    curl -k {{ VIRTUAL_CONF }} -o /etc/httpd/conf.d/default.conf
    curl -k {{ WEBHOOK_PY }} | elasticbox config -o /var/www/webhook/webhook.py
    

    Aqui está o script de Python para criar o ponto de extremidade do serviço de rede:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    Cloud Application Manager Confidential
    Copyright (c) 2013 All Rights Reserved, Cloud Application Manager Inc.
    
    '''
    NOTICE:  All information contained herein is, and remains the property
    of Cloud Application Manager. The intellectual and technical concepts contained herein are
    proprietary and may be covered by U.S. and Foreign Patents, patents in process,
    and are protected by trade secret or copyright law. Dissemination of this
    information or reproduction of this material is strictly forbidden unless prior
    written permission is obtained from Cloud Application Manager
    '''
    
    import json
    import bottle
    import requests
    
    from bottle import route, run, request
    
    def allocate_address_with_infoblox(network, name):
        net_url = \
            'https:///wapi/v1.4/network?_return_fields=extattrs&*Network=%s'
        ip_url = \
            'https:///wapi/v1.4/%s?_function=next_available_ip&num=1'
        a_record_url = 'https:///wapi/v1.4/record:a'
        ptr_record_url = \
            'https:///wapi/v1.4/record:ptr'
    
        auth = ('', '')
    
        networks = requests.get(net_url % network, auth=auth,
                                verify=False).json()
    
        if len(networks) > 0:
            address = requests.post(ip_url % networks[0]['_ref'],
                                    auth=auth, verify=False).json()['ips'
                    ][0]
    
            dns_suffix = networks[0]['extattrs']['Suffix']['value']
            name = '{0}.{1}'.format(dns_suffix, name)
    
            a_record = {'ipv4addr': address, 'name': name,
                        'view': 'default'}
            ptr_record = {'ipv4addr': address, 'ptrdname': name,
                          'view': 'default'}
    
            a_response = requests.post(a_record_url, auth=auth,
                                       data=json.dumps(a_record),
                                       verify=False)
            ptr_response = requests.post(ptr_record_url, auth=auth,
                    data=json.dumps(ptr_record), verify=False)
    
            return {
                'ipv4_address': address,
                'subnet_mask': networks[0]['extattrs']['Netmask']['value'],
                'default_gateway': networks[0]['extattrs']['Gateway'
                        ]['value'],
                'preferred_nameserver': '8.8.8.8',
                }
    
    def search(items, name):
        for item in items:
            if item['name'] == name:
                return item['value']
    
        return ''
    
    @route('/requestIP', method='POST')
    def requestIP():
        body = json.load(request.body)
        machine = body['machine']
        service = body['service']
        instance = body['instance']
    
        variables = []
    
        if 'vsphere' in machine['schema']:
            if instance['operation'] == 'terminate':
                print 'Deallocate IP address'
                return {}
    
            is_infoblox = True
            variables = instance['variables']
            for variable in instance['variables']:
                if variable['name'] == 'IPV4_ADDRESS' and variable['value'] \
                    != '':
                    is_infoblox = False
    
            if is_infoblox:
                network = allocate_address_with_infoblox(service['profile'
                        ]['network'], machine['name'])
                if network:
                    machine['customization'] = \
                        {'instance_networks': [network]}
            else:
                nameservers = find(variables, 'NAME_SERVERS')
                preferred_nameserver = nameservers.split(',')[0]
                alternate_nameserver = nameservers.split(',')[1]
    
                machine['customization'] = {
                    'ipv4_address': find(variables, 'IPV4_ADDRESS'),
                    'subnet_mask': find(variables, 'SUBNET_MASK'),
                    'default_gateway': find(variables, 'DEFAULT_GATEWAY'),
                    'preferred_nameserver': preferred_nameserver,
                    'alternate_nameserver': alternate_nameserver,
                    'dns_suffixes': find(variables, 'DNS_SUFFIXES'
                            ).split(','),
                    }
    
        return machine
    
    @route('/test//', method='GET')
    def testIP(network, name):
        return allocate_address_with_infoblox(network, name)
    
    application = bottle.default_app()
    
  2. Implemente a caixa de serviço de rede personalizada da Infoblox. Fornecemos valores para o endereço, senha e usuário. Estas são credenciais de administrador para acessar o software da Infoblox.

    Implementação de serviço de rede customizado da Infoblox

  3. Adicione o ponto de extremidade do serviço de rede customizado da Infoblox como um webhook. Em Admin Settings (configurações de administrador) >Webhooks, insira o ponto de extremidade do serviço de rede implementado como um webhook como: http://endpoint_of_webservice_instance/requestIP

    Webhook de serviço de rede da Infoblox

  4. Para ver a integração da Infoblox em ação, implementamos uma instância do Cloud Application Manager para o vCenter.
    Na política de implementação, selecionamos uma especificação personalizada. Funciona como um detentor das informações de rede que o Cloud Application Manager obtém do InfoBlox. O vCenter substitui os valores da especificação personalizada pelos valores do Infoblox.

Como contatar o suporte do Cloud Application Manager

Lamentamos que você tenha encontrado um problema com o Cloud Application Manager. Consulte as dicas de troubleshooting ou entre em contato com o suporte do Cloud Application Manager e apresente detalhes e capturas de tela, conforme possível.

Para problemas relacionados a chamadas de API, envie o corpo da solicitação junto com os detalhes referentes ao problema.

Em caso de erro de caixa, compartilhe a caixa no espaço de trabalho que sua organização e o Cloud Application Manager podem acessar e anexe os registros.

  • Linux: SSH e localize o registro em /var/log/elasticbox/elasticbox-agent.log
  • Windows: Windows: RDP na instância para localizar o registro em ProgramDataElasticBoxLogselasticbox-agent.log
Powered by Translations.com GlobalLink OneLink SoftwarePowered By OneLink