create and parse salt:// URLs with url util

This commit is contained in:
Justin Findlay 2015-05-02 10:37:36 -06:00
parent 1b786d0692
commit b23791716d
12 changed files with 44 additions and 27 deletions

View file

@ -37,6 +37,7 @@ import salt.utils.args
import salt.utils.event
import salt.utils.atomicfile
import salt.utils.thin
import salt.utils.url
import salt.utils.verify
import salt.utils.network
from salt.utils import is_windows
@ -1154,7 +1155,7 @@ def mod_data(fsclient):
for fn_ in sorted(files):
if fn_.startswith(pref):
if fn_.endswith(('.py', '.so', '.pyx')):
full = 'salt://{0}'.format(fn_)
full = salt.utils.url.create(fn_)
mod_path = fsclient.cache_file(full, env)
if not os.path.isfile(mod_path):
continue

View file

@ -23,6 +23,7 @@ import salt.transport
import salt.fileserver
import salt.utils
import salt.utils.templates
import salt.utils.url
import salt.utils.gzip_util
import salt.utils.http
from salt.utils.openstack.swift import SaltSwift
@ -65,7 +66,8 @@ class Client(object):
'''
if not path.startswith('salt://'):
raise MinionError(u'Unsupported path: {0}'.format(path))
return path[7:]
file_path, saltenv = salt.utils.url.parse(path)
return file_path
def _file_local_list(self, dest):
'''
@ -189,7 +191,7 @@ class Client(object):
ret = []
for path in self.file_list(saltenv):
ret.append(self.cache_file('salt://{0}'.format(path), saltenv))
ret.append(self.cache_file(salt.utils.url.create(path), saltenv))
return ret
def cache_dir(self, path, saltenv='base', include_empty=False,
@ -227,7 +229,7 @@ class Client(object):
if fn_.strip() and fn_.startswith(path):
if salt.utils.check_include_exclude(
fn_, include_pat, exclude_pat):
fn_ = self.cache_file('salt://' + fn_, saltenv)
fn_ = self.cache_file(salt.utils.url.create(fn_), saltenv)
if fn_:
ret.append(fn_)
@ -352,10 +354,13 @@ class Client(object):
# Backwards compatibility
saltenv = env
if path.startswith('salt://'):
path, senv = salt.utils.url.parse(path)
localsfilesdest = os.path.join(
self.opts['cachedir'], 'localfiles', path.lstrip('/'))
filesdest = os.path.join(
self.opts['cachedir'], 'files', saltenv, path.lstrip('salt://'))
self.opts['cachedir'], 'files', saltenv, path)
if os.path.exists(filesdest):
return filesdest
@ -419,12 +424,13 @@ class Client(object):
def get_state(self, sls, saltenv):
'''
Get a state file from the master and store it in the local minion
cache return the location of the file
cache; return the location of the file
'''
if '.' in sls:
sls = sls.replace('.', '/')
for path in ['salt://{0}.sls'.format(sls),
'/'.join(['salt:/', sls, 'init.sls'])]:
sls_url = salt.utils.url.create(sls + '.sls')
init_url = salt.utils.url.create(sls + '/init.sls')
for path in [sls_url, init_url]:
dest = self.cache_file(path, saltenv)
if dest:
return {'source': path, 'dest': dest}
@ -470,7 +476,7 @@ class Client(object):
minion_relpath = fn_[len(prefix):].lstrip('/')
ret.append(
self.get_file(
'salt://{0}'.format(fn_),
salt.utils.url.create(fn_),
'{0}/{1}'.format(dest, minion_relpath),
True, saltenv, gzip
)

View file

@ -7,6 +7,7 @@ import yaml
import salt.fileclient
import salt.utils
import salt.utils.url
import salt.ext.six as six
__virtualname__ = 'defaults'
@ -31,7 +32,7 @@ def _get_files(pillar_name):
paths = []
for ext in ('yaml', 'json'):
source_url = 'salt://{0}/{1}'.format(pillar_name, 'defaults.' + ext)
source_url = salt.utils.url.create(pillar_name + '/defaults.' + ext)
paths.append(source_url)
return __context__['cp.fileclient'].cache_files(paths)

View file

@ -48,6 +48,7 @@ import salt.utils
import salt.utils.process
import salt.utils.minion
import salt.utils.event
import salt.utils.url
import salt.transport
import salt.wheel
from salt.exceptions import (
@ -91,7 +92,7 @@ def _sync(form, saltenv=None):
saltenv = saltenv.split(',')
ret = []
remote = set()
source = os.path.join('salt://_{0}'.format(form))
source = salt.utils.url.create('_' + form)
mod_dir = os.path.join(__opts__['extension_modules'], '{0}'.format(form))
if not os.path.isdir(mod_dir):
log.info('Creating module dir {0!r}'.format(mod_dir))

View file

@ -18,6 +18,7 @@ import tempfile
import salt.config
import salt.utils
import salt.utils.jid
import salt.utils.url
import salt.state
import salt.payload
from salt.exceptions import SaltInvocationError
@ -741,7 +742,7 @@ def top(topfn,
st_ = salt.state.HighState(opts, pillar)
st_.push_active()
st_.opts['state_top'] = os.path.join('salt://', topfn)
st_.opts['state_top'] = salt.utils.url.create(topfn)
try:
ret = st_.call_highstate(
exclude=kwargs.get('exclude', []),

View file

@ -16,6 +16,7 @@ import salt.fileclient
import salt.minion
import salt.crypt
import salt.transport
import salt.utils.url
from salt.exceptions import SaltClientError
from salt.template import compile_template
from salt.utils.dictupdate import merge
@ -244,9 +245,9 @@ class Pillar(object):
if opts['state_top'].startswith('salt://'):
opts['state_top'] = opts['state_top']
elif opts['state_top'].startswith('/'):
opts['state_top'] = os.path.join('salt://', opts['state_top'][1:])
opts['state_top'] = salt.utils.url.create(opts['state_top'][1:])
else:
opts['state_top'] = os.path.join('salt://', opts['state_top'])
opts['state_top'] = salt.utils.url.create(opts['state_top'])
if self.__valid_ext(ext):
if 'ext_pillar' in opts:
opts['ext_pillar'].append(ext)

View file

@ -12,6 +12,7 @@ from yaml.scanner import ScannerError
from yaml.constructor import ConstructorError
# Import salt libs
import salt.utils.url
from salt.utils.yamlloader import SaltYamlSafeLoader, load
from salt.utils.odict import OrderedDict
from salt.exceptions import SaltRenderError
@ -57,8 +58,8 @@ def render(yaml_data, saltenv='base', sls='', argline='', **kws):
if len(warn_list) > 0:
for item in warn_list:
log.warn(
'{warn} found in salt://{sls} environment={saltenv}'.format(
warn=item.message, sls=sls, saltenv=saltenv
'{warn} found in {sls} environment={env}'.format(
warn=item.message, sls=salt.utils.url.create(sls), env=saltenv
)
)
if not data:

View file

@ -6,6 +6,7 @@ import logging
import warnings
# Import salt libs
import salt.utils.url
from salt.utils.serializers.yamlex import deserialize
log = logging.getLogger(__name__)
@ -23,8 +24,8 @@ def render(sls_data, saltenv='base', sls='', **kws):
for item in warn_list:
log.warn(
'{warn} found in salt://{sls} environment={saltenv}'.format(
warn=item.message, sls=sls, saltenv=saltenv
'{warn} found in {sls} environment={env}'.format(
warn=item.message, sls=salt.utils.url.create(sls), env=saltenv
)
)

View file

@ -30,6 +30,7 @@ import salt.minion
import salt.pillar
import salt.fileclient
import salt.utils.event
import salt.utils.url
import salt.syspaths as syspaths
from salt.utils import context, immutabletypes
from salt.template import compile_template, compile_template_str
@ -2261,7 +2262,7 @@ class BaseHighState(object):
# An error happened on the master
opts['renderer'] = 'yaml_jinja'
opts['failhard'] = False
opts['state_top'] = 'salt://top.sls'
opts['state_top'] = salt.utils.url.create('top.sls')
opts['nodegroups'] = {}
opts['file_roots'] = {'base': [syspaths.BASE_FILE_ROOTS_DIR]}
else:
@ -2270,9 +2271,9 @@ class BaseHighState(object):
if mopts['state_top'].startswith('salt://'):
opts['state_top'] = mopts['state_top']
elif mopts['state_top'].startswith('/'):
opts['state_top'] = os.path.join('salt://', mopts['state_top'][1:])
opts['state_top'] = salt.utils.url.create(mopts['state_top'][1:])
else:
opts['state_top'] = os.path.join('salt://', mopts['state_top'])
opts['state_top'] = salt.utils.url.create(mopts['state_top'])
opts['nodegroups'] = mopts.get('nodegroups', {})
opts['state_auto_order'] = mopts.get(
'state_auto_order',

View file

@ -248,6 +248,7 @@ import yaml
import salt.payload
import salt.utils
import salt.utils.templates
import salt.utils.url
from salt.exceptions import CommandExecutionError
from salt.utils.serializers import yaml as yaml_serializer
from salt.utils.serializers import json as json_serializer
@ -2311,7 +2312,7 @@ def recurse(name,
manage_directory(dirname)
vdir.add(dirname)
src = u'salt://{0}'.format(fn_)
src = salt.utils.url.create(fn_)
manage_file(dest, src)
if include_empty:

View file

@ -23,6 +23,7 @@ import yaml
# Import salt libs
import salt
import salt.utils
import salt.utils.url
import salt.fileclient
from salt.utils.odict import OrderedDict
@ -89,7 +90,7 @@ class SaltCacheLoader(BaseLoader):
'''
Cache a file from the salt master
'''
saltpath = path.join('salt://', template)
saltpath = salt.utils.url.create(template)
self.file_client().get_file(saltpath, '', True, self.saltenv)
def check_cache(self, template):

View file

@ -13,6 +13,7 @@ from mako.lookup import TemplateCollection, TemplateLookup # pylint: disable=im
# Import salt libs
import salt.fileclient
import salt.utils.url
class SaltMakoTemplateLookup(TemplateCollection):
@ -73,22 +74,22 @@ class SaltMakoTemplateLookup(TemplateCollection):
def get_template(self, uri, relativeto=None):
if uri.startswith("file://"):
prefix = "file://"
proto = "file://"
searchpath = "/"
salt_uri = uri
else:
prefix = "salt://"
proto = "salt://"
if self.opts['file_client'] == 'local':
searchpath = self.opts['file_roots'][self.saltenv]
else:
searchpath = [os.path.join(self.opts['cachedir'],
'files',
self.saltenv)]
salt_uri = uri if uri.startswith(prefix) else (prefix + uri)
salt_uri = uri if uri.startswith(proto) else salt.utils.url.create(uri)
self.cache_file(salt_uri)
self.lookup = TemplateLookup(directories=searchpath)
return self.lookup.get_template(salt_uri[len(prefix):])
return self.lookup.get_template(salt_uri[len(proto):])
def cache_file(self, fpath):
if fpath not in self.cache: