Skip to content

Commit 9b13c11

Browse files
committed
CP-311541: Expose the PS cmdlets so that they can be called without importing the module.
Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>
1 parent bda1968 commit 9b13c11

2 files changed

Lines changed: 86 additions & 21 deletions

File tree

ocaml/sdk-gen/powershell/gen_powershell_binding.ml

Lines changed: 81 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@ module TypeSet = Set.Make (struct
1717
let compare = compare
1818
end)
1919

20-
let destdir = "autogen-out/src"
20+
let destdir = "autogen-out"
21+
22+
let srcdir = "autogen-out/src"
2123

2224
let templdir = "templates"
2325

24-
type cmdlet = {filename: string; content: string}
26+
type cmdlet = {cmdletname: string; content: string}
27+
28+
let cmdlets_to_export = ref []
2529

2630
let api =
2731
Datamodel_utils.named_self := true ;
@@ -68,6 +72,21 @@ let maps = ref TypeSet.empty
6872
let generated x =
6973
not (List.mem x.name ["blob"; "session"; "debug"; "event"; "vtpm"])
7074

75+
let rec is_last x list =
76+
match list with
77+
| [] ->
78+
false
79+
| hd :: [] ->
80+
if hd = x then
81+
true
82+
else
83+
false
84+
| hd :: tl ->
85+
if hd = x then
86+
false
87+
else
88+
is_last x tl
89+
7190
let rec main () =
7291
let json =
7392
`O
@@ -91,7 +110,7 @@ let rec main () =
91110
in
92111
render_file
93112
("ConvertTo-XenRef.mustache", "ConvertTo-XenRef.cs")
94-
json templdir destdir ;
113+
json templdir srcdir ;
95114

96115
http_actions
97116
|> List.filter (fun (_, (_, _, sdk, _, _, _)) -> sdk)
@@ -100,9 +119,45 @@ let rec main () =
100119
let filtered_classes = List.filter generated classes in
101120
let cmdlets = List.concat_map gen_cmdlets filtered_classes in
102121

103-
List.iter (fun x -> write_file x.filename x.content) cmdlets ;
122+
List.iter (fun x -> write_file x.cmdletname x.content) cmdlets ;
104123

105-
filtered_classes |> List.iter gen_destructor
124+
filtered_classes |> List.iter gen_destructor ;
125+
126+
cmdlets_to_export :=
127+
[
128+
"Connect-XenServer"
129+
; "Disconnect-XenServer"
130+
; "Get-XenSession"
131+
; "Receive-XenPoolPatch"
132+
; "Send-XenOemPatchStream"
133+
; "Wait-XenTask"
134+
; "ConvertTo-XenRef"
135+
]
136+
@ !cmdlets_to_export ;
137+
138+
cmdlets_to_export := List.sort String.compare !cmdlets_to_export ;
139+
140+
let module_json =
141+
`O
142+
[
143+
( "cmdlets_to_export"
144+
, `A
145+
(List.map
146+
(fun x ->
147+
`O
148+
[
149+
("cmdlet_to_export", `String x)
150+
; ("is_last", `Bool (is_last x !cmdlets_to_export))
151+
]
152+
)
153+
!cmdlets_to_export
154+
)
155+
)
156+
]
157+
in
158+
render_file
159+
("XenServerPSModule.mustache", "XenServerPSModule.psd1")
160+
module_json templdir destdir
106161

107162
(****************)
108163
(* Http actions *)
@@ -161,9 +216,11 @@ and gen_http_action action =
161216
)
162217
]
163218
in
219+
let cmdlet_name = sprintf "%s-Xen%s" commonVerb stem in
164220
render_file
165-
("HttpAction.mustache", sprintf "%s-Xen%s.cs" commonVerb stem)
166-
json templdir destdir
221+
("HttpAction.mustache", sprintf "%s.cs" cmdlet_name)
222+
json templdir srcdir ;
223+
cmdlets_to_export := cmdlet_name :: !cmdlets_to_export
167224

168225
(*************************)
169226
(* Autogenerated cmdlets *)
@@ -174,39 +231,41 @@ and gen_cmdlets obj =
174231

175232
let cmdlets =
176233
[
177-
{filename= sprintf "Get-Xen%s.cs" stem; content= gen_class obj classname}
234+
{cmdletname= sprintf "Get-Xen%s" stem; content= gen_class obj classname}
178235
; {
179-
filename= sprintf "New-Xen%s.cs" stem
236+
cmdletname= sprintf "New-Xen%s" stem
180237
; content=
181238
gen_constructor obj classname (List.filter is_constructor messages)
182239
}
183240
; {
184-
filename= sprintf "Remove-Xen%sProperty.cs" stem
241+
cmdletname= sprintf "Remove-Xen%sProperty" stem
185242
; content= gen_remover obj classname (List.filter is_remover messages)
186243
}
187244
; {
188-
filename= sprintf "Add-Xen%s.cs" stem
245+
cmdletname= sprintf "Add-Xen%s" stem
189246
; content= gen_adder obj classname (List.filter is_adder messages)
190247
}
191248
; {
192-
filename= sprintf "Set-Xen%s.cs" stem
249+
cmdletname= sprintf "Set-Xen%s" stem
193250
; content= gen_setter obj classname (List.filter is_setter messages)
194251
}
195252
; {
196-
filename= sprintf "Get-Xen%sProperty.cs" stem
253+
cmdletname= sprintf "Get-Xen%sProperty" stem
197254
; content= gen_getter obj classname (List.filter is_getter messages)
198255
}
199256
; {
200-
filename= sprintf "Invoke-Xen%s.cs" stem
257+
cmdletname= sprintf "Invoke-Xen%s" stem
201258
; content= gen_invoker obj classname (List.filter is_invoke messages)
202259
}
203260
]
204261
in
205262

206263
cmdlets |> List.filter (fun x -> x.content <> "")
207264

208-
and write_file filename content =
209-
let fn = Filename.concat destdir filename in
265+
and write_file cmdletname content =
266+
let filename = sprintf "%s.cs" cmdletname in
267+
let fn = Filename.concat srcdir filename in
268+
cmdlets_to_export := cmdletname :: !cmdlets_to_export ;
210269
with_output fn (fun x -> output_string x content)
211270

212271
(*********************************)
@@ -617,11 +676,13 @@ and gen_destructor obj =
617676
; ("has_name", `Bool (has_name obj))
618677
]
619678
in
679+
let cmdlet_name =
680+
sprintf "Remove-Xen%s" (ocaml_class_to_csharp_class classname)
681+
in
620682
render_file
621-
( "Remove-XenObject.mustache"
622-
, sprintf "Remove-Xen%s.cs" (ocaml_class_to_csharp_class classname)
623-
)
624-
json templdir destdir
683+
("Remove-XenObject.mustache", sprintf "%s.cs" cmdlet_name)
684+
json templdir srcdir ;
685+
cmdlets_to_export := cmdlet_name :: !cmdlets_to_export
625686
| _ ->
626687
assert false
627688

ocaml/sdk-gen/powershell/autogen/XenServerPSModule.psd1 renamed to ocaml/sdk-gen/powershell/templates/XenServerPSModule.mustache

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,11 @@ FileList = @('about_XenServer.help.txt',
6767
6868
#Public interface
6969
FunctionsToExport = ''
70-
CmdletsToExport = '*'
70+
CmdletsToExport = @(
71+
{{#cmdlets_to_export}}
72+
'{{cmdlet_to_export}}'{{^is_last}},{{/is_last}}
73+
{{/cmdlets_to_export}}
74+
)
7175
VariablesToExport = @('Citrix.XenServer.Sessions','XenServer_Default_Session')
7276
AliasesToExport = '*'
7377

0 commit comments

Comments
 (0)