1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
open Core
open Async
let json_arg = Command.Arg_type.create Yojson.Safe.from_string
let call ?endpoint_url ?profile ?region f m result_to_json error_to_json =
let region =
match region with
| Some region -> Some (Awso.Region.of_string region)
| None -> None in
(Awso_async.Cfg.get_exn ?profile ?region ()) >>=
(fun cfg ->
(f ?endpoint_url ?cfg:(Some cfg) m) >>=
(fun result ->
match result with
| Error err ->
(match error_to_json with
| None ->
failwithf
"endpoint error, but no error values defined in boto"
()
| Some to_json ->
let s = (err |> to_json) |> Yojson.Safe.to_string in
failwithf "AWS error: %s" s ())
| Ok result ->
((match result_to_json with
| None -> print_endline "ok response from endpoint"
| Some to_json ->
((result |> to_json) |> Yojson.Safe.to_string) |>
print_endline);
return ())))
let get_role_credentials =
Command.async ~summary:""
([%map_open.Command
let cli_profile =
flag "-cli-profile" (optional string) ~doc:"NAME aws profile to use"
and cli_region =
flag "-cli-region" (optional string) ~doc:"REGION override region"
and endpoint_url =
flag "-endpoint-url" (optional string)
~doc:"URL override endpoint url"
and roleName =
flag "role-name" (required string) ~doc:"STRING RoleNameType"
and accountId =
flag "account-id" (required string) ~doc:"STRING AccountIdType"
and accessToken =
flag "access-token" (required string) ~doc:"STRING AccessTokenType" in
fun () ->
call ?endpoint_url ?profile:cli_profile ?region:cli_region
Io.get_role_credentials
(Values.GetRoleCredentialsRequest.make ~roleName ~accountId
~accessToken ())
(Some Values.GetRoleCredentialsResponse.to_json)
(Some Values.GetRoleCredentialsResponse.error_to_json)])
let list_account_roles =
Command.async ~summary:""
([%map_open.Command
let cli_profile =
flag "-cli-profile" (optional string) ~doc:"NAME aws profile to use"
and cli_region =
flag "-cli-region" (optional string) ~doc:"REGION override region"
and endpoint_url =
flag "-endpoint-url" (optional string)
~doc:"URL override endpoint url"
and nextToken =
flag "next-token" (optional string) ~doc:"STRING NextTokenType"
and maxResults =
flag "max-results" (optional int) ~doc:"INT MaxResultType"
and accessToken =
flag "access-token" (required string) ~doc:"STRING AccessTokenType"
and accountId =
flag "account-id" (required string) ~doc:"STRING AccountIdType" in
fun () ->
call ?endpoint_url ?profile:cli_profile ?region:cli_region
Io.list_account_roles
(Values.ListAccountRolesRequest.make ?nextToken ?maxResults
~accessToken ~accountId ())
(Some Values.ListAccountRolesResponse.to_json)
(Some Values.ListAccountRolesResponse.error_to_json)])
let list_accounts =
Command.async ~summary:""
([%map_open.Command
let cli_profile =
flag "-cli-profile" (optional string) ~doc:"NAME aws profile to use"
and cli_region =
flag "-cli-region" (optional string) ~doc:"REGION override region"
and endpoint_url =
flag "-endpoint-url" (optional string)
~doc:"URL override endpoint url"
and nextToken =
flag "next-token" (optional string) ~doc:"STRING NextTokenType"
and maxResults =
flag "max-results" (optional int) ~doc:"INT MaxResultType"
and accessToken =
flag "access-token" (required string) ~doc:"STRING AccessTokenType" in
fun () ->
call ?endpoint_url ?profile:cli_profile ?region:cli_region
Io.list_accounts
(Values.ListAccountsRequest.make ?nextToken ?maxResults
~accessToken ()) (Some Values.ListAccountsResponse.to_json)
(Some Values.ListAccountsResponse.error_to_json)])
let logout =
Command.async ~summary:""
([%map_open.Command
let cli_profile =
flag "-cli-profile" (optional string) ~doc:"NAME aws profile to use"
and cli_region =
flag "-cli-region" (optional string) ~doc:"REGION override region"
and endpoint_url =
flag "-endpoint-url" (optional string)
~doc:"URL override endpoint url"
and accessToken =
flag "access-token" (required string) ~doc:"STRING AccessTokenType" in
fun () ->
call ?endpoint_url ?profile:cli_profile ?region:cli_region Io.logout
(Values.LogoutRequest.make ~accessToken ()) None None])
let main =
Command.group
~summary:((Awso.Service.to_string Values.service) ^ " commands")
[("get-role-credentials", get_role_credentials);
("list-account-roles", list_account_roles);
("list-accounts", list_accounts);
("logout", logout)]