Base de conocimientos  /  Cloud Application Manager  /  Administrar su organización
Base de conocimientos  /  Cloud Application Manager  /  Administrar su organización

Integrar soluciones de gestión de la red con Webhooks

Actualizado por Arya Roudi y Sergio Quintana el 22 de mayo de 2019
Código del artículo: kb/402

En este artículo:

Resumen

Cloud Application Manager se integra con las soluciones de gestión de redes IPAM, DNS, DHCP y CMDB a través de webhooks. Los Webhooks están disponibles en Enterprise Edition.

Un webhook requiere un servicio web personalizado para conectarse con su solución de gestión de red. Puede crear este servicio web personalizado como una casilla. Mostraremos cómo funciona usando Infoblox como ejemplo.

Supongamos que usted implementa una instancia para vCenter desde Cloud Application Manager. Cloud Application Manager se comunica con el servicio web Infoblox personalizado por webhook y proporciona las configuración de IP de la instancia. El servicio web lo pasa a Infoblox. Una vez que el servicio web obtiene el nombre de dominio y la IP de Infoblox, regresa la información a Cloud Application Manager, que asigna la configuración de IP a la instancia.

Público

Todos los usuarios con acceso de administrador de organización de Cloud Application Manager.

Requisitos previos

  • Acceso a Cloud Application Manager, sitio Management (gestión).

  • El usuario debe ser un administrador de la organización en Cloud Application Manager.

  • El usuario debe estar en el ámbito a nivel de la organización para poder acceder a la opción Settings (configuración) en el menú de la izquierda. También se puede acceder a esa opción a través del botón del lápiz de un elemento de la organización en Context Switcher.

Integrar con Infoblox 

En este ejemplo, Infoblox proporciona una IP estática y un nombre de domino para cada instancia que implemente a través de Cloud Application Manager en vCenter.

Antes de empezar

  • Cree una especificación personalizada en vCenter para Linux y Windows si se implementa en ambas plataformas.

  • Instale Infoblox y configúrelo de la siguiente manera:

    1. Cree una red para cada red vCenter en la que usted implemente desde Cloud Application Manager. Esto tiene el rango de CIDR de direcciones IP que Infoblox puede asignar. En Data Management (gestión de datos) > Toolbar (barra de herramientas), haga clic en Add (agregar) y en Add Network (agregar red).

    2. Agregue atributos globales extensibles para las redes de vCenter. En Administration (administración) > Extensible Attributes (atributos extensibles), agregue estos cuatro:

    Infoblox Global Extensible

    • Network (red): nombre de la red de vCenter.
    • Gateway: dirección del nodo de la gateway de la red de vCenter.
    • Netmask (máscara de red): dirección de la subred de la red de vCenter.
    • DNS Suffix (sufijo DNS): sufijo del nombre de dominio que registra y resuelve el nombre de DNS.
    1. Agregue los cuatro atributos globales extensibles a cada red. Edite cada red. En Extensible Attributes (atributos extensibles), agregue los atributos y especifique los valores.
      Red Infoblox Global Extensible 

      Cuando usted realiza la implementación, Cloud Application Manager mapea la red que usted selecciona en la política de implementación en estos atributos de la red Infoblox para obtener la configuración correcta de IP.

Pasos

  1. Cree un servicio web Infoblox personalizado. Definimos el servicio web en una casilla. Contáctenos para que compartamos la casilla con usted.

    Servicio web Infoblox personalizado

    Instalar script

    Esta casilla instala Python, las dependencias de Python y el servidor web 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
    

    Configurar script

    La casilla configura Apache usando la variable de archivo virtual.conf. Para crear el punto de enlace del servicio web, ejecuta el script webhook.py desde una variable de archivo.

    #!/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
    

    Esta es la secuencia de Python para crear el punto de enlace del servicio web:

    #!/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 la casilla del servicio web Infoblox personalizado. Damos valores a la dirección, la contraseña y el usuario. Estas son credenciales de administrador para acceder a Infoblox.

    Implementar el servicio web Infoblox personalizado

  3. Agregue el punto de enlace del servicio web Infoblox personalizado como un webhook. En Admin Settings (configuración de administrador) > Webhooks, ingrese el punto de enlace del servicio web implementado como un webhook, de la siguiente forma: http://endpoint_of_webservice_instance/requestIP

    Webhool del servicio web Infoblox

  4. Para observar la integración de Infoblox en acción, implementamos una instancia de Cloud Application Manager para vCenter.
    En la política de implementación, seleccionamos una especificación personalizada. Esto actúa como soporte para la información de la red que Cloud Application Manager obtiene de Infoblox. vCenter anula los valores de la especificación personalizada con los valores de Infoblox.

Comunicarse con soporte de Cloud Application Manager

Lamentamos que esté teniendo problemas en el Gestor de aplicaciones en la nube. Revise los consejos para solucionar problemas o comuníquese con soporte de Cloud Application Manager para proporcionar detalles y capturas de pantalla de ser posible.

Para problemas relacionados con las llamadas API, envíe el cuerpo de la solicitud junto con los detalles del problema.

En el caso de error de casilla, comparta la casilla en el espacio de trabajo en el que su organización y Cloud Application Manager pueden ingresar y adjunte los registros.

  • Linux: SSH y busque el registro en /var/log/elasticbox/elasticbox-agent.log
  • Windows: RDP dentro de la instancia para ubicar el registro en ProgramDataElasticBoxLogselasticbox-agent.log
Powered by Translations.com GlobalLink OneLink SoftwarePowered By OneLink