def download_docker_image(docker_image, target_file, cache=None): try: from docker.client import Client from docker.utils import kwargs_from_env kwargs = kwargs_from_env() kwargs['tls'].assert_hostname = False docker_cli = Client(**kwargs) image = docker_cli.get_image(docker_image) image_tar = open(target_file,'w') image_tar.write(image.data) image_tar.close() except Exception as e: if cache is not None: cached_file = os.path.join(cache, docker_image.lower().replace('/','-').replace(':','-') + '.tgz') if os.path.isfile(cached_file): print 'using cached version of', docker_image urllib.urlretrieve(cached_file, target_file) return print >> sys.stderr, docker_image, 'not found in cache', cache sys.exit(1) if isinstance(e, KeyError): print >> sys.stderr, 'docker not configured on this machine (or environment variables are not properly set)' else: print >> sys.stderr, docker_image, 'not found on local machine' print >> sys.stderr, 'you must either pull the image, or download it and use the --docker-cache option' sys.exit(1)
def download_docker_image(docker_image, target_file, cache=None): try: from docker.client import Client from docker.utils import kwargs_from_env kwargs = kwargs_from_env() kwargs['tls'] = False docker_cli = Client(**kwargs) image = docker_cli.get_image(docker_image) image_tar = open(target_file,'w') image_tar.write(image.data) image_tar.close() except Exception as e: if cache is not None: cached_file = os.path.join(cache, docker_image.lower().replace('/','-').replace(':','-') + '.tgz') if os.path.isfile(cached_file): print 'using cached version of', docker_image urllib.urlretrieve(cached_file, target_file) return print >> sys.stderr, docker_image, 'not found in cache', cache sys.exit(1) if isinstance(e, KeyError): print >> sys.stderr, 'docker not configured on this machine (or environment variables are not properly set)' else: print >> sys.stderr, docker_image, 'not found on local machine' print >> sys.stderr, 'you must either pull the image, or download it and use the --docker-cache option' sys.exit(1)
def download_docker_image(docker_image, target_file): from docker.client import Client from docker.utils import kwargs_from_env kwargs = kwargs_from_env() kwargs['tls'].assert_hostname = False docker_cli = Client(**kwargs) image = docker_cli.get_image(docker_image) image_tar = open(target_file,'w') image_tar.write(image.data) image_tar.close()
def download_docker_image(docker_image, target_file): from docker.client import Client try: # First attempt boot2docker, because it is fail-fast from docker.utils import kwargs_from_env kwargs = kwargs_from_env() kwargs['tls'].assert_hostname = False docker_cli = Client(**kwargs) except KeyError as e: # Assume this means we are not using boot2docker docker_cli = Client(base_url='unix://var/run/docker.sock', tls=False) image = docker_cli.get_image(docker_image) image_tar = open(target_file, 'w') image_tar.write(image.data) image_tar.close()
def download_docker_image(docker_image, target_file): from docker.client import Client try: # First attempt boot2docker, because it is fail-fast from docker.utils import kwargs_from_env kwargs = kwargs_from_env() kwargs['tls'].assert_hostname = False docker_cli = Client(**kwargs) except KeyError as e: # Assume this means we are not using boot2docker docker_cli = Client(base_url='unix://var/run/docker.sock', tls=False) image = docker_cli.get_image(docker_image) image_tar = open(target_file,'w') image_tar.write(image.data) image_tar.close()
def download(url, filename, cache=None): if cache is not None: basename = os.path.basename(filename) cachename = os.path.join(cache, basename) if os.path.isfile(cachename): print('- using cached version of', basename) shutil.copy(cachename, filename) return if url.startswith("http:") or url.startswith("https"): # [mboldt:20160908] Using urllib.urlretrieve gave an "Access # Denied" page when trying to download docker boshrelease. # I don't know why. requests.get works. Do what works. response = requests.get(url, stream=True) response.raise_for_status() with open(filename, 'wb') as file: for chunk in response.iter_content(chunk_size=1024): if chunk: file.write(chunk) elif url.startswith("docker:"): docker_image = url.lstrip("docker:").lstrip("/").lstrip("/") try: from docker.client import Client from docker.utils import kwargs_from_env kwargs = kwargs_from_env() kwargs['tls'] = False docker_cli = Client(**kwargs) image = docker_cli.get_image(docker_image) image_tar = open(filename,'w') image_tar.write(image.data) image_tar.close() except KeyError as e: print('docker not configured on this machine (or environment variables are not properly set)', file=sys.stderr) sys.exit(1) except: print(docker_image, 'not found on local machine', file=sys.stderr) print('you must either pull the image, or download it and use the --cache option', file=sys.stderr) sys.exit(1) else: shutil.copy(url, filename)
def download(url, filename, cache=None): if cache is not None: basename = os.path.basename(filename) cachename = os.path.join(cache, basename) if os.path.isfile(cachename): print('- using cached version of', basename) shutil.copy(cachename, filename) return # Special url to find a file associated with a github release. # github://cf-platform-eng/meta-buildpack/meta-buildpack.tgz # will find the file named meta-buildpack-0.0.3.tgz in the latest # release for https://github.com/cf-platform-eng/meta-buildpack if url.startswith("github:"): repo_name = url.lstrip("github:").lstrip("/").lstrip("/") file_name = os.path.basename(repo_name) repo_name = os.path.dirname(repo_name) url = "https://api.github.com/repos/" + repo_name + "/releases/latest" response = requests.get(url, stream=True) response.raise_for_status() release = response.json() assets = release.get('assets', []) url = None pattern = re.compile('.*\\.'.join(file_name.rsplit('.', 1))+'\\Z') for asset in assets: if pattern.match(asset['name']) is not None: url = asset['browser_download_url'] break if url is None: print('no matching asset found for repo', repo_name, 'file', file_name, file=sys.stderr) sys.exit(1) # Fallthrough intentional, we now proceed to download the URL we found if url.startswith("http:") or url.startswith("https"): # [mboldt:20160908] Using urllib.urlretrieve gave an "Access # Denied" page when trying to download docker boshrelease. # I don't know why. requests.get works. Do what works. response = requests.get(url, stream=True) response.raise_for_status() with open(filename, 'wb') as file: for chunk in response.iter_content(chunk_size=1024): if chunk: file.write(chunk) elif url.startswith("docker:"): docker_image = url.lstrip("docker:").lstrip("/").lstrip("/") try: from docker.client import Client from docker.utils import kwargs_from_env kwargs = kwargs_from_env() kwargs['tls'] = False docker_cli = Client(**kwargs) image = docker_cli.get_image(docker_image) image_tar = open(filename,'w') image_tar.write(image.data) image_tar.close() except KeyError as e: print('docker not configured on this machine (or environment variables are not properly set)', file=sys.stderr) sys.exit(1) except: print(docker_image, 'not found on local machine', file=sys.stderr) print('you must either pull the image, or download it and use the --cache option', file=sys.stderr) sys.exit(1) elif os.path.isdir(url): shutil.copytree(url, filename) else: shutil.copy(url, filename)