mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
create and parse salt:// URLs with url util
This commit is contained in:
parent
1b786d0692
commit
b23791716d
12 changed files with 44 additions and 27 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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', []),
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue