1+ from __future__ import absolute_import , division , print_function
2+
3+
4+ __metaclass__ = type
5+
6+ from ansible import constants as C
7+ from ansible .utils .display import Display
8+ from ansible .plugins .action import ActionBase
9+
10+ from ..helper_functions import do_something
11+
12+ import iac_validate .validator
13+ from iac_validate .yaml import load_yaml_files
14+ import os
15+
16+ display = Display ()
17+
18+ class ActionModule (ActionBase ):
19+
20+ def run (self , tmp = None , task_vars = None ):
21+ results = super (ActionModule , self ).run (tmp , task_vars )
22+ results ['failed' ] = False
23+ results ['msg' ] = None
24+ results ['data' ] = {}
25+
26+ schema = self ._task .args .get ('schema' )
27+ rules = self ._task .args .get ('rules' )
28+ mdata = self ._task .args .get ('mdata' )
29+
30+ # Generate a warning if the Schema and Rules are not provided
31+ if schema and not os .path .exists (schema ):
32+ display .warning ("The provided schema ({0}) does not appear to exist! " .format (schema ))
33+ # The rules directory is considered empty if it only contains the .gitkeep file
34+ if len (os .listdir (rules )) == 1 and '.gitkeep' in os .listdir (rules ):
35+ display .warning ("The rules directory ({0}) is empty! " .format (rules ))
36+
37+ # Verify That Data Sources Exists
38+ if mdata and not os .path .exists (mdata ):
39+ results ['failed' ] = True
40+ results ['msg' ] = "The data directory ({0}) for this fabric does not appear to exist!" .format (mdata )
41+ return results
42+ if len (os .listdir (mdata )) == 0 :
43+ results ['failed' ] = True
44+ results ['msg' ] = "The data directory ({0}) for this fabric is empty!" .format (mdata )
45+ return results
46+
47+ if schema is None :
48+ schema = ""
49+ if rules is None :
50+ rules = ""
51+
52+ validator = iac_validate .validator .Validator (schema , rules )
53+ if schema :
54+ validator .validate_syntax ([mdata ])
55+ if rules :
56+ validator .validate_semantics ([mdata ])
57+
58+ msg = ""
59+ for error in validator .errors :
60+ msg += error + "\n "
61+
62+ if msg :
63+ results ['failed' ] = True
64+ results ['msg' ] = msg
65+
66+ # Return Schema Validated Model Data
67+ results ['data' ] = load_yaml_files ([mdata ])
68+
69+ return results
0 commit comments