Esempio n. 1
0
        public async Task <IActionResult> CreateTemplateVersion(long id, [FromBody] VersionCreateInputModel model)
        {
            if (!ModelState.IsValid)
            {
                return(JsonBadRequest("Invalid inputs."));
            }
            if (model.PreprocessGitModel != null && !model.PreprocessGitModel.IsValid())
            {
                return(JsonBadRequest($"The input about Preprocess Git is not valid."));
            }
            if (model.TrainingGitModel != null && !model.TrainingGitModel.IsValid())
            {
                return(JsonBadRequest($"The input about Training Git is not valid."));
            }
            if (model.EvaluationGitModel != null && !model.EvaluationGitModel.IsValid())
            {
                return(JsonBadRequest($"The input about Evaluation Git is not valid."));
            }

            var template = await templateRepository.GetByIdAsync(id);

            if (template == null)
            {
                return(JsonNotFound($"Template ID {id} is not found."));
            }
            template.LatestVersion += 1;
            templateRepository.Update(template);

            var templateVersion = new TemplateVersion();
            var errorResult     = await SetTemplateDetails(templateVersion, template, model);

            if (errorResult != null)
            {
                return(errorResult);
            }

            templateVersionRepository.Add(templateVersion);
            unitOfWork.Commit();
            return(JsonCreated(new VersionIndexOutputModel(templateVersion)));
        }
Esempio n. 2
0
        public async Task <IActionResult> CreateDataSetVersion(long id, [FromBody] VersionCreateInputModel model)
        {
            if (!ModelState.IsValid)
            {
                return(JsonBadRequest("Invalid inputs."));
            }

            var dataSet = await dataSetRepository.GetByIdAsync(model.DataSetId);

            if (dataSet == null)
            {
                return(JsonNotFound($"DataSet ID {model.DataSetId} is not found."));
            }

            var aquariumDataSet = await aquariumDataSetRepository.GetByIdAsync(id);

            if (aquariumDataSet == null)
            {
                return(JsonNotFound($"AquariumDataSet ID {id} is not found."));
            }

            aquariumDataSet.LatestVersion += 1;
            aquariumDataSetRepository.Update(aquariumDataSet);

            var dataSetVersion = new DataSetVersion
            {
                AquariumDataSetId = id,
                Version           = aquariumDataSet.LatestVersion,
                DataSetId         = model.DataSetId,
            };

            aquariumDataSetVersionRepository.Add(dataSetVersion);

            dataSet.IsLocked = true;
            dataSetRepository.Update(dataSet);

            unitOfWork.Commit();
            return(JsonCreated(new VersionIndexOutputModel(dataSetVersion)));
        }
Esempio n. 3
0
        private async Task <IActionResult> SetTemplateDetails(TemplateVersion templateVersion, Template template, VersionCreateInputModel model)
        {
            long?  preprocessGitId      = null;
            string preprocessRepository = null;
            string preprocessOwner      = null;
            string preprocessBranch     = null;
            string preprocessCommitId   = null;
            string preprocessGitToken   = null;
            long   trainingGitId        = 0;
            string trainingRepository   = null;
            string trainingOwner        = null;
            string trainingBranch       = null;
            string trainingCommitId     = null;
            string trainingGitToken     = null;
            long?  evaluationGitId      = null;
            string evaluationRepository = null;
            string evaluationOwner      = null;
            string evaluationBranch     = null;
            string evaluationCommitId   = null;
            string evaluationGitToken   = null;

            if (model.PreprocessGitModel != null)
            {
                preprocessGitId      = model.PreprocessGitModel.GitId ?? CurrentUserInfo.SelectedTenant.DefaultGit?.Id;
                preprocessRepository = model.PreprocessGitModel.Repository;
                preprocessOwner      = model.PreprocessGitModel.Owner;
                preprocessBranch     = model.PreprocessGitModel.Branch;
                preprocessCommitId   = model.PreprocessGitModel.CommitId;
                // コミットIDが指定されていなければ、ブランチのHEADからコミットIDを取得する
                if (string.IsNullOrEmpty(preprocessCommitId))
                {
                    preprocessCommitId = await gitLogic.GetCommitIdAsync(preprocessGitId.Value, model.PreprocessGitModel.Repository, model.PreprocessGitModel.Owner, model.PreprocessGitModel.Branch);

                    if (string.IsNullOrEmpty(preprocessCommitId))
                    {
                        // コミットIDが特定できなかったらエラー
                        return(JsonNotFound($"The branch {preprocessBranch} for {preprocessGitId.Value}/{model.PreprocessGitModel.Owner}/{ model.PreprocessGitModel.Repository} is not found."));
                    }
                }
                preprocessGitToken = model.PreprocessGitModel.Token;
            }
            if (model.TrainingGitModel != null)
            {
                trainingGitId      = (model.TrainingGitModel.GitId ?? CurrentUserInfo.SelectedTenant.DefaultGit?.Id).Value;
                trainingRepository = model.TrainingGitModel.Repository;
                trainingOwner      = model.TrainingGitModel.Owner;
                trainingBranch     = model.TrainingGitModel.Branch;
                trainingCommitId   = model.TrainingGitModel.CommitId;
                // コミットIDが指定されていなければ、ブランチのHEADからコミットIDを取得する
                if (string.IsNullOrEmpty(trainingCommitId))
                {
                    trainingCommitId = await gitLogic.GetCommitIdAsync(trainingGitId, model.TrainingGitModel.Repository, model.TrainingGitModel.Owner, model.TrainingGitModel.Branch);

                    if (string.IsNullOrEmpty(trainingCommitId))
                    {
                        // コミットIDが特定できなかったらエラー
                        return(JsonNotFound($"The branch {trainingBranch} for {trainingGitId}/{model.TrainingGitModel.Owner}/{ model.TrainingGitModel.Repository} is not found."));
                    }
                }
                trainingGitToken = model.TrainingGitModel.Token;
            }
            if (model.EvaluationGitModel != null)
            {
                evaluationGitId      = (model.EvaluationGitModel.GitId ?? CurrentUserInfo.SelectedTenant.DefaultGit?.Id).Value;
                evaluationRepository = model.EvaluationGitModel.Repository;
                evaluationOwner      = model.EvaluationGitModel.Owner;
                evaluationBranch     = model.EvaluationGitModel.Branch;
                evaluationCommitId   = model.EvaluationGitModel.CommitId;
                // コミットIDが指定されていなければ、ブランチのHEADからコミットIDを取得する
                if (string.IsNullOrEmpty(evaluationCommitId))
                {
                    evaluationCommitId = await gitLogic.GetCommitIdAsync(evaluationGitId.Value, model.EvaluationGitModel.Repository, model.EvaluationGitModel.Owner, model.EvaluationGitModel.Branch);

                    if (string.IsNullOrEmpty(evaluationCommitId))
                    {
                        // コミットIDが特定できなかったらエラー
                        return(JsonNotFound($"The branch {evaluationBranch} for {evaluationGitId}/{model.EvaluationGitModel.Owner}/{ model.EvaluationGitModel.Repository} is not found."));
                    }
                }
                evaluationGitToken = model.EvaluationGitModel.Token;
            }

            long?  preprocessRegistryId    = null;
            string preprocessImage         = null;
            string preprocessTag           = null;
            string preprocessRegistryToken = null;

            if (model.PreprocessContainerImage != null)
            {
                preprocessRegistryId    = model.PreprocessContainerImage.RegistryId ?? CurrentUserInfo.SelectedTenant.DefaultRegistry?.Id;
                preprocessImage         = model.PreprocessContainerImage.Image;
                preprocessTag           = model.PreprocessContainerImage.Tag;
                preprocessRegistryToken = model.PreprocessContainerImage.Token;
            }
            long   trainingRegistryId    = 0;
            string trainingImage         = null;
            string trainingTag           = null;
            string trainingRegistryToken = null;

            if (model.TrainingContainerImage != null)
            {
                trainingRegistryId    = (model.TrainingContainerImage.RegistryId ?? CurrentUserInfo.SelectedTenant.DefaultRegistry?.Id).Value;
                trainingImage         = model.TrainingContainerImage.Image;
                trainingTag           = model.TrainingContainerImage.Tag;
                trainingRegistryToken = model.TrainingContainerImage.Token;
            }
            long?  evaluationRegistryId    = null;
            string evaluationImage         = null;
            string evaluationTag           = null;
            string evaluationRegistryToken = null;

            if (model.EvaluationContainerImage != null)
            {
                evaluationRegistryId    = (model.EvaluationContainerImage.RegistryId ?? CurrentUserInfo.SelectedTenant.DefaultRegistry?.Id).Value;
                evaluationImage         = model.EvaluationContainerImage.Image;
                evaluationTag           = model.EvaluationContainerImage.Tag;
                evaluationRegistryToken = model.EvaluationContainerImage.Token;
            }

            templateVersion.TemplateId = template.Id;
            templateVersion.Version    = template.LatestVersion;

            templateVersion.PreprocessEntryPoint          = model.PreprocessEntryPoint;
            templateVersion.PreprocessContainerRegistryId = preprocessRegistryId;
            templateVersion.PreprocessContainerImage      = preprocessImage;
            templateVersion.PreprocessContainerTag        = preprocessTag; // latestは運用上使用されていないハズなので、そのまま直接代入
            templateVersion.PreprocessContainerToken      = preprocessRegistryToken;
            templateVersion.PreprocessRepositoryGitId     = preprocessGitId;
            templateVersion.PreprocessRepositoryName      = preprocessRepository;
            templateVersion.PreprocessRepositoryOwner     = preprocessOwner;
            templateVersion.PreprocessRepositoryBranch    = preprocessBranch;
            templateVersion.PreprocessRepositoryCommitId  = preprocessCommitId;
            templateVersion.PreprocessRepositoryToken     = preprocessGitToken;
            templateVersion.PreprocessCpu    = model.PreprocessCpu;
            templateVersion.PreprocessMemory = model.PreprocessMemory;
            templateVersion.PreprocessGpu    = model.PreprocessGpu;

            templateVersion.TrainingEntryPoint          = model.TrainingEntryPoint;
            templateVersion.TrainingContainerRegistryId = trainingRegistryId;
            templateVersion.TrainingContainerImage      = trainingImage;
            templateVersion.TrainingContainerTag        = trainingTag; // latestは運用上使用されていないハズなので、そのまま直接代入
            templateVersion.TrainingContainerToken      = trainingRegistryToken;
            templateVersion.TrainingRepositoryGitId     = trainingGitId;
            templateVersion.TrainingRepositoryName      = trainingRepository;
            templateVersion.TrainingRepositoryOwner     = trainingOwner;
            templateVersion.TrainingRepositoryBranch    = trainingBranch;
            templateVersion.TrainingRepositoryCommitId  = trainingCommitId;
            templateVersion.TrainingRepositoryToken     = trainingGitToken;
            templateVersion.TrainingCpu    = model.TrainingCpu;
            templateVersion.TrainingMemory = model.TrainingMemory;
            templateVersion.TrainingGpu    = model.TrainingGpu;

            templateVersion.EvaluationEntryPoint          = model.EvaluationEntryPoint;
            templateVersion.EvaluationContainerRegistryId = evaluationRegistryId;
            templateVersion.EvaluationContainerImage      = evaluationImage;
            templateVersion.EvaluationContainerTag        = evaluationTag; // latestは運用上使用されていないハズなので、そのまま直接代入
            templateVersion.EvaluationContainerToken      = evaluationRegistryToken;
            templateVersion.EvaluationRepositoryGitId     = evaluationGitId;
            templateVersion.EvaluationRepositoryName      = evaluationRepository;
            templateVersion.EvaluationRepositoryOwner     = evaluationOwner;
            templateVersion.EvaluationRepositoryBranch    = evaluationBranch;
            templateVersion.EvaluationRepositoryCommitId  = evaluationCommitId;
            templateVersion.EvaluationRepositoryToken     = evaluationGitToken;
            templateVersion.EvaluationCpu    = model.EvaluationCpu;
            templateVersion.EvaluationMemory = model.EvaluationMemory;
            templateVersion.EvaluationGpu    = model.EvaluationGpu;

            return(null);
        }