def create(server, disk=None):
        # Create the server db model if it doesn't exist
        if isinstance(server, str):
            if os.path.isfile(str):
                server = MU.serverConfToDict(server)
            else:
                msg = 'Unable to create server with definition: %s' % (server)
                MU.logMsg('SecondaryJobServiceFactory', msg, 'error')
                raise SecondaryJobServiceError(msg)
        
        if isinstance(server, dict):
            try:
                server, created = SecondaryAnalysisServer.objects.get_or_create(**server)
                if created:
                    MU.logMsg('SecondaryJobServiceFactory', 'Created new SecondaryAnalysisServer %s' % server, 'info')
            except Exception as err:
                msg = 'Unable to create server with definition: %s.  ErrorMsg: %s' % (server, err)
                MU.logMsg('SecondaryJobServiceFactory', msg, 'error')
                raise SecondaryJobServiceError(msg)
                
        if re.findall('^martin', server.serverName.lower()):
            # This is specific to PacBio only, do not set this to true for non-PacBio installs!!
            from pbmilhouse.MartinJobHandler import MartinJobServiceFactory
            return MartinJobServiceFactory.create(server, disk)

        if disk is None:
            if server.serverHost and server.serverPort:
                sjsApi = SecondaryJobServiceAPI(server)
                ping, msg = sjsApi.testConnection()
                if ping:
                    logmsg = 'Using Server API Instance, Web Service Ping: %s' % msg
                    MU.logMsg('SecondaryJobServiceFactry', logmsg, 'info')
                    disk = False
                else:
                    logmsg = 'Using Server Disk Instance, Web Service Ping: %s' % msg,
                    MU.logMsg('SecondaryJobServiceFactory', 'info')
                    disk = True
            else:
                disk = True
        
        # All other Milhouse instance should go through this path
        if disk:
            return SecondaryJobServiceDisk(server)
        else:
            return SecondaryJobServiceAPI(server)