def DeploySwarmSelection(swarmSelection, prefix): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(swarmSelection) BuildTools.HandleTerminalCommandsSelection(swarmSelection) SwarmManager.HandleManagement( [prefix] + BuildSwarmManagementFilesRow(swarmSelection) + BuildSwarmManagementPropertiesRow(swarmSelection)) os.chdir(cwd)
def PromoteImageSelection(promoteSelection, selectionToPromote): print("selection to promote: {}".format(selectionToPromote)) composeFiles = promoteSelection[BuildTools.FILES_KEY] promoteComposeFile = BuildTools.GetAvailableComposeFilename( 'promote', selectionToPromote) DockerComposeTools.MergeComposeFiles(composeFiles, promoteComposeFile) sourceFeed = YamlTools.TryGetFromDictionary(promoteSelection, BuildTools.SOURCE_FEED_KEY, None) targetFeed = YamlTools.TryGetFromDictionary(promoteSelection, BuildTools.TARGET_FEED_KEY, None) user = YamlTools.TryGetFromDictionary(promoteSelection, BuildTools.USER_KEY, None) password = YamlTools.TryGetFromDictionary(promoteSelection, BuildTools.PASSWORD_KEY, None) logout = YamlTools.TryGetFromDictionary(promoteSelection, BuildTools.LOGOUT_KEY, False) dryRun = YamlTools.TryGetFromDictionary(promoteSelection, BuildTools.DRY_RUN_KEY, False) DockerComposeTools.PromoteDockerImages( composeFile=promoteComposeFile, targetTags=promoteSelection[BuildTools.TARGET_TAGS_KEY], sourceFeed=sourceFeed, targetFeed=targetFeed, user=user, password=password, logoutFromFeeds=logout, dryRun=dryRun) BuildTools.RemoveComposeFileIfNotPreserved(promoteComposeFile, promoteSelection)
def PublishSelection(publishSelection, publishSelectionKey): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(publishSelection) if BuildTools.TryGetFromDictionary(publishSelection, CONTAINER_ARTIFACT_KEY, True): PublishContainerSelection(publishSelection, publishSelectionKey) else: PublishArtifactSelection(publishSelection) os.chdir(cwd)
def PublishContainerSelection(publishSelection, selectionToPublish): composeFiles = publishSelection[BuildTools.FILES_KEY] publishComposeFile = BuildTools.GetAvailableComposeFilename( 'publish', selectionToPublish) DockerComposeTools.MergeComposeFiles(composeFiles, publishComposeFile) try: DockerComposeTools.PublishDockerImages(publishComposeFile) except: BuildTools.RemoveComposeFileIfNotPreserved(publishComposeFile, publishSelection) raise if BuildTools.ADDITIONAL_TAG_KEY in publishSelection: DockerComposeTools.PublishDockerImagesWithNewTag( publishComposeFile, publishSelection[BuildTools.ADDITIONAL_TAG_KEY]) if BuildTools.ADDITIONAL_TAGS_KEY in publishSelection: for tag in publishSelection[BuildTools.ADDITIONAL_TAGS_KEY]: DockerComposeTools.PublishDockerImagesWithNewTag( publishComposeFile, tag) if BuildTools.COMPOSE_FILE_WITH_DIGESTS_KEY in publishSelection: composeFileWithDigests = publishSelection[ BuildTools.COMPOSE_FILE_WITH_DIGESTS_KEY] BuildTools.GenerateComposeFileWithDigests(composeFiles, composeFileWithDigests) BuildTools.RemoveComposeFileIfNotPreserved(publishComposeFile, publishSelection)
def RunSelection(runSelection): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(runSelection) DockerComposeTools.DockerComposeUp( runSelection[BuildTools.FILES_KEY], BuildTools.TryGetFromDictionary(runSelection, ABORT_ON_CONTAINER_EXIT_KEY, True), BuildTools.TryGetFromDictionary(runSelection, DETACHED_KEY, False)) os.chdir(cwd)
def TestSelection(testSelection): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(testSelection) DockerComposeTools.ExecuteComposeTests( testSelection[BuildTools.FILES_KEY], testSelection[CONTAINER_NAMES_KEY], BuildTools.TryGetFromDictionary(testSelection, REMOVE_CONTAINERS_KEY, True)) os.chdir(cwd)
def DeploySwarmSelection(swarmSelection, prefix): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(swarmSelection) oldEnvironmentVariable = BuildTools.AddEnvironmentVariablesFromSelection( swarmSelection) BuildTools.HandleTerminalCommandsSelection(swarmSelection) TerminalTools.LoadDefaultEnvironmentVariablesFile() SwarmManager.HandleManagement( [prefix] + BuildSwarmManagementFilesRow(swarmSelection) + BuildSwarmManagementPropertiesRow(swarmSelection)) BuildTools.RemoveEnvironmentVariables(oldEnvironmentVariable) os.chdir(cwd)
def HandleChangelogSelections(arguments): if '-help' in arguments: print(GetInfoMsg()) return changelogSelection = GetChangelogSelection(arguments) cwd = BuildTools.TryChangeToDirectoryAndGetCwd(changelogSelection) BuildTools.HandleTerminalCommandsSelection(changelogSelection) ExportChangelogSelection(changelogSelection) os.chdir(cwd)
def RunSelection(runSelection): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(runSelection) BuildTools.HandleTerminalCommandsSelection(runSelection) if BuildTools.FILES_KEY in runSelection: DockerComposeTools.DockerComposeUp( runSelection[BuildTools.FILES_KEY], BuildTools.TryGetFromDictionary(runSelection, ABORT_ON_CONTAINER_EXIT_KEY, True), BuildTools.TryGetFromDictionary(runSelection, DETACHED_KEY, False)) BuildTools.HandleCopyFromContainer(runSelection) os.chdir(cwd)
def PublishSelection(publishSelection, publishSelectionKey): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(publishSelection) BuildTools.HandleTerminalCommandsSelection(publishSelection) if BuildTools.FILES_KEY in publishSelection: if BuildTools.TryGetFromDictionary(publishSelection, CONTAINER_ARTIFACT_KEY, True): PublishContainerSelection(publishSelection, publishSelectionKey) else: PublishArtifactSelection(publishSelection) BuildTools.HandleCopyFromContainer(publishSelection) os.chdir(cwd)
def BuildSelection(buildSelection, selectionToBuild): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(buildSelection) oldEnvironmentVariable = BuildTools.AddEnvironmentVariablesFromSelection(buildSelection) BuildTools.HandleTerminalCommandsSelection(buildSelection) TerminalTools.LoadDefaultEnvironmentVariablesFile() if BuildTools.FILES_KEY in buildSelection: composeFiles = buildSelection[BuildTools.FILES_KEY] buildComposeFile = BuildTools.GetAvailableComposeFilename('build', selectionToBuild) DockerComposeTools.MergeComposeFiles(composeFiles, buildComposeFile) try: DockerComposeTools.DockerComposeBuild([buildComposeFile]) except: BuildTools.RemoveComposeFileIfNotPreserved(buildComposeFile, buildSelection) raise if BuildTools.ADDITIONAL_TAG_KEY in buildSelection: DockerComposeTools.TagImages(buildComposeFile, buildSelection[BuildTools.ADDITIONAL_TAG_KEY]) if BuildTools.ADDITIONAL_TAGS_KEY in buildSelection: for tag in buildSelection[BuildTools.ADDITIONAL_TAGS_KEY]: DockerComposeTools.TagImages(buildComposeFile, tag) if SAVE_IMAGES_KEY in buildSelection: outputFolder = buildSelection[SAVE_IMAGES_KEY] DockerComposeTools.SaveImages(buildComposeFile, outputFolder) if BuildTools.COMPOSE_FILE_WITH_DIGESTS_KEY in buildSelection: composeFileWithDigests = buildSelection[BuildTools.COMPOSE_FILE_WITH_DIGESTS_KEY] BuildTools.GenerateComposeFileWithDigests(composeFiles, composeFileWithDigests) BuildTools.RemoveComposeFileIfNotPreserved(buildComposeFile, buildSelection) BuildTools.RemoveEnvironmentVariables(oldEnvironmentVariable) os.chdir(cwd)
def test_TryChangeToDirectoryAndGetCwd_success(self): directory = 'DockerBuildManagement' selection = {BuildTools.DIRECTORY_KEY: directory} oldCwd = BuildTools.TryChangeToDirectoryAndGetCwd(selection) cwd = os.getcwd() self.assertEqual(cwd, os.path.join(oldCwd, directory)) os.chdir(oldCwd)
def TestSelection(testSelection): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(testSelection) BuildTools.HandleTerminalCommandsSelection(testSelection) if BuildTools.FILES_KEY in testSelection: DockerComposeTools.ExecuteComposeTests( testSelection[BuildTools.FILES_KEY], testSelection[CONTAINER_NAMES_KEY], False) BuildTools.HandleCopyFromContainer(testSelection) if BuildTools.TryGetFromDictionary(testSelection, REMOVE_CONTAINERS_KEY, False): DockerComposeTools.DockerComposeRemove( testSelection[BuildTools.FILES_KEY]) os.chdir(cwd)
def PromoteSelection(promoteSelection, selectionToPromote): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(promoteSelection) oldEnvironmentVariable = BuildTools.AddEnvironmentVariablesFromSelection( promoteSelection) BuildTools.HandleTerminalCommandsSelection(promoteSelection) TerminalTools.LoadDefaultEnvironmentVariablesFile() if BuildTools.FILES_KEY in promoteSelection: if YamlTools.TryGetFromDictionary(promoteSelection, CONTAINER_ARTIFACT_KEY, True): PromoteImageSelection(promoteSelection, selectionToPromote) else: print('Only image promotion is supported') BuildTools.RemoveEnvironmentVariables(oldEnvironmentVariable) os.chdir(cwd)
def ExportChangelogSelection(changelogSelection): if not (FILE_KEY in changelogSelection): return VersionTools.ExportVersionFromChangelogToEnvironment( changelogSelection[FILE_KEY], BuildTools.TryGetFromDictionary(changelogSelection, ENV_VERSION_KEY, 'VERSION'))
def PublishSelection(publishSelection, selectionToPublish): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(publishSelection) oldEnvironmentVariable = BuildTools.AddEnvironmentVariablesFromSelection( publishSelection) BuildTools.HandleTerminalCommandsSelection(publishSelection) TerminalTools.LoadDefaultEnvironmentVariablesFile() if BuildTools.FILES_KEY in publishSelection: if YamlTools.TryGetFromDictionary(publishSelection, CONTAINER_ARTIFACT_KEY, True): PublishContainerSelection(publishSelection, selectionToPublish) else: PublishArtifactSelection(publishSelection) BuildTools.HandleCopyFromContainer(publishSelection) BuildTools.RemoveEnvironmentVariables(oldEnvironmentVariable) os.chdir(cwd)
def BuildSelection(buildSelection, selectionToBuild): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(buildSelection) composeFiles = buildSelection[BuildTools.FILES_KEY] buildComposeFile = 'docker-compose.build.' + selectionToBuild + '.yml' DockerComposeTools.MergeComposeFiles(composeFiles, buildComposeFile) DockerComposeTools.DockerComposeBuild([buildComposeFile]) if BuildTools.ADDITIONAL_TAG_KEY in buildSelection: DockerComposeTools.TagImages(buildComposeFile, buildSelection[BuildTools.ADDITIONAL_TAG_KEY]) os.chdir(cwd)
def RunSelection(runSelection, selectionToRun): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(runSelection) oldEnvironmentVariable = BuildTools.AddEnvironmentVariablesFromSelection( runSelection) BuildTools.HandleTerminalCommandsSelection(runSelection) TerminalTools.LoadDefaultEnvironmentVariablesFile() if BuildTools.FILES_KEY in runSelection: runComposeFile = BuildTools.GetAvailableComposeFilename( 'run', selectionToRun) composeFiles = runSelection[BuildTools.FILES_KEY] if YamlTools.TryGetFromDictionary(runSelection, VERIFY_CONTAINER_EXIT_CODE, False): containerNames = BuildTools.MergeAndPopulateWithContainerNames( composeFiles, runComposeFile) if BuildTools.CONTAINER_NAMES_KEY in runSelection: containerNames = runSelection[BuildTools.CONTAINER_NAMES_KEY] else: containerNames = [] DockerComposeTools.MergeComposeFiles(composeFiles, runComposeFile) try: DockerComposeTools.DockerComposeUp( [runComposeFile], YamlTools.TryGetFromDictionary(runSelection, ABORT_ON_CONTAINER_EXIT_KEY, True), YamlTools.TryGetFromDictionary(runSelection, DETACHED_KEY, False)) except: BuildTools.RemoveComposeFileIfNotPreserved(runComposeFile, runSelection) raise DockerImageTools.VerifyContainerExitCode(containerNames, assertExitCodes=True) BuildTools.HandleCopyFromContainer(runSelection) if YamlTools.TryGetFromDictionary(runSelection, BuildTools.REMOVE_CONTAINERS_KEY, False): DockerComposeTools.DockerComposeRemove([runComposeFile]) BuildTools.RemoveComposeFileIfNotPreserved(runComposeFile, runSelection) BuildTools.RemoveEnvironmentVariables(oldEnvironmentVariable) os.chdir(cwd)
def BuildSelection(buildSelection, selectionToBuild): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(buildSelection) BuildTools.HandleTerminalCommandsSelection(buildSelection) if BuildTools.FILES_KEY in buildSelection: composeFiles = buildSelection[BuildTools.FILES_KEY] buildComposeFile = 'docker-compose.build.' + selectionToBuild + '.yml' DockerComposeTools.MergeComposeFiles(composeFiles, buildComposeFile) DockerComposeTools.DockerComposeBuild([buildComposeFile]) if BuildTools.ADDITIONAL_TAG_KEY in buildSelection: DockerComposeTools.TagImages( buildComposeFile, buildSelection[BuildTools.ADDITIONAL_TAG_KEY]) if BuildTools.ADDITIONAL_TAGS_KEY in buildSelection: for tag in buildSelection[BuildTools.ADDITIONAL_TAGS_KEY]: DockerComposeTools.TagImages(buildComposeFile, tag) if SAVE_IMAGES_KEY in buildSelection: outputFolder = buildSelection[SAVE_IMAGES_KEY] DockerComposeTools.SaveImages(buildComposeFile, outputFolder) os.chdir(cwd)
def TestSelection(testSelection, selectionToTest): cwd = BuildTools.TryChangeToDirectoryAndGetCwd(testSelection) oldEnvironmentVariable = BuildTools.AddEnvironmentVariablesFromSelection( testSelection) BuildTools.HandleTerminalCommandsSelection(testSelection) TerminalTools.LoadDefaultEnvironmentVariablesFile() if BuildTools.FILES_KEY in testSelection: testComposeFile = BuildTools.GetAvailableComposeFilename( 'test', selectionToTest) composeFiles = testSelection[BuildTools.FILES_KEY] containerNames = BuildTools.MergeAndPopulateWithContainerNames( composeFiles, testComposeFile) if BuildTools.CONTAINER_NAMES_KEY in testSelection: containerNames = testSelection[BuildTools.CONTAINER_NAMES_KEY] try: DockerComposeTools.ExecuteComposeTests( [testComposeFile], testContainerNames=containerNames, removeTestContainers=False, buildCompose=True, downCompose=False) except: BuildTools.RemoveComposeFileIfNotPreserved(testComposeFile, testSelection) raise BuildTools.HandleCopyFromContainer(testSelection) DockerComposeTools.DockerComposeDown([testComposeFile]) if YamlTools.TryGetFromDictionary(testSelection, BuildTools.REMOVE_CONTAINERS_KEY, False): DockerComposeTools.DockerComposeRemove([testComposeFile]) BuildTools.RemoveComposeFileIfNotPreserved(testComposeFile, testSelection) BuildTools.RemoveEnvironmentVariables(oldEnvironmentVariable) os.chdir(cwd)
def GetInfoMsg(): infoMsg = "Docker Build Management\r\n\r\n" infoMsg += "Run:\r\n" infoMsg += RunSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Build:\r\n" infoMsg += BuildSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Publish:\r\n" infoMsg += PublishSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Test:\r\n" infoMsg += TestSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Swarm Deployment of Domain Services:\r\n" infoMsg += SwarmSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Export Version From Changelog:\r\n" infoMsg += ChangelogSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Additional Info:\r\n" infoMsg += BuildTools.GetInfoMsg() + "\r\n\r\n" infoMsg += "Add '-help' to arguments to print this info again.\r\n\r\n" return infoMsg
def GetInfoMsg(): infoMsg = "Manage Docker Swarm\r\n" infoMsg += "Add '-start' to arguments to start development by deploying domain services in a swarm.\r\n" infoMsg += "Add '-stop' to arguments to stop development by stopping domain services in the swarm.\r\n" infoMsg += "Add '-restart' to arguments to restart swarm.\r\n" infoMsg += "Otherwise:\r\n\r\n" infoMsg += "Run:\r\n" infoMsg += RunSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Build:\r\n" infoMsg += BuildSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Publish:\r\n" infoMsg += PublishSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Test:\r\n" infoMsg += TestSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Swarm Deployment of Domain Services:\r\n" infoMsg += SwarmSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Export Version From Changelog:\r\n" infoMsg += ChangelogSelections.GetInfoMsg() + "\r\n\r\n" infoMsg += "Additional Info:\r\n" infoMsg += BuildTools.GetInfoMsg() + "\r\n\r\n" infoMsg += "Add '-help' to arguments to print this info again.\r\n\r\n" return infoMsg
def GetChangelogSelection(arguments): return BuildTools.GetProperties(arguments, CHANGELOG_KEY, GetInfoMsg())
def test_getInfoMsg_success(self): self.assertIsNotNone(BuildTools.GetInfoMsg())
def GetPublishSelections(arguments): publishProperty = BuildTools.GetProperties(arguments, PUBLISH_KEY, GetInfoMsg()) if BuildTools.SELECTIONS_KEY in publishProperty: return publishProperty[BuildTools.SELECTIONS_KEY] return {}
def ChangeToSampleFolderAndGetCwd(): selection = {BuildTools.DIRECTORY_KEY: TEST_SAMPLE_FOLDER} cwd = BuildTools.TryChangeToDirectoryAndGetCwd(selection) return cwd
def GetBuildSelections(arguments): buildProperty = BuildTools.GetProperties(arguments, BUILD_KEY, GetInfoMsg()) if BuildTools.SELECTIONS_KEY in buildProperty: return buildProperty[BuildTools.SELECTIONS_KEY] return {}
def GetRunSelections(arguments): runProperty = BuildTools.GetProperties(arguments, RUN_KEY, GetInfoMsg()) if BuildTools.SELECTIONS_KEY in runProperty: return runProperty[BuildTools.SELECTIONS_KEY] return {}
def GetTestSelections(arguments): testProperty = BuildTools.GetProperties(arguments, TEST_KEY, GetInfoMsg()) if BuildTools.SELECTIONS_KEY in testProperty: return testProperty[BuildTools.SELECTIONS_KEY] return {}