Переглянути джерело

Merge pull request #8061 from albers/completion-profiles

Add bash completion for profiles and a command to list profiles
Chris Crone 4 роки тому
батько
коміт
84afa518e8

+ 10 - 0
compose/cli/main.py

@@ -390,6 +390,7 @@ class TopLevelCommand:
             --no-interpolate         Don't interpolate environment variables.
             -q, --quiet              Only validate the configuration, don't print
                                      anything.
+            --profiles               Print the profile names, one per line.
             --services               Print the service names, one per line.
             --volumes                Print the volume names, one per line.
             --hash="*"               Print the service config hash, one per line.
@@ -409,6 +410,15 @@ class TopLevelCommand:
         if options['--quiet']:
             return
 
+        if options['--profiles']:
+            profiles = set()
+            for service in compose_config.services:
+                if 'profiles' in service:
+                    for profile in service['profiles']:
+                        profiles.add(profile)
+            print('\n'.join(sorted(profiles)))
+            return
+
         if options['--services']:
             print('\n'.join(service['name'] for service in compose_config.services))
             return

+ 7 - 2
contrib/completion/bash/docker-compose

@@ -138,7 +138,7 @@ _docker_compose_config() {
 			;;
 	esac
 
-	COMPREPLY=( $( compgen -W "--hash --help --no-interpolate --quiet -q --resolve-image-digests --services --volumes" -- "$cur" ) )
+	COMPREPLY=( $( compgen -W "--hash --help --no-interpolate --profiles --quiet -q --resolve-image-digests --services --volumes" -- "$cur" ) )
 }
 
 
@@ -172,6 +172,10 @@ _docker_compose_docker_compose() {
 			COMPREPLY=( $( compgen -W "debug info warning error critical" -- "$cur" ) )
 			return
 			;;
+		--profile)
+			COMPREPLY=( $( compgen -W "$(__docker_compose_q config --profiles)" -- "$cur" ) )
+			return
+			;;
 		--project-directory)
 			_filedir -d
 			return
@@ -618,10 +622,11 @@ _docker_compose() {
 		--tlskey
 	"
 
-	# These options are require special treatment when searching the command.
+	# These options require special treatment when searching the command.
 	local top_level_options_with_args="
 		--ansi
 		--log-level
+		--profile
 	"
 
 	COMPREPLY=()

+ 5 - 0
tests/acceptance/cli_test.py

@@ -237,6 +237,11 @@ class CLITestCase(DockerClientTestCase):
         result = self.dispatch(['-H=tcp://doesnotexist:8000', 'ps'], returncode=1)
         assert "Couldn't connect to Docker daemon" in result.stderr
 
+    def test_config_list_profiles(self):
+        self.base_dir = 'tests/fixtures/config-profiles'
+        result = self.dispatch(['config', '--profiles'])
+        assert set(result.stdout.rstrip().split('\n')) == {'debug', 'frontend', 'gui'}
+
     def test_config_list_services(self):
         self.base_dir = 'tests/fixtures/v2-full'
         result = self.dispatch(['config', '--services'])

+ 15 - 0
tests/fixtures/config-profiles/docker-compose.yml

@@ -0,0 +1,15 @@
+version: '3.8'
+services:
+  frontend:
+    image: frontend
+    profiles: ["frontend", "gui"]
+  phpmyadmin:
+    image: phpmyadmin
+    depends_on:
+      - db
+    profiles:
+      - debug
+  backend:
+    image: backend
+  db:
+    image: mysql