You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by GitBox <gi...@apache.org> on 2022/02/04 14:57:03 UTC

[GitHub] [airflow] potiuk commented on a change in pull request #21145: enter the shell breeze2 environment

potiuk commented on a change in pull request #21145:
URL: https://github.com/apache/airflow/pull/21145#discussion_r799537807



##########
File path: dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
##########
@@ -53,28 +67,175 @@
 ]
 
 
-def get_extra_docker_flags(all: bool, airflow_sources: str) -> List:
+def get_extra_docker_flags(all: bool, selected: bool, airflow_sources: str) -> List:
     # get_extra_docker_flags(False, str(airflow_source))
+    # add verbosity
     EXTRA_DOCKER_FLAGS = []
     if all:
         EXTRA_DOCKER_FLAGS.extend(["-v", f"{airflow_sources}:/opt/airflow/:cached"])
-    else:
+    elif selected:
         for flag in NECESSARY_HOST_VOLUMES:
             EXTRA_DOCKER_FLAGS.extend(["-v", airflow_sources + flag])
+    else:
+        console.print('Skip mounting host volumes to Docker')
     EXTRA_DOCKER_FLAGS.extend(["-v", f"{airflow_sources}/files:/files"])
     EXTRA_DOCKER_FLAGS.extend(["-v", f"{airflow_sources}/dist:/dist"])
     EXTRA_DOCKER_FLAGS.extend(["--rm"])
     EXTRA_DOCKER_FLAGS.extend(["--env-file", f"{airflow_sources}/scripts/ci/docker-compose/_docker.env"])
     return EXTRA_DOCKER_FLAGS
 
 
-def check_docker_resources(
-    verbose: bool, mount_all_flag: bool, airflow_sources: str, airflow_ci_image_name: str
-):
-    extra_docker_flags = get_extra_docker_flags(mount_all_flag, airflow_sources)
+def check_docker_resources(verbose: bool, airflow_sources: str, airflow_ci_image_name: str):
+    extra_docker_flags = get_extra_docker_flags(
+        MOUNT_ALL_LOCAL_SOURCES, MOUNT_SELECTED_LOCAL_SOURCES, airflow_sources
+    )
     cmd = []
     cmd.extend(["docker", "run", "-t"])
     cmd.extend(extra_docker_flags)
     cmd.extend(["--entrypoint", "/bin/bash", airflow_ci_image_name])
     cmd.extend(["-c", "python /opt/airflow/scripts/in_container/run_resource_check.py"])
     run_command(cmd, verbose=verbose, text=True)
+
+
+def check_docker_permission(verbose) -> bool:
+    permission_denied = False
+    docker_permission_command = ["docker", "info"]
+    try:
+        _ = run_command(
+            docker_permission_command,
+            verbose=verbose,
+            suppress_console_print=True,
+            capture_output=True,
+            text=True,
+        )
+    except subprocess.CalledProcessError as ex:
+        permission_denied = True
+        if ex.stdout and 'Got permission denied while trying to connect' in ex.stdout:
+            console.print('ERROR: You have `permission denied` error when trying to communicate with docker.')
+            console.print(
+                'Most likely you need to add your user to `docker` group: \
+                https://docs.docker.com/ engine/install/linux-postinstall/ .'
+            )
+    return permission_denied
+
+
+def compare_version(current_version: str, min_version: str) -> bool:
+    return version.parse(current_version) > version.parse(min_version)
+
+
+def check_docker_version(verbose: bool):
+    permission_denied = check_docker_permission(verbose)
+    if not permission_denied:
+        docker_version_command = ['docker', 'version', '--format', '{{.Client.Version}}']
+        docker_version = ''
+        docker_version_output = run_command(
+            docker_version_command,
+            verbose=verbose,
+            suppress_console_print=True,
+            capture_output=True,
+            text=True,
+        )
+        if docker_version_output.returncode == 0:
+            docker_version = docker_version_output.stdout.strip()
+        if docker_version == '':
+            console.print(
+                f'Your version of docker is unknown. If the scripts fail, please make sure to \
+                    install docker at least: {MIN_DOCKER_VERSION} version.'
+            )
+        else:
+            good_version = compare_version(docker_version, MIN_DOCKER_VERSION)
+            if good_version:
+                console.print(f'Good version of Docker: {docker_version}.')
+            else:
+                console.print(
+                    f'Your version of docker is too old:{docker_version}. Please upgrade to \
+                    at least ${MIN_DOCKER_VERSION}'
+                )
+
+
+def check_docker_compose_version(verbose: bool):
+    version_pattern = re.compile(r'(\d+)\.(\d+)\.(\d+)')
+    docker_compose_version_command = ["docker-compose", "--version"]
+    docker_compose_version_output = run_command(
+        docker_compose_version_command,
+        verbose=verbose,
+        suppress_console_print=True,
+        capture_output=True,
+        text=True,
+    )
+    if docker_compose_version_output.returncode == 0:
+        docker_compose_version = docker_compose_version_output.stdout
+        version_extracted = version_pattern.search(docker_compose_version)
+        if version_extracted is not None:
+            version = '.'.join(version_extracted.groups())
+            good_version = compare_version(version, MIN_DOCKER_COMPOSE_VERSION)
+            if good_version:
+                console.print(f'Good version of docker-compose: {version}')
+            else:
+                console.print(
+                    f'You have too old version of docker-compose: {version}! \
+                At least 1.29 is needed! Please upgrade!'
+                )
+                console.print(
+                    'See https://docs.docker.com/compose/install/ for instructions. \
+                Make sure docker-compose you install is first on the PATH variable of yours.'
+                )
+    else:
+        console.print(
+            'Unknown docker-compose version. At least 1.29 is needed! \
+        If Breeze fails upgrade to latest available docker-compose version'
+        )
+
+
+def prepare_docker_compose_files(verbose: bool, backend: str, integrations: Tuple[str]):
+    # fetch backend and integration from cache
+    compose_ci_file = []
+    main_ci_docker_compose_file = f"{str(SCRIPTS_CI_DIR)}/docker-compose/base.yml"
+    backend_docker_compose_file = f"{str(SCRIPTS_CI_DIR)}/docker-compose/backend-{backend}.yml"
+    backend_port_docker_compose_file = f"{str(SCRIPTS_CI_DIR)}/docker-compose/backend-{backend}-port.yml"
+    local_docker_compose_file = f"{str(SCRIPTS_CI_DIR)}/docker-compose/local.yml"
+    local_all_sources_docker_compose_file = f"{str(SCRIPTS_CI_DIR)}/docker-compose/local-all-sources.yml"
+    files_docker_compose_file = f"{str(SCRIPTS_CI_DIR)}/docker-compose/files.yml"
+    remove_sources_docker_compose_file = f"{str(SCRIPTS_CI_DIR)}/docker-compose/remove-sources.yml"
+    forward_credentials_docker_compose_file = f"{str(SCRIPTS_CI_DIR)}/docker-compose/forward-credentials.yml"
+    # mssql based check have to be added
+    if backend == 'mssql':
+        docker_filesystem_command = [

Review comment:
       I need to see it - ping me on slack or better schedule 1-1 session, I think this is about the right time to have a session with entering the shell as I can help to resolve it quicker by chatting.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org