feat(source): adding tar https functionality

- updated download function
- add option for certs in config

Change-Id: Ic8dd8629fa759cd81deae5d4d94056154e71f6c1
This commit is contained in:
gardlt 2017-09-01 12:44:59 +00:00
parent 7b26e59422
commit ef26f5c36e
5 changed files with 36 additions and 11 deletions

View File

@ -15,6 +15,10 @@
from oslo_config import cfg
from oslo_log import log as logging
from armada import conf
conf.set_app_default_configs()
CONF = cfg.CONF
LOG = logging.getLogger(__name__)

View File

@ -30,6 +30,13 @@ default_options = [
default='http://0.0.0.0/v3',
help=utils.fmt('The default Keystone authentication url.')),
cfg.StrOpt(
'certs',
default=None,
help=utils.fmt("""
Absolute path to the certificate file to use for chart registries
""")),
cfg.StrOpt(
'kubernetes_config_path',
default='/home/user/.kube/',

View File

@ -15,6 +15,7 @@
import difflib
import yaml
from oslo_config import cfg
from oslo_log import log as logging
from supermutes.dot import dotify
@ -32,7 +33,7 @@ from armada.utils import lint
from armada import const
LOG = logging.getLogger(__name__)
CONF = cfg.CONF
DEFAULT_TIMEOUT = 3600
@ -144,7 +145,14 @@ class Armada(object):
ch.get('chart')['source_dir'] = (location, subpath)
elif ct_type == 'tar':
LOG.info('Downloading tarball from: %s', location)
tarball_dir = source.get_tarball(location)
if not CONF.certs:
LOG.warn(
'Disabling server validation certs to extract charts')
tarball_dir = source.get_tarball(location, verify=False)
else:
tarball_dir = source.get_tarball(location, verify=CONF.cert)
ch.get('chart')['source_dir'] = (tarball_dir, subpath)
elif ct_type == 'git':
reference = ch.get('chart').get('source').get(

View File

@ -83,7 +83,7 @@ class GitTestCase(unittest.TestCase):
source.download_tarball(url)
mock_temp.mkstemp.assert_called_once()
mock_requests.get.assert_called_once_with(url)
mock_requests.get.assert_called_once_with(url, verify=False)
mock_open.assert_called_once_with('/tmp/armada', 'wb')
mock_open().write.assert_called_once_with(
mock_requests.get(url).content)

View File

@ -12,15 +12,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from os import path
import os
import requests
import shutil
import tarfile
import tempfile
from os import path
from git import Repo
import requests
from git import Git
from git import Repo
from requests.packages import urllib3
from armada.exceptions import source_exceptions
@ -50,23 +51,28 @@ def git_clone(repo_url, ref='master'):
return _tmp_dir
def get_tarball(tarball_url):
tarball_path = download_tarball(tarball_url)
def get_tarball(tarball_url, verify=False):
tarball_path = download_tarball(tarball_url, verify=verify)
return extract_tarball(tarball_path)
def download_tarball(tarball_url):
def download_tarball(tarball_url, verify=False):
'''
Downloads a tarball to /tmp and returns the path
'''
try:
if not verify:
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
tarball_filename = tempfile.mkstemp(prefix='armada')[1]
response = requests.get(tarball_url)
response = requests.get(tarball_url, verify=verify)
with open(tarball_filename, 'wb') as f:
f.write(response.content)
return tarball_filename
except Exception:
raise source_exceptions.TarballDownloadException(tarball_url)
return tarball_filename
def extract_tarball(tarball_path):