Better handle nested erros from docker client
							parent
							
								
									0877d09bbf
								
							
						
					
					
						commit
						6d38f3d0cb
					
				| 
						 | 
					@ -32,7 +32,7 @@ import tractor
 | 
				
			||||||
import docker
 | 
					import docker
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
from docker.models.containers import Container
 | 
					from docker.models.containers import Container
 | 
				
			||||||
from docker.errors import DockerException
 | 
					from docker.errors import DockerException, APIError
 | 
				
			||||||
from requests.exceptions import ConnectionError
 | 
					from requests.exceptions import ConnectionError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from ..log import get_logger  # , get_console_log
 | 
					from ..log import get_logger  # , get_console_log
 | 
				
			||||||
| 
						 | 
					@ -102,10 +102,23 @@ async def open_docker(
 | 
				
			||||||
        # prolly no daemon started
 | 
					        # prolly no daemon started
 | 
				
			||||||
        raise DockerNotStarted('!?!?')
 | 
					        raise DockerNotStarted('!?!?')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    except DockerException as err:
 | 
					    except (
 | 
				
			||||||
 | 
					        DockerException,
 | 
				
			||||||
 | 
					        APIError,
 | 
				
			||||||
 | 
					    ) as err:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def unpack_msg(err: Exception) -> str:
 | 
				
			||||||
 | 
					            args = getattr(err, 'args', None)
 | 
				
			||||||
 | 
					            if args:
 | 
				
			||||||
 | 
					                return args
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # could be more specific so let's check if it's just perms.
 | 
					        # could be more specific so let's check if it's just perms.
 | 
				
			||||||
        if 'PermissionError' in err.args[0]:
 | 
					        if err.args:
 | 
				
			||||||
            raise DockerException('You dint run as root yo!')
 | 
					            errs = err.args
 | 
				
			||||||
 | 
					            for err in errs:
 | 
				
			||||||
 | 
					                msg = unpack_msg(err)
 | 
				
			||||||
 | 
					                if msg and 'PermissionError' in msg:
 | 
				
			||||||
 | 
					                    raise DockerException('You dint run as root yo!')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # not perms?
 | 
					        # not perms?
 | 
				
			||||||
        raise
 | 
					        raise
 | 
				
			||||||
| 
						 | 
					@ -233,7 +246,13 @@ async def start_ahab(
 | 
				
			||||||
        loglevel='runtime',
 | 
					        loglevel='runtime',
 | 
				
			||||||
    ) as tn:
 | 
					    ) as tn:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        portal = await tn.start_actor('ahab', enable_modules=[__name__])
 | 
					        portal = await tn.start_actor(
 | 
				
			||||||
 | 
					            'marketstored',
 | 
				
			||||||
 | 
					            enable_modules=[__name__]
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # de-escalate root perms to the original user
 | 
				
			||||||
 | 
					        # after the docker supervisor actor is spawned.
 | 
				
			||||||
        if config._parent_user:
 | 
					        if config._parent_user:
 | 
				
			||||||
            import pwd
 | 
					            import pwd
 | 
				
			||||||
            os.setuid(
 | 
					            os.setuid(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue