Rift.IO OSM R1 Initial Submission
[osm/UI.git] / skyquake / plugins / composer / src / schemas / yang / rw.vnffgd-yang.json
1 {
2  "synth": "source",
3  "name": "vnffgd",
4  "schema": {
5   "module": {
6    "vnffgd": {
7     "namespace": "urn:ietf:params:xml:ns:yang:nfvo:vnffgd",
8     "prefix": "vnffgd",
9     "import": {
10      "rw-pb-ext": {
11       "prefix": "rwpb"
12      },
13      "ietf-inet-types": {
14       "prefix": "inet"
15      },
16      "ietf-yang-types": {
17       "prefix": "yang"
18      },
19      "mano-types": {
20       "prefix": "manotypes"
21      }
22     },
23     "revision": {
24      "2014-10-27": {
25       "description": "Initial revision. This YANG file defines\nthe VNF Forwarding Graph Descriptor (VNFFGD)",
26       "reference": "Derived from earlier versions of base YANG files"
27      }
28     },
29     "container": {
30      "vnffgd-catalog": {
31       "list": {
32        "vnffgd": {
33         "key": "id",
34         "leaf": {
35          "name": {
36           "description": "VNF Forwarding Graph Descriptor name.",
37           "type": "string"
38          },
39          "id": {
40           "description": "Identifier for the VNFFGD.",
41           "type": "yang:uuid"
42          },
43          "provider": {
44           "description": "Provider of the VNFFGD.",
45           "type": "string"
46          },
47          "description": {
48           "description": "Description of the VNFFGD.",
49           "type": "string"
50          },
51          "version": {
52           "description": "Version of the VNFFGD",
53           "type": "string"
54          }
55         }
56        }
57       }
58      }
59     }
60    }
61   }
62  },
63  "dependencies": {
64   "rw-pb-ext": {
65    "module": {
66     "rw-pb-ext": {
67      "namespace": "http://riftio.com/ns/riftware-1.0/rw-pb-ext",
68      "prefix": "rwpb",
69      "revision": {
70       "2014-03-28": {
71        "description": "Initial revision.",
72        "reference": "RIFT yang extensions for converting yang files to Google\nProtocol Buffers (protobuf) using rift protoc-c extensions."
73       }
74      },
75      "extension": {
76       "msg-new": {
77        "argument": "typename",
78        "description": "Generate an equivalent, top-level, protobuf message for this\ncontainer, list, rpc input, rpc output, or notification.  The\nargument is the name of the protobuf message type.  Allowed\nvalues are valid C identifiers.\n\nThe protobuf definition will only be generated when processing\nthe same module that defines the yang object - a duplicate will\nnot be generated when importing reusing a yang object via uses,\nor when importing the module."
79       },
80       "msg-name": {
81        "argument": "typename",
82        "description": "Change the name of an embedded protobuf message type for this\ncontainer or list.  Allowed values are valid C identifiers.\n\nIn lieu of this extension, embedded protobuf message typenames\nare based on the fieldname, and further mangled by removing\nunderscores and CamelCased at underscore boundaries.  This\nextension allows the automatic mangling procedure to be\noverridden.\n\nThis extension is incompatible with msg-new, which already\ndefines the typename for top-level messages.  Use this extension\nsolely for embedded messages."
83       },
84       "msg-flat": {
85        "argument": "selection",
86        "description": "Set the protobuf message rw_msgopts flat option on a container\nor list statement.  Allowed values are 'true', 'false', and\n'auto'.  The default is 'false' for top-level messages, and\n'auto' for embedded messages.  If 'auto' is specified, the\nbehavior is the same as the enclosing container or list.\n\nUnless overridden, this extension effectively applies to all\nenclosed descendent container and list statements.  Flatness will\nbe required by the protobuf compilation step."
87       },
88       "msg-tag-base": {
89        "argument": "value",
90        "description": "Specify a base tag value for a container, list, grouping, or\nuses statement.  Field tags may be specified relative to this\nbase.  Allowed values are positive\ndecimal integers."
91       },
92       "msg-proto-max-size": {
93        "argument": "value",
94        "description": "Specify the maximum size of this message in the C structure or\nso in bytes.  Allowed values are positive decimal integers."
95       },
96       "msg-typedef": {
97        "argument": "typename",
98        "description": "Create a prototbuf-c message typedef for the original, base\ndefinition of the container, list, grouping, rpc input, rpc\noutput, or notification.  Allowed values are valid C identifiers.\n\ntypename will be appended to the mangeled protobuf package name\nand an underscore, to ensure name uniqueness across the global\nschema.\n\nThe typedef will only be generated when processing\nthe same module that defines the yang object - a duplicate will\nnot be generated when importing reusing a yang object via uses,\nor when importing the module."
99       },
100       "field-name": {
101        "argument": "fieldname",
102        "description": "Change the name of the element to fieldname, when converting the\nobject to protobuf.  Allowed values are valid C identifiers.\n\nIn lieu of this extension, element names will be used as-is, if\npossible, or mangled to fit in the C identifier character space\n(invalid C identifier characters will be replaced with\nunderscore).  This extension allows the automatic mangling\nprocedure to be overridden."
103       },
104       "field-inline": {
105        "argument": "selection",
106        "description": "Set the protobuf field 'inline' option on a container, list,\nleaf-list, or leaf statement.  Allowed values are 'true',\n'false', and 'auto'.  If 'auto' is specified, the behavior is\ncontrolled by the enclosing container or list's protobuf-msg-flat\nsetting.\n\nWhen applied to a container or list statement, this extension is\ninherited by all enclosed objects, unless overridden."
107       },
108       "field-inline-max": {
109        "argument": "limit",
110        "description": "Set the protobuf field 'inline_max' option for list and\nleaf-list statements.  Allowed values are a positive decimal\ninteger, 'yang', or 'none'.  Example limits:\n\n '64'\n 'yang'\n 'none'\n\nIf 'none' is specified, then the inline_max protobuf extension\nwill not be used.\n\nIf 'yang' is specified, then the number of elements specified in\nthe yang 'max-elements' statement is used.  If there is no\n'max-elements' statement, the behavior defaults to 'none'.\n\nIf a decimal integer is specified, that number is used as the\nmaximum length.\n\nIf this extension is not specified, the behavior defaults to\n'yang'.  Descendant list and leaf-list objects do not inherit\nthis extension."
111       },
112       "field-string-max": {
113        "argument": "limit",
114        "description": "Set the protobuf field 'string_max' option for a leaf or\nleaf-list of type string, binary, leafref, identityref, or\ninstance-identifier.  Allowed values are a positive decimal\ninteger, 'yang', or 'none'.  An optional encoding specifier may\nalso be specified, as octet or utf8, which specifies how\ncharacters are counted.  If specified, the encoding must come\nfirst.  Example limits:\n\n 'octet 64'\n 'utf8 20'\n 'utf8 yang'\n 'utf8'\n '128'\n 'none'\n\nIf 'none' is specified, then the string_max protobuf extension\nwill not be used.  'none' cannot be combined with 'octet' or\n'utf8'.\n\nIf 'yang' is specified, the yang type must be string or binary.\nIf the yang type includes the length statement, then the\nstatements maximum length is used as the length.  Otherwise,\nbehavior defaults to 'none'.\n\nIf a decimal integer is specified, that number is used as the\nlength.\n\nThe encoding specifiers are used to determine the actual number\nof bytes used in the protobuf extension.  If the 'octet'\nspecifier is used, then the maximum length is used literally as\nthe byte length.  If the 'utf8' specified is used, then the\nmaximum length is considered to be in terms of worst-case UTF-8\ncharacters, in which case the protobuf byte length will actually\nbe 4 times the specified length.\n\nFor string and binary types, the default encoding is 'octet'.\nFor the remaining types, the default encoding is 'utf8',\nreflecting those types fundemental description as XML entities\nassumed to be encoded in UTF-8.\n\nIf this extension is not specified, then the default is 'yang'\nfor string and binary, and 'none' for the other types.  This\nextension cannot be specified on aggregate objects, and so it\ncannot be inherited."
115       },
116       "field-tag": {
117        "argument": "value",
118        "description": "Set the protobuf field tag.  Allowed values are a positive\ndecimal integer, 'auto', a base-relative addition expression, or\na field-relative addition expression.\n\nIf a decimal integer is specified, then the tag is set to the\nspecified number.  You should avoid using this form in a\ngrouping, because you may not be able to guarantee uniqueness\nacross all the uses of the group.  However, the syntax will be\nallowed.\n\nA base-relative addition expression allows the tag of a field to\nbe defined in terms of the base tag of an enclosing grouping,\ncontainer, list, or uses statement.  The expression has the form\n'+NUMBER', where NUMBER is the value to add to the base to derive\nthe current field's tag.\n\nA field-relative addition expression allows the tag of one field\nto be defined in terms of another field.  The expression has the\nform 'NAME+NUMBER', where NAME is the name of the other field,\nand NUMBER is the value to add to the other fields tag to derive\nthe current field's tag.\n\nIf this extension is not specified, the default behavior is\n'auto'."
119       },
120       "field-type": {
121        "argument": "type",
122        "description": "Override the default protobuf field type mapping for a leaf or\nleaf-list type, and use the specified protobuf type instead.\n\nAllowed values are any of the Protobuf scalar types, as\nrestricted by the yang leaf type:\n\n+---------------------------+-------------------------------+\n| (pseudo) yang leaf type   | (pseudo) protobuf scalar type |\n|---------------------------+-------------------------------+\n| int8, int16, int32        | int32, sint32, sfixed32, auto |\n+---------------------------+-------------------------------+\n| int64                     | int64, sint64, sfixed64, auto |\n+---------------------------+-------------------------------+\n| uint8, uint16, uint32     | uint32, fixed32, auto         |\n+---------------------------+-------------------------------+\n| uint64                    | uint64, fixed64, auto         |\n+---------------------------+-------------------------------+\n| decimal                   | uint64, sint64, int64,        |\n|                           | fixed64, sfixed64,            |\n|                           | float, double, auto           |\n+---------------------------+-------------------------------+\n| empty, boolean            | bool, auto                    |\n+---------------------------+-------------------------------+\n| string, leafref,          | string, auto                  |\n| identityref,              |                               |\n| instance-identifier,      |                               |\n| anyxml                    |                               |\n+---------------------------+-------------------------------+\n| bits, binary              | bytes, auto                   |\n+---------------------------+-------------------------------+\n\nIf 'auto' is specified, the default conversion will be used.  The\nprotobuf pseudo-type utf8 is equivalent to string, except that\nlength limits will be adjusted in protobuf extentions to allow\nthe string to be composed entirely of the maximum sized UTF-8\nmultibyte characters (byte length is 4 times larger than the\ncharacter length)."
123       },
124       "field-c-type": {
125        "argument": "type",
126        "description": "Override the default protoc-c C-language type mapping for a leaf\nor leaf-list type, and use the specified C type instead."
127       },
128       "package-name": {
129        "argument": "pkgname",
130        "description": "Specifies the name of the package name in the generated .proto\nfile on a module statement The argument is the name of the\npackage-name.  Allowed values are valid C identifiers When\npackage-name is not specified the generated package name defaults\nto the Yang module name"
131       },
132       "application-request-point": {
133        "description": "This extension is used temporarily until the config and data portions\nare split into different namespaces and keyspecs. This allows\napplications to provide data at a keyspec, and request config at a\ndifferent level"
134       },
135       "enum-name": {
136        "argument": "enumname",
137        "description": "Use the specified name for the enum enumerator in the .proto\ninstead of the default mangled name of the yang identifer.\nIf there is a name conflict with other enum name either specified\nexplicitly or generated one, the yangpbc conversion will fail.\nAllowed values are valid C identifiers."
138       },
139       "enum-type": {
140        "argument": "enumtypename",
141        "description": "Use the specified name for the enum type in the .proto instead\nof the default mangled name of the yang identifier.  If there is\na name conflict with another enum type, either auto-generated or\nexplicitly specified one, the yangpbc conversion will fail.\nAllowed values are valid C identifiers."
142       },
143       "file-pbc-include": {
144        "argument": "pathstring",
145        "description": "A module level extension to specify the include files for pb-c.h\nwhen any rift specific c-types are used.  This extension can\noccur multiple times as a child of module statement.  The value\nshould be a valid path string."
146       },
147       "field-merge-behavior": {
148        "argument": "value",
149        "description": "An extension for controlling the merge done for listy types\nduring upacking of protobuf. It can take 3 different value:\n\n1) default: The default is whatever protobuf-c does today\n   (for keyed lists, the default is equivalent to by-keys).\n\n2) by-keys: allowed on keyed lists (and leaf-lists): merge\n   elements with matching key.\n\n3) none: allowed on keyed lists (and leaf-lists): do not\n   attempt to merge elements. This must ONLY be used when it\n   is known or expected that the proto message would contain\n   large number of list items."
150       }
151      }
152     }
153    }
154   },
155   "mano-types": {
156    "module": {
157     "mano-types": {
158      "namespace": "urn:ietf:params:xml:ns:yang:nfvo:mano-types",
159      "prefix": "manotypes",
160      "import": {
161       "ietf-inet-types": {
162        "prefix": "inet"
163       }
164      },
165      "revision": {
166       "2015-04-23": {
167        "description": "Initial revision. This YANG file defines\nthe reusable base types for VNF Management\nand Orchestration (MANO).",
168        "reference": "Derived from earlier versions of base YANG files"
169       }
170      },
171      "typedef": {
172       "virtual-link-type": {
173        "description": "Type of virtual link\nELAN: A multipoint service connecting a set of VNFs\n// ELINE: For a simple point to point connection\n//        between a VNF and the existing network.\n// ETREE: A multipoint service connecting one or\n//        more roots and a set of leaves, but\n//        preventing inter-leaf communication.",
174        "type": {
175         "enumeration": {
176          "enum": "ELAN"
177         }
178        }
179       },
180       "http-method": {
181        "description": "Type of HTTP operation",
182        "type": {
183         "enumeration": {
184          "enum": {
185           "POST": null,
186           "PUT": null,
187           "GET": null,
188           "DELETE": null,
189           "OPTIONS": null,
190           "PATCH": null
191          }
192         }
193        }
194       },
195       "api-type": {
196        "description": "Type of API to fetch monitoring params",
197        "type": {
198         "enumeration": {
199          "enum": {
200           "HTTP": null,
201           "NETCONF": null,
202           "SOAP": null
203          }
204         }
205        }
206       },
207       "json-query-method": {
208        "description": "The method to extract a value from a JSON response\n\nNAMEKEY - Use the name as the key for a non-nested value.\nJSONPATH - Use jsonpath-rw implemenation to extract a value.\nOBJECTPATH - Use objectpath implemenation to extract a value.",
209        "type": {
210         "enumeration": {
211          "enum": {
212           "NAMEKEY": null,
213           "JSONPATH": null,
214           "OBJECTPATH": null
215          }
216         }
217        }
218       },
219       "param-value-type": {
220        "description": "The type of the parameter value",
221        "type": {
222         "enumeration": {
223          "enum": {
224           "INT": null,
225           "DECIMAL": null,
226           "STRING": null
227          }
228         }
229        }
230       },
231       "connection-point-type": {
232        "description": "Type of connection point\nVPORT: Virtual Port\n// VNIC_ADDR: Virtual NIC Address\n// PNIC_ADDR: Physical NIC Address\n// PPORT: Phsical Port.",
233        "type": {
234         "enumeration": {
235          "enum": "VPORT"
236         }
237        }
238       },
239       "widget-type": {
240        "description": "Type of the widget, typically used by the UI.",
241        "type": {
242         "enumeration": {
243          "enum": {
244           "HISTOGRAM": null,
245           "BAR": null,
246           "GAUGE": null,
247           "SLIDER": null,
248           "COUNTER": null,
249           "TEXTBOX": null
250          }
251         }
252        }
253       },
254       "cpu-feature-type": {
255        "description": "Enumeration for CPU features.\n\nAES: CPU supports advanced instruction set for\nAES (Advanced Encryption Standard).\n\nCAT: Cache Allocation Technology (CAT) allows\nan Operating System, Hypervisor, or similar\nsystem management agent to specify the amount\nof L3 cache (currently the last-level cache\nin most server and client platforms) space an\napplication can fill (as a hint to hardware\nfunctionality, certain features such as power\nmanagement may override CAT settings).\n\nCMT: Cache Monitoring Technology (CMT) allows\nan Operating System, Hypervisor, or similar\nsystem management agent to determine the\nusage of cache based on applications running\non the platform. The implementation is\ndirected at L3 cache monitoring (currently\nthe last-level cache in most server and\nclient platforms).\n\nDDIO: Intel Data Direct I/O (DDIO) enables\nEthernet server NICs and controllers talk\ndirectly to the processor cache without a\ndetour via system memory. This enumeration\nspecifies if the VM requires a DDIO\ncapable host.",
256        "type": {
257         "enumeration": {
258          "enum": {
259           "PREFER_AES": null,
260           "REQUIRE_AES": null,
261           "PREFER_CAT": null,
262           "REQUIRE_CAT": null,
263           "PREFER_CMT": null,
264           "REQUIRE_CMT": null,
265           "PREFER_DDIO": null,
266           "REQUIRE_DDIO": null
267          }
268         }
269        }
270       }
271      },
272      "grouping": {
273       "named-value": {
274        "leaf": {
275         "name": {
276          "type": "string"
277         },
278         "value": {
279          "type": "string"
280         }
281        }
282       },
283       "vm-flavor": {
284        "container": {
285         "vm-flavor": {
286          "leaf": {
287           "vcpu-count": {
288            "description": "Number of vcpus for the VM.",
289            "type": "uint16"
290           },
291           "memory-mb": {
292            "description": "Amount of memory in MB.",
293            "type": "uint64"
294           },
295           "storage-gb": {
296            "description": "Amount of disk space in GB.",
297            "type": "uint64"
298           }
299          }
300         }
301        }
302       },
303       "vswitch-epa": {
304        "container": {
305         "vswitch-epa": {
306          "leaf": {
307           "ovs-acceleration": {
308            "description": "Specifies Open vSwitch acceleration mode.\nMANDATORY: OVS acceleration is required\nPREFERRED: OVS acceleration is preferred",
309            "type": {
310             "enumeration": {
311              "enum": {
312               "MANDATORY": null,
313               "PREFERRED": null,
314               "DISABLED": null
315              }
316             }
317            }
318           },
319           "ovs-offload": {
320            "description": "Specifies Open vSwitch hardware offload mode.\nMANDATORY: OVS offload is required\nPREFERRED: OVS offload is preferred",
321            "type": {
322             "enumeration": {
323              "enum": {
324               "MANDATORY": null,
325               "PREFERRED": null,
326               "DISABLED": null
327              }
328             }
329            }
330           }
331          }
332         }
333        }
334       },
335       "hypervisor-epa": {
336        "container": {
337         "hypervisor-epa": {
338          "leaf": {
339           "type": {
340            "description": "Specifies the type of hypervisor.\nKVM: KVM\nXEN: XEN",
341            "type": {
342             "enumeration": {
343              "enum": {
344               "PREFER_KVM": null,
345               "REQUIRE_KVM": null
346              }
347             }
348            }
349           },
350           "version": {
351            "type": "string"
352           }
353          }
354         }
355        }
356       },
357       "host-epa": {
358        "container": {
359         "host-epa": {
360          "description": "Specifies the host level EPA attributes.",
361          "leaf": {
362           "cpu-model": {
363            "description": "Host CPU model. Examples include: SandyBridge,\nIvyBridge",
364            "type": {
365             "enumeration": {
366              "enum": {
367               "PREFER_WESTMERE": null,
368               "REQUIRE_WESTMERE": null,
369               "PREFER_SANDYBRIDGE": null,
370               "REQUIRE_SANDYBRIDGE": null,
371               "PREFER_IVYBRIDGE": null,
372               "REQUIRE_IVYBRIDGE": null,
373               "PREFER_HASWELL": null,
374               "REQUIRE_HASWELL": null,
375               "PREFER_BROADWELL": null,
376               "REQUIRE_BROADWELL": null,
377               "PREFER_NEHALEM": null,
378               "REQUIRE_NEHALEM": null,
379               "PREFER_PENRYN": null,
380               "REQUIRE_PENRYN": null,
381               "PREFER_CONROE": null,
382               "REQUIRE_CONROE": null,
383               "PREFER_CORE2DUO": null,
384               "REQUIRE_CORE2DUO": null
385              }
386             }
387            }
388           },
389           "cpu-arch": {
390            "description": "Host CPU architecture.",
391            "type": {
392             "enumeration": {
393              "enum": {
394               "PREFER_X86": null,
395               "REQUIRE_X86": null,
396               "PREFER_X86_64": null,
397               "REQUIRE_X86_64": null,
398               "PREFER_I686": null,
399               "REQUIRE_I686": null,
400               "PREFER_IA64": null,
401               "REQUIRE_IA64": null,
402               "PREFER_ARMV7": null,
403               "REQUIRE_ARMV7": null,
404               "PREFER_ARMV8": null,
405               "REQUIRE_ARMV8": null
406              }
407             }
408            }
409           },
410           "cpu-vendor": {
411            "description": "Host CPU Vendor.",
412            "type": {
413             "enumeration": {
414              "enum": {
415               "PREFER_INTEL": null,
416               "REQUIRE_INTEL": null,
417               "PREFER_AMD": null,
418               "REQUIRE_AMD": null
419              }
420             }
421            }
422           },
423           "cpu-socket-count": {
424            "description": "Number of sockets on the host.",
425            "type": {
426             "enumeration": {
427              "enum": {
428               "PREFER_ONE": null,
429               "PREFER_TWO": null,
430               "REQUIRE_ONE": null,
431               "REQUIRE_TWO": null
432              }
433             }
434            }
435           },
436           "cpu-core-count": {
437            "description": "Number of cores on the host.",
438            "type": "uint64"
439           },
440           "om-cpu-model-string": {
441            "description": "Openmano CPU model string",
442            "type": "string"
443           }
444          },
445          "leaf-list": {
446           "cpu-feature": {
447            "description": "List of CPU features.",
448            "type": "manotypes:cpu-feature-type"
449           },
450           "om-cpu-feature": {
451            "description": "Openmano CPU features",
452            "type": "string"
453           }
454          }
455         }
456        }
457       },
458       "guest-epa": {
459        "description": "EPA attributes for the guest",
460        "container": {
461         "guest-epa": {
462          "leaf": {
463           "trusted-execution": {
464            "description": "This VM should be allocated from trusted pool",
465            "type": "boolean"
466           },
467           "mempage-size": {
468            "description": "Memory page allocation size. If a VM requires\nhugepages, it should choose LARGE or SIZE_2MB\nor SIZE_1GB. If the VM prefers hugepages it\nshould chose PREFER_LARGE.\nLARGE        : Require hugepages (either 2MB or 1GB)\nSMALL        : Doesn't require hugepages\nSIZE_2MB     : Requires 2MB hugepages\nSIZE_1GB     : Requires 1GB hugepages\nPREFER_LARGE : Application perfers hugepages",
469            "type": {
470             "enumeration": {
471              "enum": {
472               "LARGE": null,
473               "SMALL": null,
474               "SIZE_2MB": null,
475               "SIZE_1GB": null,
476               "PREFER_LARGE": null
477              }
478             }
479            }
480           },
481           "cpu-pinning-policy": {
482            "description": "CPU pinning policy describes association\nbetween virtual CPUs in guest and the\nphysical CPUs in the host.\nDEDICATED : Virtual CPUs are pinned to\n            physical CPUs\nSHARED    : Multiple VMs may share the\n            same physical CPUs.\nANY       : Any policy is acceptable for the VM",
483            "type": {
484             "enumeration": {
485              "enum": {
486               "DEDICATED": null,
487               "SHARED": null,
488               "ANY": null
489              }
490             }
491            },
492            "default": "ANY"
493           },
494           "cpu-thread-pinning-policy": {
495            "description": "CPU thread pinning policy describes how to\nplace the guest CPUs when the host supports\nhyper threads:\nAVOID   : Avoids placing a guest on a host\n          with threads.\nSEPARATE: Places vCPUs on separate cores,\n          and avoids placing two vCPUs on\n          two threads of same core.\nISOLATE : Places each vCPU on a different core,\n          and places no vCPUs from a different\n          guest on the same core.\nPREFER  : Attempts to place vCPUs on threads\n          of the same core.",
496            "type": {
497             "enumeration": {
498              "enum": {
499               "AVOID": null,
500               "SEPARATE": null,
501               "ISOLATE": null,
502               "PREFER": null
503              }
504             }
505            }
506           }
507          },
508          "list": {
509           "pcie-device": {
510            "description": "List of pcie passthrough devices.",
511            "key": "device-id",
512            "leaf": {
513             "device-id": {
514              "description": "Device identifier.",
515              "type": "string"
516             },
517             "count": {
518              "description": "Number of devices to attach to the VM.",
519              "type": "uint64"
520             }
521            }
522           }
523          },
524          "choice": {
525           "numa-policy": {
526            "case": {
527             "numa-unware": {
528              "leaf": {
529               "numa-unware": {
530                "type": "empty"
531               }
532              }
533             },
534             "numa-aware": {
535              "container": {
536               "numa-node-policy": {
537                "description": "This policy defines numa topology of the\nguest. Specifically identifies if the guest\nshould be run on a host with one numa\nnode or multiple numa nodes. As an example\na guest may want 8 vcpus and 4 GB of\nmemory. But may want the vcpus and memory\ndistributed across multiple numa nodes.\nThe NUMA node 1 may run with 6 vcpus and\n3GB, and NUMA node 2 may run with 2 vcpus\nand 1GB.",
538                "leaf": {
539                 "node-cnt": {
540                  "description": "The number of numa nodes to expose to the VM.",
541                  "type": "uint16"
542                 },
543                 "mem-policy": {
544                  "description": "This policy specifies how the memory should\nbe allocated in a multi-node scenario.\nSTRICT    : The memory must be allocated\n            strictly from the memory attached\n            to the NUMA node.\nPREFERRED : The memory should be allocated\n            perferentially from the memory\n            attached to the NUMA node",
545                  "type": {
546                   "enumeration": {
547                    "enum": {
548                     "STRICT": null,
549                     "PREFERRED": null
550                    }
551                   }
552                  }
553                 }
554                },
555                "list": {
556                 "node": {
557                  "key": "id",
558                  "leaf": {
559                   "id": {
560                    "description": "NUMA node identification. Typically\nit's 0 or 1",
561                    "type": "uint64"
562                   },
563                   "memory-mb": {
564                    "description": "Memory size expressed in MB\nfor this NUMA node.",
565                    "type": "uint64"
566                   }
567                  },
568                  "leaf-list": {
569                   "vcpu": {
570                    "description": "List of vcpus to allocate on\nthis numa node.",
571                    "type": "uint64"
572                   }
573                  },
574                  "choice": {
575                   "om-numa-type": {
576                    "description": "Openmano Numa type selection",
577                    "case": {
578                     "cores": {
579                      "leaf": {
580                       "num-cores": {
581                        "type": "uint8"
582                       }
583                      }
584                     },
585                     "paired-threads": {
586                      "container": {
587                       "paired-threads": {
588                        "leaf": {
589                         "num-paired-threads": {
590                          "type": "uint8"
591                         }
592                        },
593                        "list": {
594                         "paired-thread-ids": {
595                          "description": "List of thread pairs to use in case of paired-thread numa",
596                          "max-elements": "16",
597                          "key": "thread-a",
598                          "leaf": {
599                           "thread-a": {
600                            "type": "uint8"
601                           },
602                           "thread-b": {
603                            "type": "uint8"
604                           }
605                          }
606                         }
607                        }
608                       }
609                      }
610                     },
611                     "threads": {
612                      "leaf": {
613                       "num-threads": {
614                        "type": "uint8"
615                       }
616                      }
617                     }
618                    }
619                   }
620                  }
621                 }
622                }
623               }
624              }
625             }
626            }
627           }
628          }
629         }
630        }
631       },
632       "provider-network": {
633        "container": {
634         "provider-network": {
635          "description": "Container for the provider network.",
636          "leaf": {
637           "physical-network": {
638            "description": "Name of the phsyical network on which the provider\nnetwork is built.",
639            "type": "string"
640           },
641           "overlay-type": {
642            "description": "Type of the overlay network.",
643            "type": {
644             "enumeration": {
645              "enum": {
646               "LOCAL": null,
647               "FLAT": null,
648               "VLAN": null,
649               "VXLAN": null,
650               "GRE": null
651              }
652             }
653            }
654           },
655           "segmentation_id": {
656            "description": "Segmentation ID",
657            "type": "uint32"
658           }
659          }
660         }
661        }
662       },
663       "monitoring-param": {
664        "list": {
665         "http-endpoint": {
666          "description": "List of http endpoints to be used by monitoring params",
667          "key": "path",
668          "leaf": {
669           "path": {
670            "description": "The HTTP path on the management server",
671            "type": "string"
672           },
673           "https": {
674            "description": "Pick HTTPS instead of HTTP , Default is false",
675            "type": "boolean",
676            "default": "false"
677           },
678           "port": {
679            "description": "The HTTP port to connect to",
680            "type": "inet:port-number"
681           },
682           "username": {
683            "description": "The HTTP basic auth username",
684            "type": "string"
685           },
686           "password": {
687            "description": "The HTTP basic auth password",
688            "type": "string"
689           },
690           "polling_interval_secs": {
691            "description": "The HTTP polling interval in seconds",
692            "type": "uint8",
693            "default": "2"
694           },
695           "method": {
696            "description": "This is the method to be performed at the uri.\nGET by default for action",
697            "type": "manotypes:http-method",
698            "default": "GET"
699           }
700          },
701          "list": {
702           "headers": {
703            "description": "Custom HTTP headers to put on HTTP request",
704            "key": "key",
705            "leaf": {
706             "key": {
707              "description": "HTTP header key",
708              "type": "string"
709             },
710             "value": {
711              "description": "HTTP header value",
712              "type": "string"
713             }
714            }
715           }
716          }
717         },
718         "monitoring-param": {
719          "description": "List of monitoring parameters at the NS level",
720          "key": "id",
721          "leaf": {
722           "id": {
723            "type": "string"
724           },
725           "name": {
726            "type": "string"
727           },
728           "http-endpoint-ref": {
729            "type": {
730             "leafref": {
731              "path": "../../http-endpoint/path"
732             }
733            }
734           },
735           "json-query-method": {
736            "type": "manotypes:json-query-method",
737            "default": "NAMEKEY"
738           },
739           "description": {
740            "type": "string"
741           },
742           "group-tag": {
743            "description": "A simple tag to group monitoring parameters",
744            "type": "string"
745           },
746           "value-type": {
747            "type": "manotypes:param-value-type",
748            "default": "INT"
749           },
750           "value-integer": {
751            "description": "Current value for an integer parameter",
752            "type": "int64"
753           },
754           "value-decimal": {
755            "description": "Current value for a decimal parameter",
756            "type": {
757             "decimal64": {
758              "fraction-digits": "4"
759             }
760            }
761           },
762           "value-string": {
763            "description": "Current value for a string parameter",
764            "type": "string"
765           },
766           "widget-type": {
767            "type": "manotypes:widget-type"
768           },
769           "units": {
770            "type": "string"
771           }
772          },
773          "container": {
774           "json-query-params": {
775            "leaf": {
776             "json-path": {
777              "description": "The jsonpath to use to extract value from JSON structure",
778              "type": "string"
779             },
780             "object-path": {
781              "description": "The objectpath to use to extract value from JSON structure",
782              "type": "string"
783             }
784            }
785           },
786           "numeric-constraints": {
787            "leaf": {
788             "min-value": {
789              "description": "Minimum value for the parameter",
790              "type": "uint64"
791             },
792             "max-value": {
793              "description": "Maxium value for the parameter",
794              "type": "uint64"
795             }
796            }
797           },
798           "text-constraints": {
799            "leaf": {
800             "min-length": {
801              "description": "Minimum string length for the parameter",
802              "type": "uint8"
803             },
804             "max-length": {
805              "description": "Maximum string length for the parameter",
806              "type": "uint8"
807             }
808            }
809           }
810          }
811         }
812        }
813       },
814       "control-param": {
815        "list": {
816         "control-param": {
817          "description": "List of control parameters to manage and\nupdate the running configuration of the VNF",
818          "key": "id",
819          "leaf": {
820           "id": {
821            "type": "string"
822           },
823           "name": {
824            "type": "string"
825           },
826           "description": {
827            "type": "string"
828           },
829           "group-tag": {
830            "description": "A simple tag to group control parameters",
831            "type": "string"
832           },
833           "min-value": {
834            "description": "Minimum value for the parameter",
835            "type": "uint64"
836           },
837           "max-value": {
838            "description": "Maxium value for the parameter",
839            "type": "uint64"
840           },
841           "current-value": {
842            "description": "Current value for the parameter",
843            "type": "uint64"
844           },
845           "step-value": {
846            "description": "Step value for the parameter",
847            "type": "uint64"
848           },
849           "units": {
850            "type": "string"
851           },
852           "widget-type": {
853            "type": "manotypes:widget-type"
854           },
855           "url": {
856            "description": "This is the URL where to perform the operation",
857            "type": "inet:uri"
858           },
859           "method": {
860            "description": "This is the method to be performed at the uri.\nPOST by default for action",
861            "type": "manotypes:http-method",
862            "default": "POST"
863           },
864           "payload": {
865            "description": "This is the operation payload or payload template as stringified\nJSON. This field provides the data  to be sent for this operation\ncall",
866            "type": "string"
867           }
868          }
869         }
870        }
871       },
872       "action-param": {
873        "list": {
874         "action-param": {
875          "description": "List of action parameters to\ncontrol VNF",
876          "key": "id",
877          "leaf": {
878           "id": {
879            "type": "string"
880           },
881           "name": {
882            "type": "string"
883           },
884           "description": {
885            "type": "string"
886           },
887           "group-tag": {
888            "description": "A simple tag to group monitoring parameter",
889            "type": "string"
890           },
891           "url": {
892            "description": "This is the URL where to perform the operation",
893            "type": "inet:uri"
894           },
895           "method": {
896            "description": "This is the method to be performed at the uri.\nPOST by default for action",
897            "type": "manotypes:http-method",
898            "default": "POST"
899           },
900           "payload": {
901            "description": "This is the operation payload or payload template to be sent in\nthe data for this operation call",
902            "type": "string"
903           }
904          }
905         }
906        }
907       },
908       "input-parameter": {
909        "description": "",
910        "list": {
911         "input-parameter": {
912          "description": "List of input parameters",
913          "key": "xpath",
914          "leaf": {
915           "xpath": {
916            "description": "A an xpath that specfies which element in a descriptor is to be\nmodified.",
917            "type": "string"
918           },
919           "value": {
920            "description": "The value that the element specified by the xpath should take when a\nrecord is created.",
921            "type": "string"
922           }
923          }
924         }
925        }
926       },
927       "input-parameter-xpath": {
928        "list": {
929         "input-parameter-xpath": {
930          "description": "List of xpaths to parameters inside the NSD\nthe can be customized during the instantiation.",
931          "key": "xpath",
932          "leaf": {
933           "xpath": {
934            "description": "An xpath that specifies the element in a descriptor.",
935            "type": "string"
936           },
937           "label": {
938            "description": "A descriptive string",
939            "type": "string"
940           }
941          }
942         }
943        }
944       },
945       "nfvi-metrics": {
946        "container": {
947         "vcpu": {
948          "leaf": {
949           "label": {
950            "description": "Label to show in UI",
951            "type": "string",
952            "default": "VCPU"
953           },
954           "total": {
955            "description": "The total number of VCPUs available.",
956            "type": "uint64"
957           },
958           "utilization": {
959            "description": "The VCPU utilization (percentage).",
960            "type": {
961             "decimal64": {
962              "fraction-digits": "2",
963              "range": "0 .. 100"
964             }
965            }
966           }
967          }
968         },
969         "memory": {
970          "leaf": {
971           "label": {
972            "description": "Label to show in UI",
973            "type": "string",
974            "default": "MEMORY"
975           },
976           "used": {
977            "description": "The amount of memory (bytes) currently in use.",
978            "type": "uint64"
979           },
980           "total": {
981            "description": "The amount of memory (bytes) available.",
982            "type": "uint64"
983           },
984           "utilization": {
985            "description": "The memory utilization (percentage).",
986            "type": {
987             "decimal64": {
988              "fraction-digits": "2",
989              "range": "0 .. 100"
990             }
991            }
992           }
993          }
994         },
995         "storage": {
996          "leaf": {
997           "label": {
998            "description": "Label to show in UI",
999            "type": "string",
1000            "default": "STORAGE"
1001           },
1002           "used": {
1003            "description": "The amount of storage (bytes) currently in use.",
1004            "type": "uint64"
1005           },
1006           "total": {
1007            "description": "The amount of storage (bytes) available.",
1008            "type": "uint64"
1009           },
1010           "utilization": {
1011            "description": "The storage utilization (percentage).",
1012            "type": {
1013             "decimal64": {
1014              "fraction-digits": "2",
1015              "range": "0 .. 100"
1016             }
1017            }
1018           }
1019          }
1020         },
1021         "external-ports": {
1022          "leaf": {
1023           "label": {
1024            "description": "Label to show in UI",
1025            "type": "string",
1026            "default": "EXTERNAL PORTS"
1027           },
1028           "total": {
1029            "description": "The total number of external ports.",
1030            "type": "uint64"
1031           }
1032          }
1033         },
1034         "internal-ports": {
1035          "leaf": {
1036           "label": {
1037            "description": "Label to show in UI",
1038            "type": "string",
1039            "default": "INTERNAL PORTS"
1040           },
1041           "total": {
1042            "description": "The total number of internal ports.",
1043            "type": "uint64"
1044           }
1045          }
1046         },
1047         "network": {
1048          "leaf": {
1049           "label": {
1050            "description": "Label to show in UI",
1051            "type": "string",
1052            "default": "NETWORK TRAFFIC"
1053           }
1054          },
1055          "container": {
1056           "incoming": {
1057            "leaf": {
1058             "label": {
1059              "description": "Label to show in UI",
1060              "type": "string",
1061              "default": "INCOMING NETWORK TRAFFIC"
1062             },
1063             "bytes": {
1064              "description": "The cumulative number of incoming bytes.",
1065              "type": "uint64"
1066             },
1067             "packets": {
1068              "description": "The cumulative number of incoming packets.",
1069              "type": "uint64"
1070             },
1071             "byte-rate": {
1072              "description": "The current incoming byte-rate (bytes per second).",
1073              "type": {
1074               "decimal64": {
1075                "fraction-digits": "2"
1076               }
1077              }
1078             },
1079             "packet-rate": {
1080              "description": "The current incoming packet (packets per second).",
1081              "type": {
1082               "decimal64": {
1083                "fraction-digits": "2"
1084               }
1085              }
1086             }
1087            }
1088           },
1089           "outgoing": {
1090            "leaf": {
1091             "label": {
1092              "description": "Label to show in UI",
1093              "type": "string",
1094              "default": "OUTGOING NETWORK TRAFFIC"
1095             },
1096             "bytes": {
1097              "description": "The cumulative number of outgoing bytes.",
1098              "type": "uint64"
1099             },
1100             "packets": {
1101              "description": "The cumulative number of outgoing packets.",
1102              "type": "uint64"
1103             },
1104             "byte-rate": {
1105              "description": "The current outgoing byte-rate (bytes per second).",
1106              "type": {
1107               "decimal64": {
1108                "fraction-digits": "2"
1109               }
1110              }
1111             },
1112             "packet-rate": {
1113              "description": "The current outgoing packet (packets per second).",
1114              "type": {
1115               "decimal64": {
1116                "fraction-digits": "2"
1117               }
1118              }
1119             }
1120            }
1121           }
1122          }
1123         }
1124        }
1125       }
1126      }
1127     }
1128    }
1129   }
1130  },
1131  "extension": {
1132   "module": {
1133    "argument": "name",
1134    "include": "0..n",
1135    "prefix": "0..1",
1136    "anyxml": "0..n",
1137    "augment": "0..n",
1138    "choice": "0..n",
1139    "contact": "0..1",
1140    "container": "0..n",
1141    "description": "0..1",
1142    "deviation": "0..n",
1143    "extension": "0..n",
1144    "feature": "0..n",
1145    "grouping": "0..n",
1146    "identity": "0..n",
1147    "import": "0..n",
1148    "leaf": "0..n",
1149    "leaf-list": "0..n",
1150    "list": "0..n",
1151    "namespace": "0..1",
1152    "notification": "0..n",
1153    "organization": "0..1",
1154    "reference": "0..1",
1155    "revision": "0..n",
1156    "rpc": "0..n",
1157    "typedef": "0..n",
1158    "uses": "0..n",
1159    "yang-version": "0..1",
1160    "preprocess": {
1161     "!js/function": "function (arg, params, ctx) {\n  var changes, match, ref, synth, target;\n  synth = this.require('data-synth');\n  ref = params.augment;\n  for (target in ref) {\n    changes = ref[target];\n    match = this.locate(ctx, target);\n    if (match == null) {\n      continue;\n    }\n    synth.copy(match, changes);\n  }\n  return delete this.source[params.prefix];\n}"
1162    },
1163    "construct": {
1164     "!js/function": "function (arg, params, children) {\n  var k, m, modules, ref, synth, v;\n  synth = this.require('data-synth');\n  modules = {};\n  ref = params[\"import\"];\n  for (k in ref) {\n    v = ref[k];\n    modules[k] = children[k];\n    delete children[k];\n  }\n  m = (synth.Store(params, function() {\n    return this.set({\n      name: arg,\n      modules: modules\n    });\n  })).bind(children);\n  this.define('module', arg, m);\n  return m;\n}"
1165    }
1166   },
1167   "prefix": {
1168    "argument": "value",
1169    "preprocess": {
1170     "!js/function": "function (arg, params, ctx) {\n  return this.source[arg] = this.source;\n}"
1171    }
1172   },
1173   "include": {
1174    "argument": "module",
1175    "preprocess": {
1176     "!js/function": "function (arg, params, ctx) {\n  var k, m, ref, ref1, ref2, results, v;\n  m = this.preprocess(this.resolve('dependencies', arg));\n  ref = m.extension;\n  for (k in ref) {\n    v = ref[k];\n    this.define('extension', k, v);\n  }\n  ref1 = m.typedef;\n  for (k in ref1) {\n    v = ref1[k];\n    this.define('typedef', k, v);\n  }\n  ref2 = m.schema;\n  results = [];\n  for (k in ref2) {\n    v = ref2[k];\n    results.push(ctx[k] = v);\n  }\n  return results;\n}"
1177    },
1178    "revision-date": "0..1"
1179   },
1180   "augment": {
1181    "anyxml": "0..n",
1182    "case": "0..n",
1183    "choice": "0..n",
1184    "container": "0..n",
1185    "description": "0..1",
1186    "if-feature": "0..n",
1187    "leaf": "0..n",
1188    "leaf-list": "0..n",
1189    "list": "0..n",
1190    "reference": "0..1",
1191    "status": "0..1",
1192    "uses": "0..n",
1193    "when": "0..1",
1194    "argument": "target-node"
1195   },
1196   "belongs-to": {
1197    "prefix": 1,
1198    "preprocess": {
1199     "!js/function": "function (arg, params, ctx) {\n  return this.source[params.prefix] = this.source;\n}"
1200    },
1201    "argument": "module"
1202   },
1203   "bit": {
1204    "description": "0..1",
1205    "reference": "0..1",
1206    "status": "0..1",
1207    "position": "0..1",
1208    "argument": "name"
1209   },
1210   "case": {
1211    "anyxml": "0..n",
1212    "choice": "0..n",
1213    "container": "0..n",
1214    "description": "0..1",
1215    "if-feature": "0..n",
1216    "leaf": "0..n",
1217    "leaf-list": "0..n",
1218    "list": "0..n",
1219    "reference": "0..1",
1220    "status": "0..1",
1221    "uses": "0..n",
1222    "when": "0..1",
1223    "argument": "name"
1224   },
1225   "choice": {
1226    "anyxml": "0..n",
1227    "case": "0..n",
1228    "config": "0..1",
1229    "container": "0..n",
1230    "default": "0..1",
1231    "description": "0..1",
1232    "if-feature": "0..n",
1233    "leaf": "0..n",
1234    "leaf-list": "0..n",
1235    "list": "0..n",
1236    "mandatory": "0..1",
1237    "reference": "0..1",
1238    "status": "0..1",
1239    "when": "0..1",
1240    "argument": "condition"
1241   },
1242   "config": {
1243    "preprocess": {
1244     "!js/function": "function (arg, p, ctx) {\n  return ctx.config = arg === true || arg === 'true';\n}"
1245    },
1246    "argument": "value"
1247   },
1248   "container": {
1249    "anyxml": "0..n",
1250    "choice": "0..n",
1251    "config": "0..1",
1252    "container": "0..n",
1253    "description": "0..1",
1254    "grouping": "0..n",
1255    "if-feature": "0..n",
1256    "leaf": "0..n",
1257    "leaf-list": "0..n",
1258    "list": "0..n",
1259    "must": "0..n",
1260    "presence": "0..1",
1261    "reference": "0..1",
1262    "status": "0..1",
1263    "typedef": "0..n",
1264    "uses": "0..n",
1265    "when": "0..1",
1266    "construct": {
1267     "!js/function": "function (arg, params, children) {\n  var synth;\n  synth = this.require('data-synth');\n  return (synth.Object(params)).bind(children);\n}"
1268    },
1269    "argument": "name"
1270   },
1271   "deviate": {
1272    "config": "0..1",
1273    "default": "0..1",
1274    "mandatory": "0..1",
1275    "max-elements": "0..1",
1276    "min-elements": "0..1",
1277    "must": "0..n",
1278    "type": "0..1",
1279    "unique": "0..1",
1280    "units": "0..1",
1281    "argument": "value"
1282   },
1283   "deviation": {
1284    "description": "0..1",
1285    "deviate": "1..n",
1286    "reference": "0..1",
1287    "argument": "target-node"
1288   },
1289   "enum": {
1290    "description": "0..1",
1291    "reference": "0..1",
1292    "status": "0..1",
1293    "value": "0..1",
1294    "preprocess": {
1295     "!js/function": "function (arg, params, ctx) {\n  if (params.value == null) {\n    if (this.enumValue == null) {\n      this.enumValue = 0;\n    }\n    params.value = this.enumValue++;\n  } else {\n    params.value = Number(params.value);\n    this.enumValue = params.value + 1;\n  }\n  return ctx[\"enum\"][arg] = params;\n}"
1296    },
1297    "argument": "name"
1298   },
1299   "feature": {
1300    "description": "0..1",
1301    "if-feature": "0..n",
1302    "reference": "0..1",
1303    "status": "0..1",
1304    "preprocess": {
1305     "!js/function": "function (arg, params, ctx) {\n  if (params.status === 'unavailable') {\n    console.warn(\"feature \" + arg + \" is unavailable\");\n    if (typeof ctx.feature === 'object') {\n      return delete ctx.feature[arg];\n    } else {\n      return delete ctx.feature;\n    }\n  }\n}"
1306    },
1307    "construct": {
1308     "!js/function": "function (arg, params, children) {\n  var feature;\n  feature = this.resolve('feature', arg);\n  return null;\n}"
1309    },
1310    "argument": "name"
1311   },
1312   "grouping": {
1313    "anyxml": "0..n",
1314    "choice": "0..n",
1315    "container": "0..n",
1316    "description": "0..1",
1317    "grouping": "0..n",
1318    "leaf": "0..n",
1319    "leaf-list": "0..n",
1320    "list": "0..n",
1321    "reference": "0..1",
1322    "status": "0..1",
1323    "typedef": "0..n",
1324    "uses": "0..n",
1325    "preprocess": {
1326     "!js/function": "function (arg, params) {\n  return this.define('grouping', arg, params);\n}"
1327    },
1328    "argument": "name"
1329   },
1330   "identity": {
1331    "base": "0..1",
1332    "description": "0..1",
1333    "reference": "0..1",
1334    "status": "0..1",
1335    "preprocess": {
1336     "!js/function": "function (arg, params) {\n  return this.define('identity', arg, params);\n}"
1337    },
1338    "argument": "name"
1339   },
1340   "if-feature": {
1341    "preprocess": {
1342     "!js/function": "function (arg, params, ctx) {\n  if ((this.resolve('feature', arg)) == null) {\n    return ctx.status = 'unavailable';\n  }\n}"
1343    },
1344    "argument": "name"
1345   },
1346   "import": {
1347    "prefix": 1,
1348    "revision-date": "0..1",
1349    "preprocess": {
1350     "!js/function": "function (arg, params, ctx) {\n  var copy, k, m, original, ref, ref1, rev, schema, source, synth, v;\n  synth = this.require('data-synth');\n  schema = this.resolve('dependencies', arg, false);\n  if (schema == null) {\n    console.warn(\"no explicit dependency for \" + arg + \" defined, searching local filesystem\");\n    schema = this.parse(\"!yang \" + arg + \".yang\", this.source);\n    if (schema != null) {\n      this.define('dependencies', arg, schema);\n      source = this.source.parent;\n      while ((source.parent != null) && source.parent.name !== 'yangforge') {\n        source = source.parent;\n      }\n      if (source.dependencies == null) {\n        source.dependencies = {};\n      }\n      source.dependencies[arg] = schema;\n    }\n  }\n  m = this.preprocess(schema);\n  if (m == null) {\n    throw this.error(\"unable to resolve '\" + arg + \"' in dependencies\", 'import');\n  }\n  rev = params['revision-date'];\n  if ((rev != null) && !(rev in m.revision)) {\n    throw this.error(\"requested \" + rev + \" not available in \" + arg, 'import');\n  }\n  ref = m.extension;\n  for (k in ref) {\n    v = ref[k];\n    if (!(v.override === true)) {\n      continue;\n    }\n    original = this.resolve('extension', k);\n    copy = synth.copy({}, v);\n    copy.origin = synth.copy({}, (ref1 = original.origin) != null ? ref1 : original);\n    delete copy.override;\n    this.define('extension', k, copy);\n  }\n  return this.source[params.prefix] = m;\n}"
1351    },
1352    "construct": {
1353     "!js/function": "function (arg, params, children, ctx) {\n  return this.compile(this.source[params.prefix], this.source);\n}"
1354    },
1355    "argument": "module"
1356   },
1357   "input": {
1358    "anyxml": "0..n",
1359    "choice": "0..n",
1360    "container": "0..n",
1361    "grouping": "0..n",
1362    "leaf": "0..n",
1363    "leaf-list": "0..n",
1364    "list": "0..n",
1365    "typedef": "0..n",
1366    "uses": "0..n",
1367    "construct": {
1368     "!js/function": "function (arg, params, children) {\n  var synth;\n  synth = this.require('data-synth');\n  return (synth.Object(params)).bind(children);\n}"
1369    }
1370   },
1371   "leaf": {
1372    "config": "0..1",
1373    "default": "0..1",
1374    "description": "0..1",
1375    "if-feature": "0..n",
1376    "mandatory": "0..1",
1377    "must": "0..n",
1378    "reference": "0..1",
1379    "status": "0..1",
1380    "type": "0..1",
1381    "units": "0..1",
1382    "when": "0..1",
1383    "construct": {
1384     "!js/function": "function (arg, params, children) {\n  var synth;\n  synth = this.require('data-synth');\n  return synth.Property(params, function() {\n    if (children.type != null) {\n      return this.set({\n        type: children.type\n      });\n    }\n  });\n}"
1385    },
1386    "argument": "name"
1387   },
1388   "leaf-list": {
1389    "config": "0..1",
1390    "description": "0..1",
1391    "if-feature": "0..n",
1392    "max-elements": "0..1",
1393    "min-elements": "0..1",
1394    "must": "0..n",
1395    "ordered-by": "0..1",
1396    "reference": "0..1",
1397    "status": "0..1",
1398    "type": "0..1",
1399    "units": "0..1",
1400    "when": "0..1",
1401    "construct": {
1402     "!js/function": "function (arg, params, children) {\n  var synth;\n  synth = this.require('data-synth');\n  return synth.List(params, function() {\n    if (children.type != null) {\n      return this.set({\n        type: children.type\n      });\n    }\n  });\n}"
1403    },
1404    "argument": "name"
1405   },
1406   "list": {
1407    "anyxml": "0..n",
1408    "choice": "0..n",
1409    "config": "0..1",
1410    "container": "0..n",
1411    "description": "0..1",
1412    "grouping": "0..n",
1413    "if-feature": "0..n",
1414    "key": "0..1",
1415    "leaf": "0..n",
1416    "leaf-list": "0..n",
1417    "list": "0..n",
1418    "max-elements": "0..1",
1419    "min-elements": "0..1",
1420    "must": "0..n",
1421    "ordered-by": "0..1",
1422    "reference": "0..1",
1423    "status": "0..1",
1424    "typedef": "0..n",
1425    "unique": "0..1",
1426    "uses": "0..n",
1427    "when": "0..1",
1428    "construct": {
1429     "!js/function": "function (arg, params, children) {\n  var item, synth;\n  synth = this.require('data-synth');\n  item = (synth.Object(null)).bind(children);\n  return (synth.List(params)).set({\n    type: item\n  });\n}"
1430    },
1431    "argument": "name"
1432   },
1433   "mandatory": {
1434    "preprocess": {
1435     "!js/function": "function (arg, p, ctx) {\n  return ctx.mandatory = arg === true || arg === 'true';\n}"
1436    },
1437    "argument": "value"
1438   },
1439   "max-elements": {
1440    "preprocess": {
1441     "!js/function": "function (arg, params, ctx) {\n  if (arg !== 'unbounded') {\n    return ctx['max-elements'] = Number(arg);\n  }\n}"
1442    },
1443    "argument": "value"
1444   },
1445   "min-elements": {
1446    "preprocess": {
1447     "!js/function": "function (arg, params, ctx) {\n  return ctx['min-elements'] = Number(arg);\n}"
1448    },
1449    "argument": "value"
1450   },
1451   "must": {
1452    "description": "0..1",
1453    "error-app-tag": "0..1",
1454    "error-message": "0..1",
1455    "reference": "0..1",
1456    "argument": "condition"
1457   },
1458   "notification": {
1459    "anyxml": "0..n",
1460    "choice": "0..n",
1461    "container": "0..n",
1462    "description": "0..1",
1463    "grouping": "0..n",
1464    "if-feature": "0..n",
1465    "leaf": "0..n",
1466    "leaf-list": "0..n",
1467    "list": "0..n",
1468    "reference": "0..1",
1469    "status": "0..1",
1470    "typedef": "0..n",
1471    "uses": "0..n",
1472    "preprocess": {
1473     "!js/function": "function (arg, params) {\n  return this.define('notification', arg, params);\n}"
1474    },
1475    "argument": "event"
1476   },
1477   "output": {
1478    "anyxml": "0..n",
1479    "choice": "0..n",
1480    "container": "0..n",
1481    "grouping": "0..n",
1482    "leaf": "0..n",
1483    "leaf-list": "0..n",
1484    "list": "0..n",
1485    "typedef": "0..n",
1486    "uses": "0..n",
1487    "construct": {
1488     "!js/function": "function (arg, params, children) {\n  var synth;\n  synth = this.require('data-synth');\n  return (synth.Object(params)).bind(children);\n}"
1489    }
1490   },
1491   "path": {
1492    "preprocess": {
1493     "!js/function": "function (arg, params, ctx) {\n  return ctx.path = arg.replace(/[_]/g, '.');\n}"
1494    },
1495    "argument": "value"
1496   },
1497   "pattern": {
1498    "construct": {
1499     "!js/function": "function (arg, params, children, ctx) {\n  if (ctx.patterns == null) {\n    ctx.patterns = [];\n  }\n  return ctx.patterns.push(new RegExp(arg));\n}"
1500    },
1501    "argument": "value"
1502   },
1503   "refine": {
1504    "default": "0..1",
1505    "description": "0..1",
1506    "reference": "0..1",
1507    "config": "0..1",
1508    "mandatory": "0..1",
1509    "presence": "0..1",
1510    "must": "0..n",
1511    "min-elements": "0..1",
1512    "max-elements": "0..1",
1513    "units": "0..1",
1514    "argument": "target-node"
1515   },
1516   "require-instance": {
1517    "preprocess": {
1518     "!js/function": "function (arg, params, ctx) {\n  return ctx['require-instance'] = arg === true || arg === 'true';\n}"
1519    },
1520    "argument": "value"
1521   },
1522   "revision": {
1523    "description": "0..1",
1524    "reference": "0..1",
1525    "preprocess": {
1526     "!js/function": "function (arg, params, ctx) {\n  return this.define('revision', arg, params);\n}"
1527    },
1528    "argument": "date"
1529   },
1530   "rpc": {
1531    "description": "0..1",
1532    "grouping": "0..n",
1533    "if-feature": "0..n",
1534    "input": "0..1",
1535    "output": "0..1",
1536    "reference": "0..1",
1537    "status": "0..1",
1538    "typedef": "0..n",
1539    "construct": {
1540     "!js/function": "function (arg, params, children) {\n  var func, method, ref, ref1, request, response, synth;\n  synth = this.require('data-synth');\n  func = this.resolve('rpc', arg, false);\n  if (func == null) {\n    func = function(input, output, done) {\n      return done(\"No control logic found for '\" + arg + \"' rpc operation\");\n    };\n  }\n  request = (ref = children.input) != null ? ref : synth.Meta;\n  response = (ref1 = children.output) != null ? ref1 : synth.Meta;\n  method = function(data, resolve, reject) {\n    var e, error, input, output;\n    if (typeof console.debug === \"function\") {\n      console.debug(\"executing rpc \" + arg + \"...\");\n    }\n    try {\n      input = new request(data, this);\n      output = new response(null, this);\n    } catch (error) {\n      e = error;\n      return reject(e);\n    }\n    return func.call(this, input, output, function(e) {\n      if (e == null) {\n        return resolve(output);\n      } else {\n        return reject(e);\n      }\n    });\n  };\n  method.params = params;\n  method.input = request;\n  method.output = response;\n  return method;\n}"
1541    },
1542    "argument": "name"
1543   },
1544   "submodule": {
1545    "argument": "name",
1546    "anyxml": "0..n",
1547    "augment": "0..n",
1548    "belongs-to": "0..1",
1549    "choice": "0..n",
1550    "contact": "0..1",
1551    "container": "0..n",
1552    "description": "0..1",
1553    "deviation": "0..n",
1554    "extension": "0..n",
1555    "feature": "0..n",
1556    "grouping": "0..n",
1557    "identity": "0..n",
1558    "import": "0..n",
1559    "include": "0..n",
1560    "leaf": "0..n",
1561    "leaf-list": "0..n",
1562    "list": "0..n",
1563    "notification": "0..n",
1564    "organization": "0..1",
1565    "reference": "0..1",
1566    "revision": "0..n",
1567    "rpc": "0..n",
1568    "typedef": "0..n",
1569    "uses": "0..n",
1570    "yang-version": "0..1",
1571    "preprocess": {
1572     "!js/function": "function (arg, params, ctx) {\n  var k, v;\n  for (k in params) {\n    v = params[k];\n    ctx[k] = v;\n  }\n  return delete ctx.submodule;\n}"
1573    }
1574   },
1575   "status": {
1576    "preprocess": {
1577     "!js/function": "function (arg, params, ctx) {\n  return ctx.status != null ? ctx.status : ctx.status = arg;\n}"
1578    },
1579    "argument": "value"
1580   },
1581   "type": {
1582    "base": "0..1",
1583    "bit": "0..n",
1584    "enum": "0..n",
1585    "fraction-digits": "0..1",
1586    "length": "0..1",
1587    "path": "0..1",
1588    "pattern": "0..n",
1589    "range": "0..1",
1590    "require-instance": "0..1",
1591    "type": "0..n",
1592    "preprocess": {
1593     "!js/function": "function (arg, params, ctx) {\n  return delete this.enumValue;\n}"
1594    },
1595    "construct": {
1596     "!js/function": "function (arg, params, children, ctx) {\n  var key, mparams, ref, ref1, synth, typedef, value;\n  synth = this.require('data-synth');\n  typedef = this.resolve('typedef', arg);\n  if (typedef == null) {\n    throw this.error(\"unable to resolve typedef for \" + arg);\n  }\n  switch (false) {\n    case typedef.construct == null:\n      ctx.type = typedef.construct(params, this, arguments.callee);\n      break;\n    case typeof typedef.type !== 'object':\n      ref = typedef.type;\n      for (key in ref) {\n        value = ref[key];\n        mparams = synth.copy({}, value);\n        synth.copy(mparams, params);\n        arguments.callee.call(this, key, mparams, children, ctx);\n      }\n      break;\n    case typeof typedef.type !== 'string':\n      arguments.callee.call(this, typedef.type, params, children, ctx);\n  }\n  if ((ref1 = ctx.type) != null) {\n    ref1.toString = function() {\n      return arg;\n    };\n  }\n  return null;\n}"
1597    },
1598    "argument": "name"
1599   },
1600   "typedef": {
1601    "default": "0..1",
1602    "description": "0..1",
1603    "units": "0..1",
1604    "type": "0..1",
1605    "reference": "0..1",
1606    "preprocess": {
1607     "!js/function": "function (arg, params) {\n  return this.define('typedef', arg, params);\n}"
1608    },
1609    "argument": "name"
1610   },
1611   "uses": {
1612    "augment": "0..n",
1613    "description": "0..1",
1614    "if-feature": "0..n",
1615    "refine": "0..n",
1616    "reference": "0..1",
1617    "status": "0..1",
1618    "when": "0..1",
1619    "preprocess": {
1620     "!js/function": "function (arg, params, ctx) {\n  var changes, grouping, k, match, ref, ref1, synth, target, v;\n  synth = this.require('data-synth');\n  grouping = synth.copy({}, this.resolve('grouping', arg));\n  delete grouping.description;\n  delete grouping.reference;\n  synth.copy(ctx, grouping);\n  ref = params.refine;\n  for (target in ref) {\n    changes = ref[target];\n    match = this.locate(ctx, target);\n    if (match == null) {\n      continue;\n    }\n    for (k in changes) {\n      v = changes[k];\n      match[k] = v;\n    }\n  }\n  ref1 = params.augment;\n  for (target in ref1) {\n    changes = ref1[target];\n    match = this.locate(ctx, target);\n    if (match == null) {\n      continue;\n    }\n    synth.copy(match, changes);\n  }\n  if (typeof ctx.uses === 'object') {\n    return delete ctx.uses[arg];\n  } else {\n    return delete ctx.uses;\n  }\n}"
1621    },
1622    "argument": "name"
1623   },
1624   "when": {
1625    "description": "0..1",
1626    "reference": "0..1",
1627    "argument": "condition"
1628   },
1629   "anyxml": {},
1630   "base": {
1631    "argument": "name"
1632   },
1633   "contact": {
1634    "argument": {
1635     "text": {
1636      "yin-element": "true"
1637     }
1638    }
1639   },
1640   "default": {
1641    "argument": "value"
1642   },
1643   "description": {
1644    "argument": {
1645     "text": {
1646      "yin-element": "true"
1647     }
1648    }
1649   },
1650   "error-app-tag": {
1651    "argument": "value"
1652   },
1653   "error-message": {
1654    "argument": {
1655     "value": {
1656      "yin-element": "true"
1657     }
1658    }
1659   },
1660   "fraction-digits": {
1661    "argument": "value"
1662   },
1663   "key": {
1664    "argument": "value"
1665   },
1666   "length": {
1667    "argument": "value"
1668   },
1669   "namespace": {
1670    "argument": "uri"
1671   },
1672   "ordered-by": {
1673    "argument": "value"
1674   },
1675   "organization": {
1676    "argument": {
1677     "text": {
1678      "yin-element": "true"
1679     }
1680    }
1681   },
1682   "position": {
1683    "argument": "value"
1684   },
1685   "presence": {
1686    "argument": "value"
1687   },
1688   "range": {
1689    "argument": "value"
1690   },
1691   "reference": {
1692    "argument": {
1693     "text": {
1694      "yin-element": "true"
1695     }
1696    }
1697   },
1698   "revision-date": {
1699    "argument": "date"
1700   },
1701   "unique": {
1702    "argument": "tag"
1703   },
1704   "units": {
1705    "argument": "value"
1706   },
1707   "value": {
1708    "argument": "value"
1709   },
1710   "yang-version": {
1711    "argument": "value"
1712   },
1713   "yin-element": {
1714    "argument": "value"
1715   }
1716  },
1717  "pkgdir": "/Users/onvelocity/rift-composer/webapp/schemas/yang",
1718  "module": {}
1719 }