def cleanup(self, **kwargs): if not self.is_local(): return for name in os.listdir(self.etc_gridftp_d): if name.startswith("globus-connect-server") \ or name.startswith("globus-connect-multiuser") \ or name.startswith("gcmu"): os.remove(os.path.join(self.etc_gridftp_d, name)) self.cleanup_trust_roots() self.cleanup_logging() self.stop() self.disable() endpoint_name = self.conf.get_endpoint_name() server = self.conf.get_gridftp_server() scheme = "gsiftp" port = 2811 hostname = None if "://" in server: (scheme, server) = server.split("://", 1) if ":" in server: (hostname, port_s) = server.split(":", 1) port = int(port_s) else: hostname = server server = scheme + "://" + hostname + ":" + str(port) if kwargs.get("delete"): try: self.api.endpoint_delete(endpoint_name) except TransferAPIError as e: if e.status_code != 404: raise e else: (status_code, status_reason, data) = \ self.api.endpoint(endpoint_name) for sdata in data['DATA']: if sdata.get( gcmu.to_unicode('uri')) == gcmu.to_unicode(server): sid = sdata[gcmu.to_unicode('id')] try: self.api.endpoint_server_delete(endpoint_name, sid) except TransferAPIError as e: if e.status_code != 404: raise e
def cleanup(self, **kwargs): if not self.is_local(): return for name in os.listdir(self.etc_gridftp_d): if name.startswith("globus-connect-server") \ or name.startswith("globus-connect-multiuser") \ or name.startswith("gcmu"): os.remove(os.path.join(self.etc_gridftp_d, name)) self.cleanup_trust_roots() self.cleanup_logging() self.stop() self.disable() endpoint_name = self.conf.get_endpoint_name() server = self.conf.get_gridftp_server() scheme = "gsiftp" port = 2811 hostname = None if "://" in server: (scheme, server) = server.split("://", 1) if ":" in server: (hostname, port_s) = server.split(":", 1) port = int(port_s) else: hostname = server server = scheme + "://" + hostname + ":" + str(port) if kwargs.get("delete"): try: self.api.endpoint_delete(endpoint_name) except TransferAPIError as e: if e.status_code != 404: raise e else: (status_code, status_reason, data) = \ self.api.endpoint(endpoint_name) for sdata in data['DATA']: if sdata.get(gcmu.to_unicode('uri')) == gcmu.to_unicode(server): sid = sdata[gcmu.to_unicode('id')] try: self.api.endpoint_server_delete(endpoint_name, sid) except TransferAPIError as e: if e.status_code != 404: raise e
def cleanup(self, **kwargs): if not self.is_local(): return for name in os.listdir(self.etc_gridftp_d): if name.startswith("globus-connect-server") \ or name.startswith("globus-connect-multiuser") \ or name.startswith("gcmu"): os.remove(os.path.join(self.etc_gridftp_d, name)) self.cleanup_trust_roots() self.cleanup_logging() self.stop() self.disable() server = self.conf.get_gridftp_server() scheme = "gsiftp" port = 2811 hostname = None if "://" in server: (scheme, server) = server.split("://", 1) if ":" in server: (hostname, port_s) = server.split(":", 1) port = int(port_s) else: hostname = server server = scheme + "://" + hostname + ":" + str(port) if kwargs.get("delete"): try: self.api.delete_endpoint(self.endpoint_xid) if os.path.exists(self.endpoint_id_file): os.remove(self.endpoint_id_file) except GlobusAPIError as e: if e.http_status != 404: raise e else: try: result = self.api.get_endpoint(self.endpoint_xid) data = result.data except GlobusAPIError as e: if e.http_status != 404: raise e data = {'DATA':[]} for sdata in data['DATA']: if (sdata.get('uri') == gcmu.to_unicode(server)): sid = sdata['id'] try: self.api.delete_endpoint_server( self.endpoint_xid, sid) except GlobusAPIError as e: if e.http_status != 404: raise e
def bind_to_endpoint(self, **kwargs): """ Adds this gridftp server to the endpoint named in the configuration file. If force=True is passed, then the endpoint is deleted prior to binding this gridftp server. If reset=True is passed, then all other GridFTP servers will be removed from this endpoint before adding this one. """ self.logger.debug("ENTER: IO.bind_to_endpoint()") endpoint_name = self.conf.get_endpoint_name() if endpoint_name is None: return if kwargs.get('force'): try: self.logger.debug("Removing old endpoint definition") self.api.endpoint_delete(endpoint_name) except: pass self.logger.debug("Configuring endpoint " + endpoint_name) endpoint_public = self.conf.get_endpoint_public() endpoint_default_dir = self.conf.get_endpoint_default_dir() server = self.conf.get_gridftp_server() scheme = "gsiftp" port = 2811 hostname = None if "://" in server: (scheme, server) = server.split("://", 1) if ":" in server: (hostname, port_s) = server.split(":", 1) port = int(port_s) else: hostname = server server = scheme + "://" + hostname + ":" + str(port) oauth_server = None myproxy_server = None myproxy_dn = None if self.conf.get_security_identity_method() == \ self.conf.IDENTITY_METHOD_OAUTH: oauth_server = self.conf.get_oauth_server() if oauth_server is None: raise Exception("Configured to use OAuth, but no OAuth server defined") elif self.conf.get_security_identity_method() == \ self.conf.IDENTITY_METHOD_CILOGON: oauth_server = "cilogon.org" else: myproxy_server = self.conf.get_myproxy_server() myproxy_dn = self.conf.get_myproxy_dn() if myproxy_dn is None: myproxy_dn = self.get_myproxy_dn_from_server() if myproxy_server is not None: myproxy_server = gcmu.to_unicode(myproxy_server) if myproxy_dn is not None: myproxy_dn = gcmu.to_unicode(myproxy_dn) if oauth_server is not None: if ":" in oauth_server: raise Exception("[OAuth] Server value must be a public host name only") oauth_server = gcmu.to_unicode(oauth_server) new_gridftp_server = { u'DATA_TYPE': u'server', u'uri': gcmu.to_unicode(server), u'scheme': gcmu.to_unicode(scheme), u'hostname': gcmu.to_unicode(hostname), u'port': port, u'is_connected': True, u'subject': gcmu.to_unicode(security.get_certificate_subject(self.conf.get_security_certificate_file())), u'update': True, } try: (status_code, status_reason, data) = \ self.api.endpoint(endpoint_name) old_default_dir = data.get("default_directory") changed = False if old_default_dir is None or \ old_default_dir != endpoint_default_dir: self.logger.debug("Changing default_directory on endpoint " \ "from [%(old)s] to [%(new)s]" % { 'old': str(old_default_dir), 'new': endpoint_default_dir }) data[u'default_directory'] = \ gcmu.to_unicode(endpoint_default_dir) old_public = data.get('public') if old_public is not None and old_public != endpoint_public: data[u'public'] = endpoint_public if kwargs.get("reset"): servers_filtered = [new_gridftp_server] else: servers_filtered = [x for x in data[u'DATA'] \ if x[u'hostname'] != None and x[u'hostname'] != \ u'relay-disconnected.globusonline.org' and \ x[u'uri'] != gcmu.to_unicode(server)] servers_filtered.append(new_gridftp_server) data[u'DATA'] = servers_filtered data[u'myproxy_server'] = myproxy_server data[u'myproxy_dn'] = myproxy_dn data[u'oauth_server'] = oauth_server self.api.endpoint_update(endpoint_name, data) except TransferAPIError, e: if e.status_code == 404: self.logger.debug("endpoint %s does not exist, creating" %(endpoint_name)) try: (status_code, status_reason, data) = \ self.api.endpoint_create( endpoint_name, default_directory = endpoint_default_dir, public = endpoint_public, is_globus_connect = False, hostname=new_gridftp_server[u'hostname'], scheme=new_gridftp_server[u'scheme'], port=new_gridftp_server[u'port'], subject=new_gridftp_server[u'subject'], myproxy_server=myproxy_server, myproxy_dn=myproxy_dn, oauth_server=oauth_server) except TransferAPIError, e: self.logger.error("endpoint create failed: %s" % \ (e.message)) self.errorcount += 1
server = scheme + "://" + hostname + ":" + str(port) if kwargs.get("delete"): try: self.api.endpoint_delete(endpoint_name) except TransferAPIError, e: if e.status_code != 404: raise e else: (status_code, status_reason, data) = \ self.api.endpoint(endpoint_name) servers_filtered = [x for x in data[u'DATA'] \ if x[u'hostname'] != None and x[u'hostname'] != \ u'relay-disconnected.globusonline.org' and \ x[u'uri'] != gcmu.to_unicode(server)] data[u'DATA'] = servers_filtered try: self.api.endpoint_update(endpoint_name, data) except TransferAPIError, e: if e.status_code != 404: raise e def bind_to_endpoint(self, **kwargs): """ Adds this gridftp server to the endpoint named in the configuration file. If force=True is passed, then the endpoint is deleted prior to binding this gridftp server. If reset=True is passed, then all other GridFTP servers will be removed from this endpoint before adding this one. """
def bind_to_endpoint(self, **kwargs): """ Adds this gridftp server to the endpoint named in the configuration file. If force=True is passed, then the endpoint is deleted prior to binding this gridftp server. If reset=True is passed, then all other GridFTP servers will be removed from this endpoint before adding this one. """ self.logger.debug("ENTER: IO.bind_to_endpoint()") endpoint_name = self.conf.get_endpoint_name() if endpoint_name is None: return if kwargs.get('force'): try: self.logger.debug("Removing old endpoint definition") self.api.endpoint_delete(endpoint_name) except: pass self.logger.debug("Configuring endpoint " + endpoint_name) endpoint_public = self.conf.get_endpoint_public() endpoint_default_dir = self.conf.get_endpoint_default_dir() server = self.conf.get_gridftp_server() scheme = "gsiftp" port = 2811 hostname = None if "://" in server: (scheme, server) = server.split("://", 1) if ":" in server: (hostname, port_s) = server.split(":", 1) port = int(port_s) else: hostname = server server = scheme + "://" + hostname + ":" + str(port) oauth_server = None myproxy_server = None myproxy_dn = None if self.conf.get_security_identity_method() == \ self.conf.IDENTITY_METHOD_OAUTH: oauth_server = self.conf.get_oauth_server() if oauth_server is None: raise Exception( "Configured to use OAuth, but no OAuth server defined") elif self.conf.get_security_identity_method() == \ self.conf.IDENTITY_METHOD_CILOGON: oauth_server = "cilogon.org" else: myproxy_server = self.conf.get_myproxy_server() myproxy_dn = self.conf.get_myproxy_dn() if myproxy_dn is None and myproxy_server is not None: myproxy_dn = self.get_myproxy_dn_from_server() if myproxy_server is not None: myproxy_server = gcmu.to_unicode(myproxy_server) if myproxy_dn is not None: myproxy_dn = gcmu.to_unicode(myproxy_dn) if oauth_server is not None: if ":" in oauth_server: raise Exception( "[OAuth] Server value must be a public host name only") oauth_server = gcmu.to_unicode(oauth_server) new_gridftp_server = { gcmu.to_unicode('DATA_TYPE'): gcmu.to_unicode('server'), gcmu.to_unicode('scheme'): gcmu.to_unicode(scheme), gcmu.to_unicode('hostname'): gcmu.to_unicode(hostname), gcmu.to_unicode('port'): port, gcmu.to_unicode('subject'): gcmu.to_unicode( security.get_certificate_subject( self.conf.get_security_certificate_file())) } try: new_endpoint = {'DATA_TYPE': 'endpoint'} (status_code, status_reason, data) = \ self.api.endpoint(endpoint_name) default_directory_key = gcmu.to_unicode('default_directory') public_key = gcmu.to_unicode('public') myproxy_server_key = gcmu.to_unicode('myproxy_server') myproxy_dn_key = gcmu.to_unicode('myproxy_dn') oauth_server_key = gcmu.to_unicode('oauth_server') hostname_key = gcmu.to_unicode('hostname') id_key = gcmu.to_unicode('id') data_key = gcmu.to_unicode('DATA') # Update any changed endpoint-level metadata if data.get(default_directory_key) != endpoint_default_dir: self.logger.debug("Changing default_directory on endpoint " \ "to [%(new)s]" % { 'new': endpoint_default_dir }) new_endpoint[default_directory_key] = \ gcmu.to_unicode(endpoint_default_dir) if data.get(public_key) != endpoint_public: self.logger.debug("Changing public to " + str(endpoint_public)) new_endpoint[public_key] = endpoint_public if data.get(myproxy_server_key) != myproxy_server: self.logger.debug("Changing myproxy_server to " + str(myproxy_server)) new_endpoint[myproxy_server_key] = myproxy_server if data.get(myproxy_dn_key) != myproxy_dn: self.logger.debug("Changing myproxy_dn to " + str(myproxy_dn)) new_endpoint[myproxy_dn_key] = myproxy_dn if data.get(oauth_server_key) != oauth_server: self.logger.debug("Changing oauth_server to " + str(oauth_server)) new_endpoint[oauth_server_key] = oauth_server if len(new_endpoint.keys()) > 1: self.logger.debug("Updating endpoint") (status_code, status, data) = \ self.api.endpoint_update(endpoint_name, new_endpoint) self.logger.debug("endpoint update result: " + str(status_code)) (status_code, status_reason, data) = \ self.api.endpoint_server_list(endpoint_name) self.logger.debug("Existing endpoint server list: " + str(data.get(data_key, []))) for server_item in data.get(data_key, []): self.logger.debug("existing server for endpoint: " + str(server_item.get(hostname_key, ""))) this_server_hostname = server_item.get(hostname_key) this_server_id = server_item.get(id_key) if kwargs.get('reset') or \ this_server_hostname == gcmu.to_unicode(hostname): self.logger.debug("deleting server entry for " + str(this_server_hostname) + " with id " + str(this_server_id)) self.api.endpoint_server_delete(endpoint_name, this_server_id) self.api.endpoint_server_add(endpoint_name, new_gridftp_server) except TransferAPIError as e: if e.status_code == 404: self.logger.debug("endpoint %s does not exist, creating" % (endpoint_name)) try: (status_code, status_reason, data) = \ self.api.endpoint_create( endpoint_name, default_directory = endpoint_default_dir, public = endpoint_public, is_globus_connect = False, hostname=new_gridftp_server['hostname'], scheme=new_gridftp_server['scheme'], port=new_gridftp_server['port'], subject=new_gridftp_server['subject'], myproxy_server=myproxy_server, myproxy_dn=myproxy_dn, oauth_server=oauth_server) except TransferAPIError as e: self.logger.error("endpoint create failed: %s" % \ (e.message)) self.errorcount += 1 else: self.logger.error("endpoint failed: %s" % (e.message)) self.errorcount += 1 self.logger.debug("EXIT: IO.bind_to_endpoint()")
def bind_to_endpoint(self, **kwargs): """ Adds this gridftp server to the endpoint named in the configuration file. If force=True is passed, then the endpoint is deleted prior to binding this gridftp server. If reset=True is passed, then all other GridFTP servers will be removed from this endpoint before adding this one. """ self.logger.debug("ENTER: IO.bind_to_endpoint()") endpoint_name = self.conf.get_endpoint_name() if endpoint_name is None: return if kwargs.get("force"): try: self.logger.debug("Removing old endpoint definition") self.api.endpoint_delete(endpoint_name) except: pass self.logger.debug("Configuring endpoint " + endpoint_name) endpoint_public = self.conf.get_endpoint_public() endpoint_default_dir = self.conf.get_endpoint_default_dir() server = self.conf.get_gridftp_server() scheme = "gsiftp" port = 2811 hostname = None if "://" in server: (scheme, server) = server.split("://", 1) if ":" in server: (hostname, port_s) = server.split(":", 1) port = int(port_s) else: hostname = server server = scheme + "://" + hostname + ":" + str(port) oauth_server = None myproxy_server = None myproxy_dn = None if self.conf.get_security_identity_method() == self.conf.IDENTITY_METHOD_OAUTH: oauth_server = self.conf.get_oauth_server() if oauth_server is None: raise Exception("Configured to use OAuth, but no OAuth server defined") elif self.conf.get_security_identity_method() == self.conf.IDENTITY_METHOD_CILOGON: oauth_server = "cilogon.org" else: myproxy_server = self.conf.get_myproxy_server() myproxy_dn = self.conf.get_myproxy_dn() if myproxy_dn is None: myproxy_dn = self.get_myproxy_dn_from_server() if myproxy_server is not None: myproxy_server = gcmu.to_unicode(myproxy_server) if myproxy_dn is not None: myproxy_dn = gcmu.to_unicode(myproxy_dn) if oauth_server is not None: if ":" in oauth_server: raise Exception("[OAuth] Server value must be a public host name only") oauth_server = gcmu.to_unicode(oauth_server) new_gridftp_server = { u"DATA_TYPE": u"server", u"uri": gcmu.to_unicode(server), u"scheme": gcmu.to_unicode(scheme), u"hostname": gcmu.to_unicode(hostname), u"port": port, u"is_connected": True, u"subject": gcmu.to_unicode(security.get_certificate_subject(self.conf.get_security_certificate_file())), u"update": True, } try: (status_code, status_reason, data) = self.api.endpoint(endpoint_name) old_default_dir = data.get("default_directory") changed = False if old_default_dir is None or old_default_dir != endpoint_default_dir: self.logger.debug( "Changing default_directory on endpoint " "from [%(old)s] to [%(new)s]" % {"old": str(old_default_dir), "new": endpoint_default_dir} ) data[u"default_directory"] = gcmu.to_unicode(endpoint_default_dir) old_public = data.get("public") if old_public is not None and old_public != endpoint_public: data[u"public"] = endpoint_public if kwargs.get("reset"): servers_filtered = [new_gridftp_server] else: servers_filtered = [ x for x in data[u"DATA"] if x[u"hostname"] != None and x[u"hostname"] != u"relay-disconnected.globusonline.org" and x[u"uri"] != gcmu.to_unicode(server) ] servers_filtered.append(new_gridftp_server) data[u"DATA"] = servers_filtered data[u"myproxy_server"] = myproxy_server data[u"myproxy_dn"] = myproxy_dn data[u"oauth_server"] = oauth_server self.api.endpoint_update(endpoint_name, data) except TransferAPIError, e: if e.status_code == 404: self.logger.debug("endpoint %s does not exist, creating" % (endpoint_name)) try: (status_code, status_reason, data) = self.api.endpoint_create( endpoint_name, default_directory=endpoint_default_dir, public=endpoint_public, is_globus_connect=False, hostname=new_gridftp_server[u"hostname"], scheme=new_gridftp_server[u"scheme"], port=new_gridftp_server[u"port"], subject=new_gridftp_server[u"subject"], myproxy_server=myproxy_server, myproxy_dn=myproxy_dn, oauth_server=oauth_server, ) except TransferAPIError, e: self.logger.error("endpoint create failed: %s" % (e.message)) self.errorcount += 1
server = scheme + "://" + hostname + ":" + str(port) if kwargs.get("delete"): try: self.api.endpoint_delete(endpoint_name) except TransferAPIError, e: if e.status_code != 404: raise e else: (status_code, status_reason, data) = self.api.endpoint(endpoint_name) servers_filtered = [ x for x in data[u"DATA"] if x[u"hostname"] != None and x[u"hostname"] != u"relay-disconnected.globusonline.org" and x[u"uri"] != gcmu.to_unicode(server) ] data[u"DATA"] = servers_filtered try: self.api.endpoint_update(endpoint_name, data) except TransferAPIError, e: if e.status_code != 404: raise e def bind_to_endpoint(self, **kwargs): """ Adds this gridftp server to the endpoint named in the configuration file. If force=True is passed, then the endpoint is deleted prior to binding this gridftp server. If reset=True is passed, then all other GridFTP servers will be removed from this endpoint before adding this one.
def bind_to_endpoint(self, **kwargs): """ Adds this gridftp server to the endpoint named in the configuration file. If force=True is passed, then the endpoint is deleted prior to binding this gridftp server. If reset=True is passed, then all other GridFTP servers will be removed from this endpoint before adding this one. """ self.logger.debug("ENTER: IO.bind_to_endpoint()") endpoint_name = self.conf.get_endpoint_name() if endpoint_name is None: return if kwargs.get('force'): try: self.logger.debug("Removing old endpoint definition") self.api.endpoint_delete(endpoint_name) except: pass self.logger.debug("Configuring endpoint " + endpoint_name) endpoint_public = self.conf.get_endpoint_public() endpoint_default_dir = self.conf.get_endpoint_default_dir() server = self.conf.get_gridftp_server() scheme = "gsiftp" port = 2811 hostname = None if "://" in server: (scheme, server) = server.split("://", 1) if ":" in server: (hostname, port_s) = server.split(":", 1) port = int(port_s) else: hostname = server server = scheme + "://" + hostname + ":" + str(port) oauth_server = None myproxy_server = None myproxy_dn = None if self.conf.get_security_identity_method() == \ self.conf.IDENTITY_METHOD_OAUTH: oauth_server = self.conf.get_oauth_server() if oauth_server is None: raise Exception("Configured to use OAuth, but no OAuth server defined") elif self.conf.get_security_identity_method() == \ self.conf.IDENTITY_METHOD_CILOGON: oauth_server = "cilogon.org" else: myproxy_server = self.conf.get_myproxy_server() myproxy_dn = self.conf.get_myproxy_dn() if myproxy_dn is None: myproxy_dn = self.get_myproxy_dn_from_server() if myproxy_server is not None: myproxy_server = gcmu.to_unicode(myproxy_server) if myproxy_dn is not None: myproxy_dn = gcmu.to_unicode(myproxy_dn) if oauth_server is not None: if ":" in oauth_server: raise Exception("[OAuth] Server value must be a public host name only") oauth_server = gcmu.to_unicode(oauth_server) new_gridftp_server = { gcmu.to_unicode('DATA_TYPE'): gcmu.to_unicode('server'), gcmu.to_unicode('scheme'): gcmu.to_unicode(scheme), gcmu.to_unicode('hostname'): gcmu.to_unicode(hostname), gcmu.to_unicode('port'): port, gcmu.to_unicode('subject'): gcmu.to_unicode(security.get_certificate_subject(self.conf.get_security_certificate_file())) } try: new_endpoint = { 'DATA_TYPE': 'endpoint' } (status_code, status_reason, data) = \ self.api.endpoint(endpoint_name) default_directory_key = gcmu.to_unicode('default_directory') public_key = gcmu.to_unicode('public') myproxy_server_key = gcmu.to_unicode('myproxy_server') myproxy_dn_key = gcmu.to_unicode('myproxy_dn') oauth_server_key = gcmu.to_unicode('oauth_server') hostname_key = gcmu.to_unicode('hostname') id_key = gcmu.to_unicode('id') data_key = gcmu.to_unicode('DATA') # Update any changed endpoint-level metadata if data.get(default_directory_key) != endpoint_default_dir: self.logger.debug("Changing default_directory on endpoint " \ "to [%(new)s]" % { 'new': endpoint_default_dir }) new_endpoint[default_directory_key] = \ gcmu.to_unicode(endpoint_default_dir) if data.get(public_key) != endpoint_public: self.logger.debug("Changing public to " + str(endpoint_public)) new_endpoint[public_key] = endpoint_public if data.get(myproxy_server_key) != myproxy_server: self.logger.debug("Changing myproxy_server to " + str(myproxy_server)) new_endpoint[myproxy_server_key] = myproxy_server if data.get(myproxy_dn_key) != myproxy_dn: self.logger.debug("Changing myproxy_dn to " + str(myproxy_dn)) new_endpoint[myproxy_dn_key] = myproxy_dn if data.get(oauth_server_key) != oauth_server: self.logger.debug("Changing oauth_server to " + str(oauth_server)) new_endpoint[oauth_server_key] = oauth_server if len(new_endpoint.keys()) > 1: self.logger.debug("Updating endpoint") (status_code, status, data) = \ self.api.endpoint_update(endpoint_name, new_endpoint) self.logger.debug("endpoint update result: " + str(status_code)) (status_code, status_reason, data) = \ self.api.endpoint_server_list(endpoint_name) self.logger.debug("Existing endpoint server list: " + str(data.get(data_key, []))) for server_item in data.get(data_key, []): self.logger.debug("existing server for endpoint: " + str(server_item.get(hostname_key, ""))) this_server_hostname = server_item.get(hostname_key) this_server_id = server_item.get(id_key) if kwargs.get('reset') or \ this_server_hostname == gcmu.to_unicode(hostname): self.logger.debug("deleting server entry for " + str(this_server_hostname) + " with id " + str(this_server_id)) self.api.endpoint_server_delete(endpoint_name, this_server_id) self.api.endpoint_server_add(endpoint_name, new_gridftp_server) except TransferAPIError as e: if e.status_code == 404: self.logger.debug("endpoint %s does not exist, creating" %(endpoint_name)) try: (status_code, status_reason, data) = \ self.api.endpoint_create( endpoint_name, default_directory = endpoint_default_dir, public = endpoint_public, is_globus_connect = False, hostname=new_gridftp_server['hostname'], scheme=new_gridftp_server['scheme'], port=new_gridftp_server['port'], subject=new_gridftp_server['subject'], myproxy_server=myproxy_server, myproxy_dn=myproxy_dn, oauth_server=oauth_server) except TransferAPIError as e: self.logger.error("endpoint create failed: %s" % \ (e.message)) self.errorcount += 1 else: self.logger.error("endpoint failed: %s" % (e.message)) self.errorcount += 1 self.logger.debug("EXIT: IO.bind_to_endpoint()")
def bind_to_endpoint(self, **kwargs): """ Adds this gridftp server to the endpoint named in the configuration file. If force=True is passed, then the endpoint is deleted prior to binding this gridftp server. If reset=True is passed, then all other GridFTP servers will be removed from this endpoint before adding this one. """ self.logger.debug("ENTER: IO.bind_to_endpoint()") if self.endpoint_xid is None: return if kwargs.get('force'): try: self.logger.debug("Removing old endpoint definition") self.api.endpoint_delete(self.endpoint_xid) if os.path.exists(self.endpoint_id_file): os.remove(self.endpoint_id_file) self.endpoint_xid = urllib_parse.quote( self.conf.get_endpoint_name()) except: pass self.logger.debug("Configuring endpoint " + self.endpoint_xid) endpoint_public = self.conf.get_endpoint_public() endpoint_default_dir = self.conf.get_endpoint_default_dir() server = self.conf.get_gridftp_server() scheme = "gsiftp" port = 2811 hostname = None if "://" in server: (scheme, server) = server.split("://", 1) if ":" in server: (hostname, port_s) = server.split(":", 1) port = int(port_s) else: hostname = server server = scheme + "://" + hostname + ":" + str(port) oauth_server = None myproxy_server = None myproxy_dn = None if self.conf.get_security_identity_method() == \ self.conf.IDENTITY_METHOD_OAUTH: oauth_server = self.conf.get_oauth_server() if oauth_server is None: raise Exception("Configured to use OAuth, but no OAuth server defined") elif self.conf.get_security_identity_method() == \ self.conf.IDENTITY_METHOD_CILOGON: oauth_server = "cilogon.org" else: myproxy_server = self.conf.get_myproxy_server() myproxy_dn = self.conf.get_myproxy_dn() if myproxy_dn is None and myproxy_server is not None: myproxy_dn = self.get_myproxy_dn_from_server() if myproxy_server is not None: myproxy_server = gcmu.to_unicode(myproxy_server) if myproxy_dn is not None: myproxy_dn = gcmu.to_unicode(myproxy_dn) if oauth_server is not None: if ":" in oauth_server: raise Exception("[OAuth] Server value must be a public host name only") oauth_server = gcmu.to_unicode(oauth_server) new_gridftp_server = { gcmu.to_unicode('DATA_TYPE'): gcmu.to_unicode('server'), gcmu.to_unicode('scheme'): gcmu.to_unicode(scheme), gcmu.to_unicode('hostname'): gcmu.to_unicode(hostname), gcmu.to_unicode('port'): port, gcmu.to_unicode('subject'): gcmu.to_unicode(security.get_certificate_subject(self.conf.get_security_certificate_file())) } try: new_endpoint = { 'DATA_TYPE': 'endpoint' } result = self.api.get_endpoint(self.endpoint_xid) data = result.data default_directory_key = 'default_directory' public_key = 'public' myproxy_server_key = 'myproxy_server' myproxy_dn_key = 'myproxy_dn' oauth_server_key = 'oauth_server' hostname_key = 'hostname' id_key = 'id' data_key = 'DATA' # Update any changed endpoint-level metadata if data.get(default_directory_key) != endpoint_default_dir: self.logger.debug( "Changing default_directory on endpoint " "to [{}]".format(endpoint_default_dir)) new_endpoint[default_directory_key] = endpoint_default_dir if data.get(public_key) != endpoint_public: self.logger.debug("Changing public to " + str(endpoint_public)) new_endpoint[public_key] = endpoint_public if data.get(myproxy_server_key) != myproxy_server: self.logger.debug( "Changing myproxy_server to " + str(myproxy_server)) new_endpoint[myproxy_server_key] = myproxy_server if data.get(myproxy_dn_key) != myproxy_dn: self.logger.debug("Changing myproxy_dn to " + str(myproxy_dn)) new_endpoint[myproxy_dn_key] = myproxy_dn if data.get(oauth_server_key) != oauth_server: self.logger.debug( "Changing oauth_server to " + str(oauth_server)) new_endpoint[oauth_server_key] = oauth_server if len(new_endpoint.keys()) > 1: self.logger.debug("Updating endpoint") result = self.api.update_endpoint( self.endpoint_xid, new_endpoint) self.logger.debug("endpoint update result: {}".format( result.http_status)) self.logger.debug("endpoint update data: {}".format( result.data)) returned_id = result.data.get('resource', '').split('/')[-1] if self.endpoint_xid != returned_id and returned_id != '': self._update_xid(returned_id) result = self.api.endpoint_server_list(self.endpoint_xid) data = result.data self.logger.debug( "Existing endpoint server list: " + str(data.get(data_key, []))) for server_item in data.get(data_key, []): self.logger.debug( "existing server for endpoint: " + str(server_item.get(hostname_key, ""))) this_server_hostname = server_item.get(hostname_key) this_server_id = server_item.get(id_key) if (kwargs.get('reset') or this_server_hostname == gcmu.to_unicode(hostname)): self.logger.debug( "deleting server entry for " + str(this_server_hostname) + " with id " + str(this_server_id)) self.api.delete_endpoint_server( self.endpoint_xid, this_server_id) self.api.add_endpoint_server( self.endpoint_xid, new_gridftp_server) except GlobusAPIError as e: if e.http_status == 404: self.logger.debug( "endpoint {} does not exist, creating" .format( self.endpoint_xid)) try: result = self.api.create_endpoint(dict( canonical_name=self.conf.get_endpoint_name(), default_directory=endpoint_default_dir, public=endpoint_public, is_globus_connect=False, DATA=[dict( DATA_TYPE="server", hostname=new_gridftp_server['hostname'], scheme=new_gridftp_server['scheme'], port=new_gridftp_server['port'], subject=new_gridftp_server['subject'])], myproxy_server=myproxy_server, myproxy_dn=myproxy_dn, oauth_server=oauth_server)) if self.endpoint_xid != result.data['id']: self._update_xid(result.data['id']) except GlobusAPIError as e: self.logger.error("endpoint create failed: %s" % \ (e.message)) self.errorcount += 1 else: self.logger.error("endpoint failed: %s" % (e.message)) self.errorcount += 1 self.logger.debug("EXIT: IO.bind_to_endpoint()")