fix: output json is more modular for hcl
This commit is contained in:
parent
4ef8636679
commit
e0449f1931
9 changed files with 47 additions and 22 deletions
|
|
@ -126,49 +126,58 @@ class RougailOutputJson:
|
|||
|
||||
def parse_family(
|
||||
self,
|
||||
conf,
|
||||
child,
|
||||
parent,
|
||||
parent_obj,
|
||||
namespace,
|
||||
):
|
||||
for option in conf:
|
||||
if option.isoptiondescription():
|
||||
if option.isleadership():
|
||||
parent = []
|
||||
for child in parent:
|
||||
if child.isoptiondescription():
|
||||
if child.isleadership():
|
||||
child_obj = []
|
||||
self.parse_sequence(
|
||||
option,
|
||||
parent,
|
||||
child,
|
||||
child_obj,
|
||||
)
|
||||
else:
|
||||
if (
|
||||
namespace is None
|
||||
and self.support_namespace
|
||||
and option.group_type() is groups.namespace
|
||||
and child.group_type() is groups.namespace
|
||||
):
|
||||
subnamespace = option.name()
|
||||
subnamespace = child.name()
|
||||
else:
|
||||
subnamespace = namespace
|
||||
parent = {}
|
||||
self.parse_family(option, parent, subnamespace)
|
||||
child[option.name()] = parent
|
||||
child_obj = self.get_default_family(child)
|
||||
self.parse_family(child, child_obj, subnamespace)
|
||||
self.family_informations(parent, parent_obj, child, child_obj)
|
||||
else:
|
||||
child[option.name()] = option.value.get()
|
||||
self.variable_informations(parent_obj, child)
|
||||
|
||||
def parse_sequence(
|
||||
self,
|
||||
conf,
|
||||
parent,
|
||||
child,
|
||||
obj,
|
||||
):
|
||||
leader, *followers = list(conf)
|
||||
leader, *followers = list(child)
|
||||
leader_values = leader.value.get()
|
||||
for idx, leader_value in enumerate(leader_values):
|
||||
leader_dict = {leader.name(): leader_value}
|
||||
parent.append(leader_dict)
|
||||
obj.append(leader_dict)
|
||||
for follower in list(followers):
|
||||
if follower.index() != idx:
|
||||
continue
|
||||
followers.remove(follower)
|
||||
leader_dict[follower.name()] = follower.value.get()
|
||||
|
||||
def get_default_family(self, child):
|
||||
return dict()
|
||||
|
||||
def family_informations(self, parent, parent_obj, child, child_obj):
|
||||
parent_obj[child.name()] = child_obj
|
||||
|
||||
def variable_informations(self, parent_obj, child):
|
||||
parent_obj[child.name()] = child.value.get()
|
||||
|
||||
|
||||
RougailOutput = RougailOutputJson
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"var1": "string1",
|
||||
"var2": "string1"
|
||||
"var2": "string1",
|
||||
"var3": "string1"
|
||||
}
|
||||
|
|
@ -4,5 +4,8 @@
|
|||
},
|
||||
"family2": {
|
||||
"var": "string1"
|
||||
},
|
||||
"family3": {
|
||||
"var": "string1"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"rougail": {
|
||||
"var1": "string1",
|
||||
"var2": "string1"
|
||||
"var2": "string1",
|
||||
"var3": "string1"
|
||||
}
|
||||
}
|
||||
|
|
@ -5,6 +5,9 @@
|
|||
},
|
||||
"family2": {
|
||||
"var": "string1"
|
||||
},
|
||||
"family3": {
|
||||
"var": "string1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"rougail": {
|
||||
"var1": null,
|
||||
"var2": null
|
||||
"var2": null,
|
||||
"var3": null
|
||||
}
|
||||
}
|
||||
|
|
@ -5,6 +5,9 @@
|
|||
},
|
||||
"family2": {
|
||||
"var": null
|
||||
},
|
||||
"family3": {
|
||||
"var": null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"var1": null,
|
||||
"var2": null
|
||||
"var2": null,
|
||||
"var3": null
|
||||
}
|
||||
|
|
@ -4,5 +4,8 @@
|
|||
},
|
||||
"family2": {
|
||||
"var": null
|
||||
},
|
||||
"family3": {
|
||||
"var": null
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue