Ejemplo: Conectar un equipo al sitio

En este ejemplo se muestra cómo puede utilizar el Administrador de ArcGIS 10.1 for Server mediante programación API para agregar un equipo de servidor SIG a un sitio existente. Esta consta de cuatro partes:

  1. Obtener un token administrativa
  2. Conectar el equipo al sitio
  3. Agregar el equipo a un clúster
  4. Arrancar el equipo (lo que significa que ArcGIS 10.1 for Server es consciente de la máquina y puede comenzar a enviar peticiones)

Cuando trabaja con un multi equipo, recuerde que el token administrativo sólo se puede utilizar en el equipo en que se pide. Aunque cualquier equipo en un sitio puede recibir una solicitud, debe estructurar sus secuencias de comandos para que todas las solicitudes se realicen en el mismo equipo que originalmente ha recibido la solicitud de token y devuelve el token.

# Demonstrates how to join a machine to a site # For HTTP calls import httplib, urllib, json # For system tools import sys, os # For reading passwords without echoing import getpass # Defines the entry point into the script def main(argv=None):     # Print some info     print     print "This sample script joins a machine to a site"     print          # Ask for server name & site. Server name should be qualified in the format MACHINE.ESRI.COM     serverName = raw_input("Enter name of machine that will join the site: ")     targetHostName = raw_input("Enter name of machine already in target site: ")     serverPort = 6080      targetSite = "http://" + targetHostName +  ":" + str(serverPort) + "/arcgis/admin"      targetCluster = raw_input("Enter the name of the cluster for the new machine (or leave blank for default): ")      if targetCluster == "":         targetCluster = "default"          # Ask for an ArcGIS 10.1 for Server administrator user name and password     username = raw_input("Enter ArcGIS 10.1 for Server site administrator username: ")     password = getpass.getpass("Enter ArcGIS 10.1 for Server site administrator password: ")          # Get a token     token = getToken(username, password, targetHostName, serverPort)     if token == "":         print "Could not generate a token with the username and password provided."         return               #Join machine to site     joinedSuccess = joinMachineToSite (targetSite, serverName, serverPort, username, password)     if joinedSuccess == False:         print "Failed to join " + serverName + " to site"         return          #Add machine to cluster     addToClusterSuccess = addMachineToCluster(targetCluster, targetHostName, serverName, serverPort, token)     if addToClusterSuccess == False:         print "Failed to add " + serverName + " to cluster"         return          #Start machine     startMachineSuccess = startMachine(targetHostName, serverPort, token)     if startMachineSuccess == False:         print "Failed to start " + serverName          return   # A function that joins a machine to a site def joinMachineToSite(targetSite, joiningMachine, port, username, password):          # Construct URL to create a new site     joinSiteURL = "/arcgis/admin/joinSite"          # Set up parameters for the request     params = urllib.urlencode({'username': username, 'password': password, 'adminURL': targetSite, 'f': 'json'})          headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}          # Connect to URL and post parameters         httpConn = httplib.HTTPConnection(joiningMachine, port)     httpConn.request("POST", joinSiteURL, params, headers)          # Read response     response = httpConn.getresponse()     if (response.status != 200):         httpConn.close()         print "Error while joining the machine to the site."         return False     else:         data = response.read()         httpConn.close()                  # Check that data returned is not an error object         if not assertJsonSuccess(data):                       print "Error returned by operation. " + str(data)             return False         else:             print "Success."             return True  # A function that adds a machine to a cluster def addMachineToCluster(targetCluster, siteServer, machineToAdd, port, token):          # Construct URL to add machine to cluster     addClusterURL = "/arcgis/admin/clusters/" + targetCluster + "/machines/add"          # Set up parameters for the request     params = urllib.urlencode({'token': token, 'machineNames':machineToAdd, 'f': 'json'})          headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}          # Connect to URL and post parameters         httpConn = httplib.HTTPConnection(siteServer, port)     httpConn.request("POST", addClusterURL, params, headers)          # Read response     response = httpConn.getresponse()     if (response.status != 200):         httpConn.close()         print "Error while adding machine to the cluster."         return False     else:         data = response.read()         httpConn.close()                  # Check that data returned is not an error object         if not assertJsonSuccess(data):                       print "Error returned by operation. " + str(data)             return False         else:             print "Success."             return True      # A function that starts a machine def startMachine(machineToStart, port, token):     #return True         # Construct URL to add machine to cluster     startMachineURL = "/arcgis/admin/machines/" + machineToStart + "/start"          # Set up parameters for the request     params = urllib.urlencode({'token': token, 'f': 'json'})          headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}          # Connect to URL and post parameters         httpConn = httplib.HTTPConnection(machineToStart, port)     httpConn.request("POST", startMachineURL, params, headers)          # Read response     response = httpConn.getresponse()     if (response.status != 200):         httpConn.close()         print "Error while starting the machine."         return False     else:         data = response.read()         httpConn.close()                  # Check that data returned is not an error object         if not assertJsonSuccess(data):                       print "Error returned by operation. " + str(data)             return False         else:             print "Success."             return True  # A function to generate a token given username, password and the adminURL. def getToken(username, password, serverName, serverPort):          # Token URL is typically http://server[:port]/arcgis/admin/generateToken     tokenURL = "/arcgis/admin/generateToken"          # URL-encode the token parameters     params = urllib.urlencode({'username': username, 'password': password, 'client': 'requestip', 'f': 'json'})          headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}          # Connect to URL and post parameters     httpConn = httplib.HTTPConnection(serverName, serverPort)     httpConn.request("POST", tokenURL, params, headers)          # Read response     response = httpConn.getresponse()     if (response.status != 200):         httpConn.close()         print "Error while fetching tokens from admin URL. Please check the URL and try again."         return     else:         data = response.read()         httpConn.close()                  # Check that data returned is not an error object         if not assertJsonSuccess(data):                         return                  # Extract the token from it         token = json.loads(data)                 return token['token']      # A function that checks that the input JSON object  #  is not an error object. def assertJsonSuccess(data):     obj = json.loads(data)     if 'status' in obj and obj['status'] == "error":         print "Error: JSON object returns an error. " + str(obj)         return False     else:         return True               # Script start if __name__ == "__main__":     sys.exit(main(sys.argv[1:]))
9/11/2013