99use Droid \Model \Inventory \Host ;
1010use Droid \Model \Inventory \HostGroup ;
1111use Droid \Model \Inventory \Inventory ;
12+ use Droid \Model \Project \Environment ;
1213use Droid \Model \Project \Module ;
1314use Droid \Model \Project \Project ;
14- use Droid \Model \Project \RegisteredCommand ;
1515use Droid \Model \Project \Target ;
1616use Droid \Model \Project \Task ;
1717use Symfony \Component \Yaml \Exception \ParseException ;
@@ -39,9 +39,13 @@ public function __construct(
3939 $ this ->transformer = $ transformer ;
4040 }
4141
42- public function load (Project $ project , Inventory $ inventory )
43- {
42+ public function load (
43+ Project $ project ,
44+ Inventory $ inventory ,
45+ Environment $ environment
46+ ) {
4447 $ data = $ this ->loadYaml ($ project ->getConfigFilePath ());
48+ $ this ->loadEnvironment ($ environment , $ data );
4549 $ this ->loadInventory ($ inventory , $ data );
4650 $ this ->loadProject ($ project , $ data );
4751 }
@@ -106,18 +110,31 @@ public function loadYaml($filename)
106110
107111 }
108112
109- private function loadProject ( Project $ project , $ data )
113+ private function loadEnvironment ( Environment $ environment , $ data )
110114 {
111- $ this ->loadVariables ($ data , $ project );
115+ if (! array_key_exists ('environment ' , $ data )
116+ || ! is_array ($ data ['environment ' ])
117+ ) {
118+ return ;
119+ }
112120
113- if (isset ($ data ['register ' ])) {
114- foreach ($ data ['register ' ] as $ registerNode ) {
115- foreach ($ registerNode as $ className => $ parameters ) {
116- $ command = new RegisteredCommand ($ className , $ parameters );
117- $ project ->addRegisteredCommand ($ command );
118- }
121+ foreach ($ data ['environment ' ] as $ k => $ v ) {
122+ if (property_exists (Environment::class, $ k )) {
123+ $ environment ->$ k = $ v ;
119124 }
120125 }
126+ }
127+
128+ private function loadProject (Project $ project , $ data )
129+ {
130+ if (array_key_exists ('name ' , $ data ) && is_string ($ data ['name ' ])) {
131+ $ project ->name = $ data ['name ' ];
132+ }
133+ if (array_key_exists ('description ' , $ data ) && is_string ($ data ['description ' ])) {
134+ $ project ->description = $ data ['description ' ];
135+ }
136+
137+ $ this ->loadVariables ($ data , $ project );
121138
122139 if (isset ($ data ['modules ' ])) {
123140 foreach ($ data ['modules ' ] as $ name => $ source ) {
@@ -185,7 +202,9 @@ public function loadModule(Module $module)
185202 $ filename = $ path . '/droid.yml ' ;
186203 $ data = $ this ->loadYaml ($ filename );
187204 $ module ->setBasePath ($ path );
188- $ module ->setDescription ($ data ['project ' ]['description ' ]);
205+ if (array_key_exists ('description ' , $ data ) && is_string ($ data ['description ' ])) {
206+ $ module ->setDescription ($ data ['description ' ]);
207+ }
189208 $ this ->loadVariables ($ data , $ module );
190209 $ this ->loadTasks ($ data , $ module , 'tasks ' );
191210 $ this ->loadTasks ($ data , $ module , 'triggers ' );
@@ -242,42 +261,35 @@ private function loadHosts(Inventory $inventory, $hosts)
242261 foreach ($ hosts as $ hostName => $ hostData ) {
243262 $ host = new Host ($ hostName );
244263 $ this ->loadRules ($ host , $ hostData );
245- $ inventory ->addHost ($ host );
246- if (!$ hostData ) {
247- continue ;
248- }
249264 foreach ($ hostData as $ key => $ value ) {
250265 switch ($ key ) {
251266 case 'variables ' :
252267 $ this ->loadVariables ($ hostData , $ host );
253268 break ;
269+ case 'droid_ip ' :
270+ $ host ->droid_ip = $ value ;
271+ break ;
272+ case 'droid_port ' :
273+ if (! is_numeric ($ value )) {
274+ throw new RuntimeException ('Expected numeric droid_port. ' );
275+ }
276+ $ host ->droid_port = (int ) $ value ;
277+ break ;
254278 case 'public_ip ' :
255279 $ host ->public_ip = $ value ;
256280 break ;
257281 case 'private_ip ' :
258282 $ host ->private_ip = $ value ;
259283 break ;
260- case 'public_port ' :
261- $ host ->public_port = $ value ;
262- break ;
263- case 'private_port ' :
264- $ host ->private_port = $ value ;
265- break ;
266284 case 'username ' :
267285 $ host ->setUsername ($ value );
268286 break ;
269- case 'password ' :
270- $ host ->setPassword ($ value );
271- break ;
272- case 'auth ' :
273- $ host ->setAuth ($ value );
287+ case 'firewall_policy ' :
288+ $ host ->setFirewallPolicy ($ value );
274289 break ;
275290 case 'keyfile ' :
276291 $ host ->setKeyFile (Utils::absoluteFilename ($ value ));
277292 break ;
278- case 'keypass ' :
279- $ host ->setKeyPass ($ value );
280- break ;
281293 case 'ssh_options ' :
282294 $ host ->setSshOptions ($ value );
283295 break ;
@@ -294,6 +306,7 @@ private function loadHosts(Inventory $inventory, $hosts)
294306 throw new RuntimeException ("Unknown host property: " . $ key );
295307 }
296308 }
309+ $ inventory ->addHost ($ host );
297310 }
298311 foreach ($ want_gateway as $ want => $ gateway ) {
299312 if (! $ inventory ->hasHost ($ gateway )) {
@@ -323,7 +336,7 @@ private function loadHosts(Inventory $inventory, $hosts)
323336 }
324337 if ($ incompleteHosts ) {
325338 $ this ->errors [] = sprintf (
326- 'The following hosts fail to meet the minimum requirement that they exhibit an IP address (public_ip): %s. ' ,
339+ 'The following hosts fail to meet the minimum requirement that they exhibit an IP address (droid_ip or public_ip): %s. ' ,
327340 implode (', ' , $ incompleteHosts )
328341 );
329342 }
@@ -335,6 +348,10 @@ private function loadHostGroups(Inventory $inventory, $groups)
335348 $ group = new HostGroup ($ groupName );
336349 $ this ->loadRules ($ group , $ groupNode );
337350
351+ if (isset ($ groupNode ['firewall_policy ' ])) {
352+ $ group ->setFirewallPolicy ($ groupNode ['firewall_policy ' ]);
353+ }
354+
338355 if (isset ($ groupNode ['hosts ' ])) {
339356 foreach ($ groupNode ['hosts ' ] as $ hostName ) {
340357 if (!$ inventory ->hasHost ($ hostName )) {
0 commit comments