Skip to content

Commit ba8436a

Browse files
committed
State sls must allow include from any environment allowed in top.sls
1 parent b1427e1 commit ba8436a

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

salt/state.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,22 +1472,38 @@ def render_state(self, sls, env, mods):
14721472
'as a list'.format(sls))
14731473
errors.append(err)
14741474
else:
1475+
# Available environments to which this minion belongs
1476+
my_avail = self.top_matches(self.get_top()).keys()
1477+
14751478
for inc_sls in state.pop('include'):
1476-
if fnmatch.filter(self.avail[env], inc_sls):
1479+
# Subset of my_avail containing the include sls
1480+
my_env = [
1481+
aenv for aenv in my_avail
1482+
if fnmatch.filter(self.avail[aenv], inc_sls)
1483+
]
1484+
1485+
# An include must only be one available in one environment
1486+
if my_env and len(my_env) == 1:
14771487
if inc_sls not in mods:
14781488
nstate, mods, err = self.render_state(
1479-
inc_sls,
1480-
env,
1481-
mods
1482-
)
1489+
inc_sls,
1490+
my_env[0],
1491+
mods
1492+
)
14831493
if nstate:
14841494
state.update(nstate)
14851495
if err:
14861496
errors += err
14871497
else:
1488-
msg = ('Specified SLS {0} in environment {1} '
1489-
'is not available on the salt master'
1490-
).format(inc_sls, env)
1498+
msg = ''
1499+
if not my_env:
1500+
msg = ('Unknown include: Specified SLS {0} is not available on the salt master '
1501+
'in any available environments {1} '
1502+
).format(inc_sls, ', '.join(my_avail))
1503+
elif len(my_env) > 1:
1504+
msg = ('Ambiguous include: Specified SLS {0} is available on the salt master '
1505+
'in available environments {1}'
1506+
).format(inc_sls, ', '.join(my_env))
14911507
log.error(msg)
14921508
if self.opts['failhard']:
14931509
errors.append(msg)

0 commit comments

Comments
 (0)