def DeploySwarmSelection(swarmSelection, prefix):
    cwd = BuildTools.TryChangeToDirectoryAndGetCwd(swarmSelection)
    BuildTools.HandleTerminalCommandsSelection(swarmSelection)
    SwarmManager.HandleManagement(
        [prefix] + BuildSwarmManagementFilesRow(swarmSelection) +
        BuildSwarmManagementPropertiesRow(swarmSelection))
    os.chdir(cwd)
Beispiel #2
0
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)
Beispiel #3
0
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)
Beispiel #4
0
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)
Beispiel #6
0
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)
Beispiel #9
0
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)
Beispiel #10
0
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)
Beispiel #12
0
 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)
Beispiel #14
0
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)
Beispiel #15
0
def ExportChangelogSelection(changelogSelection):
    if not (FILE_KEY in changelogSelection):
        return

    VersionTools.ExportVersionFromChangelogToEnvironment(
        changelogSelection[FILE_KEY],
        BuildTools.TryGetFromDictionary(changelogSelection, ENV_VERSION_KEY,
                                        'VERSION'))
Beispiel #16
0
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)
Beispiel #17
0
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)
Beispiel #21
0
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
Beispiel #22
0
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())
Beispiel #24
0
 def test_getInfoMsg_success(self):
     self.assertIsNotNone(BuildTools.GetInfoMsg())
Beispiel #25
0
def GetPublishSelections(arguments):
    publishProperty = BuildTools.GetProperties(arguments, PUBLISH_KEY, GetInfoMsg())
    if BuildTools.SELECTIONS_KEY in publishProperty:
        return publishProperty[BuildTools.SELECTIONS_KEY]
    return {}
Beispiel #26
0
def ChangeToSampleFolderAndGetCwd():
    selection = {BuildTools.DIRECTORY_KEY: TEST_SAMPLE_FOLDER}
    cwd = BuildTools.TryChangeToDirectoryAndGetCwd(selection)
    return cwd
Beispiel #27
0
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 {}
Beispiel #29
0
def GetTestSelections(arguments):
    testProperty = BuildTools.GetProperties(arguments, TEST_KEY, GetInfoMsg())
    if BuildTools.SELECTIONS_KEY in testProperty:
        return testProperty[BuildTools.SELECTIONS_KEY]
    return {}