예제 #1
0
 def HandleNodeWebApi(self, api_service_options):
     """
     ⚝ Handling Nodejs Express Web Api
     ① Get CamelCase name for renaming output project folder
     ② Copy from template to output dir
     ③ Handle Data, Authorization
     ④ Add to docker-compose and configure Dockerfile
     ⑤ Clear folders for region tags
     """
     #1dawda
     CamelCaseName = to_camelcase(api_service_options['name'])        
     apiServicesPath = os.path.join(self.project_templates_paths,'api_services')
     api_template_folder = os.path.join(apiServicesPath,'express_web_api')
     srcDir = os.path.join(self.outputPath,'src')
     api_copy_folder = os.path.join(srcDir,'ApiServices',CamelCaseName)
     if os.path.isdir(api_copy_folder):
         shutil.rmtree(api_copy_folder,ignore_errors=True)
     # TODO: Swap shutil operations
     #shutil.copytree(api_template_folder,api_copy_folder,ignore=shutil.ignore_patterns('node_modules*'))
     shutil.copytree(api_template_folder,api_copy_folder)
     #3
     self.HandleNodeJsData(api_service_options,api_copy_folder)
     self.HandleNodeJsAuthorization(api_service_options,api_copy_folder)
     #4
     docker_config = self.HandleNodeJsDockerOptions(api_service_options,api_copy_folder)
     docker_instance = Docker.getInstance()
     docker_instance.AddService(api_service_options['name'], docker_config)
     #5
     app_js_file_path = os.path.join(api_copy_folder,'src','app.js')
     ClearRegionLines([app_js_file_path])
예제 #2
0
    def GenerateNginxInstance(self):
        serversPath = os.path.join(self.project_templates_paths, 'servers')
        nginxTemplateFolder = os.path.join(serversPath, 'nginx')
        folderPath = os.path.normpath(
            os.path.join(self.outputPath, self.server_options['name']))
        nginxPath = os.path.join(folderPath, 'nginx.conf')
        if os.path.isdir(folderPath):
            shutil.rmtree(folderPath, ignore_errors=True)
        shutil.copytree(nginxTemplateFolder, folderPath)
        api_services_uses_nginx = self.FindApiServicesUsesNginx(
            self.server_options['name'])
        clients_uses_nginx = self.FindClientsUsesNginx(
            self.server_options['name'])
        identity_uses_nginx = self.FindIdentityServicesUsesNginx(
            self.server_options['name'])
        nginxConfig = self.BuildNginxConfiguration(self.server_options,
                                                   api_services_uses_nginx,
                                                   clients_uses_nginx,
                                                   identity_uses_nginx)
        docker_config = self.BuildNginxDockerOptions(api_services_uses_nginx,
                                                     clients_uses_nginx,
                                                     identity_uses_nginx)

        docker_instance = Docker.getInstance()
        docker_instance.AddService(self.server_options['name'], docker_config)
        nginx.dumpf(nginxConfig, nginxPath)
예제 #3
0
    def HandleIdentityServer4(self, identity_service):

        docker_options = self.GetIdentityServerDockerOptions(identity_service)
        docker_instance = Docker.getInstance()
        docker_instance.AddService(identity_service['name'], docker_options)

        identityServicesPath = os.path.join(self.project_templates_paths,
                                            'identity_services')
        is4_template_folder = os.path.join(identityServicesPath,
                                           'identityserver4ef')
        srcDir = os.path.join(self.outputPath, 'src')
        is4_copy_folder = os.path.join(srcDir, 'IdentityServices',
                                       identity_service['name'])
        if os.path.isdir(is4_copy_folder):
            shutil.rmtree(is4_copy_folder, ignore_errors=True)
        # TODO: Swap shutil operations
        #shutil.copytree(is4_template_folder,is4_copy_folder,ignore=shutil.ignore_patterns('bin*','obj*'))
        shutil.copytree(is4_template_folder, is4_copy_folder)

        api_services_using_is4 = self.FindApiServicesUsesIs4(
            identity_service['name'])
        clients_using_is4 = self.FindClientsUsesIs4(identity_service['name'])

        self.HandleIs4ClientConfiguration(clients_using_is4, identity_service,
                                          is4_copy_folder)
        self.HandleIs4ResourcesConfiguration(api_services_using_is4,
                                             identity_service, is4_copy_folder)
        self.HanldeIs4Csproj(identity_service, is4_copy_folder)
        self.HandleConnectionStringForIs4(identity_service, is4_copy_folder)
        if 'eventbus' in identity_service:
            self.HandleEventBusForIs4(identity_service, is4_copy_folder)
        self.HandleIs4DockerFile(identity_service, is4_copy_folder)
        self.HandleStartupForIs4(identity_service, is4_copy_folder)
        self.HandleIs4Cleaning(is4_copy_folder)
예제 #4
0
    def HandleDotnetApiService(self, api_service_options):
        CamelCaseName = to_camelcase(api_service_options['name'])
        apiServicesPath = os.path.join(self.project_templates_paths,
                                       'api_services')
        api_template_folder = os.path.join(apiServicesPath, 'dotnet_web_api',
                                           'src')
        srcDir = os.path.join(self.outputPath, 'src')
        api_copy_folder = os.path.join(srcDir, 'ApiServices', CamelCaseName)
        if os.path.isdir(api_copy_folder):
            shutil.rmtree(api_copy_folder, ignore_errors=True)
        # TODO: Swap shutil operations
        #shutil.copytree(api_template_folder,api_copy_folder,ignore=shutil.ignore_patterns('bin*','obj*'))
        shutil.copytree(api_template_folder, api_copy_folder)
        api_src_folder = os.path.join(srcDir, 'ApiServices', CamelCaseName,
                                      'DotnetWebApi')
        api_src_rename_folder = os.path.join(srcDir, 'ApiServices',
                                             CamelCaseName, 'src')
        api_csproj_folder = os.path.join(srcDir, 'ApiServices', CamelCaseName,
                                         'src', 'DotnetWebApi.csproj')
        api_csproj_rename_folder = os.path.join(srcDir, 'ApiServices',
                                                CamelCaseName, 'src',
                                                CamelCaseName + '.csproj')

        if not os.path.isdir(api_src_rename_folder):
            shutil.copytree(api_src_folder, api_src_rename_folder)
            shutil.rmtree(api_src_folder, ignore_errors=True)
        else:
            shutil.rmtree(api_src_rename_folder, ignore_errors=True)
            shutil.copytree(api_src_folder, api_src_rename_folder)

        if not os.path.exists(api_csproj_rename_folder):
            shutil.copy(api_csproj_folder, api_csproj_rename_folder)
            os.remove(api_csproj_folder)
        else:
            os.remove(api_csproj_rename_folder)
            shutil.copy(api_csproj_folder, api_csproj_rename_folder)

        self.HandleDotnetApiCsproj(api_service_options, api_copy_folder)
        self.HandleDotnetApiStartup(api_service_options, api_copy_folder)
        self.HandleDotnetApiProgramFile(api_service_options, api_copy_folder)
        self.HandleDotnetApiDbContext(api_service_options, api_copy_folder)
        self.HandleDotnetApiNameSpaceAndCleaning(api_service_options,
                                                 api_copy_folder)
        self.HandleDotnetApiDockerFile(api_service_options, api_copy_folder)

        docker_config = self.HandleDotnetApiDockerCompose(
            api_service_options, api_copy_folder)
        docker_instance = Docker.getInstance()
        docker_instance.AddService(api_service_options['name'], docker_config)
예제 #5
0
    def HandleRedisDatabase(self, db_options):
        print(self.project_templates_paths)
        databasesPath = os.path.join(self.project_templates_paths, 'databases')
        redis_template_folder = os.path.join(databasesPath, 'redis')
        redis_project_folder = os.path.join(self.outputPath,
                                            db_options['name'])
        if os.path.isdir(redis_project_folder):
            shutil.rmtree(redis_project_folder, ignore_errors=True)
        #Copy template (config and Dockerfile)
        shutil.copytree(redis_template_folder, redis_project_folder)

        docker_options = self.GetRedisDockerOptions(db_options)
        docker_instance = Docker.getInstance()
        docker_instance.AddService(db_options['name'], docker_options)
        docker_instance.AddVolume('redis-volume')
예제 #6
0
    def HandleAngular6SsrClient(self, client_options):
        CamelCaseName = to_camelcase(client_options['name'])
        clientsPath = os.path.join(self.project_templates_paths, 'clients')
        template_folder = os.path.join(clientsPath, 'angular', 'cli_6_ssr')
        srcDir = os.path.join(self.outputPath, 'src')
        copy_folder = os.path.join(srcDir, 'Clients', CamelCaseName)
        if os.path.isdir(copy_folder):
            shutil.rmtree(copy_folder, ignore_errors=True)
        # TODO: Ignore Node Modules in prod
        shutil.copytree(template_folder, copy_folder)
        # shutil.copytree(template_folder,copy_folder,ignore=shutil.ignore_patterns('node_modules*'))
        self.HandleAngular6SsrAuth(client_options, copy_folder)
        self.HandleDockerfileForAngularSsr(client_options, copy_folder)

        docker_config = self.HandleDockerComposeForAngularSsr(client_options)
        docker_instance = Docker.getInstance()
        docker_instance.AddService(client_options['name'], docker_config)
예제 #7
0
 def HandleMongoDb(self, db_options):
     mongo_docker_options = self.GetDockerOptions(db_options)
     docker_instance = Docker.getInstance()
     docker_instance.AddService(db_options['name'], mongo_docker_options)
     docker_instance.AddVolume('mongodb-volume')
예제 #8
0
 def HandlePostgre(self, db_options):
     docker_options = self.BuildDockerOptions(db_options)
     docker_instance = Docker.getInstance()
     docker_instance.AddService(db_options['name'], docker_options)
     docker_instance.AddVolume('postgres-volume')
예제 #9
0
    def HandleRabbitMq(self, rabbit_options):

        docker_options = self.GetRabbitmqDockerOptions(rabbit_options)
        docker_instance = Docker.getInstance()
        docker_instance.AddService(rabbit_options['name'], docker_options)
        docker_instance.AddVolume('rabbit-volume')
예제 #10
0
 def HandleMysql(self, db_options):
     docker_options = self.BuildDockerOptions(db_options)
     docker_instance = Docker.getInstance()
     docker_instance.AddService(db_options['name'],docker_options)
     docker_instance.AddVolume('mysql-volume')