Skip to content

Commit 7cccfbf

Browse files
committed
Add optional requires feature.
refs #41
1 parent 435997b commit 7cccfbf

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
### Added
44
- Enable configuration of rate at which the monitoring thread checks on components/hosts.
5+
- Add possibility to specify optional requirements for components. This is useful for combination with the exclude
6+
feature.
57

68
## Fixed
79
- Having requires or depends defined as empty list does not cause an exception anymore.

hyperion/manager.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,6 +1094,7 @@ def set_dependencies(self):
10941094

10951095
provides = {}
10961096
requires = {}
1097+
optional = {}
10971098

10981099
for group in self.config['groups']:
10991100
for comp in group['components']:
@@ -1126,12 +1127,32 @@ def set_dependencies(self):
11261127
else:
11271128
self.logger.warn("%s has an empty requires list!" % comp['id'])
11281129

1130+
if 'optional-requires' in comp:
1131+
if comp.get('optional-requires'):
1132+
for entry in comp.get('optional-requires'):
1133+
if optional.get(entry):
1134+
optional[entry].append(comp['id'])
1135+
else:
1136+
optional[entry] = [comp['id']]
1137+
else:
1138+
self.logger.warn("%s has an empty optional requires list!" % comp['id'])
1139+
1140+
met_optionals = [k for k in optional if k in provides]
11291141
unmet = [k for k in requires if k not in provides]
11301142

11311143
if len(unmet) > 0:
11321144
self.logger.critical("Unmet requirements were detected! %s" % unmet)
11331145
unmet_deps = True
11341146

1147+
if len(optional) > 0:
1148+
self.logger.debug("Detected the following optional requirements available: %s" % met_optionals)
1149+
1150+
for entry in met_optionals:
1151+
if requires.get(entry):
1152+
requires[entry].extend(optional[entry])
1153+
else:
1154+
requires[entry] = optional[entry]
1155+
11351156
# Add a pseudo node that depends on all other nodes, to get a starting point to be able to iterate through all
11361157
# nodes with simple algorithms
11371158
master_node = Node({'id': 'master_node'})

0 commit comments

Comments
 (0)