Skip to content

Commit 29fac67

Browse files
authored
Merge pull request #272 from eddbbt/trigger_policies_support
Add trigger delivery policy basic operations
2 parents da6e524 + be72e43 commit 29fac67

File tree

1 file changed

+192
-0
lines changed

1 file changed

+192
-0
lines changed

cmd/realm/trigger_policies.go

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
// Copyright 2024 SECO Mind Srl
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package realm
16+
17+
import (
18+
"encoding/json"
19+
"fmt"
20+
"github.com/astarte-platform/astartectl/utils"
21+
"github.com/spf13/cobra"
22+
"os"
23+
)
24+
25+
// triggersPoliciesCmd represents the triggers command
26+
var triggersPoliciesCmd = &cobra.Command{
27+
Use: "trigger-policies",
28+
Short: "Manage trigger delivery policies",
29+
Long: `List, show, install or delete trigger delivery policies in your realm.`,
30+
Aliases: []string{"trigger-policy"},
31+
}
32+
33+
var triggersPoliciesListCmd = &cobra.Command{
34+
Use: "list",
35+
Short: "List trigger policies",
36+
Long: `List the name of trigger policies installed in the realm.`,
37+
Example: ` astartectl realm-management trigger-policies list`,
38+
RunE: triggersPoliciesListtF,
39+
Aliases: []string{"ls"},
40+
}
41+
42+
var triggersPoliciesShowCmd = &cobra.Command{
43+
Use: "show <trigger_policy_name>",
44+
Short: "Show trigger policy",
45+
Long: `Shows a trigger policy installed in the realm.`,
46+
Example: ` astartectl realm-management trigger-policies show my_trigger_policiy`,
47+
Args: cobra.ExactArgs(1),
48+
RunE: triggersPoliciesShowF,
49+
}
50+
51+
var triggersPoliciesInstallCmd = &cobra.Command{
52+
Use: "install <trigger_policy_file>",
53+
Short: "Install trigger policy",
54+
Long: `Install the given trigger policy in the realm.
55+
<trigger_file> must be a path to a JSON file containing a valid Astarte trigger policy.`,
56+
Example: ` astartectl realm-management trigger-policies install my_policy.json`,
57+
Args: cobra.ExactArgs(1),
58+
RunE: triggersPoliciesInstallF,
59+
}
60+
61+
var triggersPoliciesDeleteCmd = &cobra.Command{
62+
Use: "delete <trigger_policy_name>",
63+
Short: "Delete a trigger policy",
64+
Long: `Deletes the specified trigger policy from the realm.`,
65+
Example: ` astartectl realm-management trigger-policies delete my_trigger_policiy`,
66+
Args: cobra.ExactArgs(1),
67+
RunE: triggersPoliciesDeleteF,
68+
Aliases: []string{"del"},
69+
}
70+
71+
func init() {
72+
RealmManagementCmd.AddCommand(triggersPoliciesCmd)
73+
triggersPoliciesCmd.AddCommand(
74+
triggersPoliciesListCmd,
75+
triggersPoliciesShowCmd,
76+
triggersPoliciesInstallCmd,
77+
triggersPoliciesDeleteCmd,
78+
)
79+
}
80+
81+
func triggersPoliciesListtF(command *cobra.Command, args []string) error {
82+
realmPolicies, _ := listPolicies(realm)
83+
fmt.Println(realmPolicies)
84+
return nil
85+
}
86+
87+
func triggersPoliciesShowF(command *cobra.Command, args []string) error {
88+
policyName := args[0]
89+
policyDefinition, _ := getPolicyDefinition(realm, policyName)
90+
respJSON, _ := json.MarshalIndent(policyDefinition, "", " ")
91+
fmt.Println(string(respJSON))
92+
return nil
93+
}
94+
95+
func triggersPoliciesInstallF(command *cobra.Command, args []string) error {
96+
triggerFile, err := os.ReadFile(args[0])
97+
if err != nil {
98+
return err
99+
}
100+
101+
var triggerPolicy map[string]interface{}
102+
err = json.Unmarshal(triggerFile, &triggerPolicy)
103+
if err != nil {
104+
return err
105+
}
106+
107+
err = installTriggerPolicy(realm, triggerPolicy)
108+
if err != nil {
109+
fmt.Println("Something went wrong, check error description below")
110+
fmt.Println(err)
111+
return err
112+
}
113+
fmt.Println("ok")
114+
return nil
115+
}
116+
117+
func triggersPoliciesDeleteF(command *cobra.Command, args []string) error {
118+
policyName := args[0]
119+
deleteTriggerPolicyCall, err := astarteAPIClient.DeleteTriggerDeliveryPolicy(realm, policyName)
120+
if err != nil {
121+
fmt.Fprintln(os.Stderr, err)
122+
os.Exit(1)
123+
}
124+
125+
utils.MaybeCurlAndExit(deleteTriggerPolicyCall, astarteAPIClient)
126+
127+
deleteTriggerPolicyRes, err := deleteTriggerPolicyCall.Run(astarteAPIClient)
128+
if err != nil {
129+
fmt.Fprintln(os.Stderr, err)
130+
os.Exit(1)
131+
}
132+
133+
_, _ = deleteTriggerPolicyRes.Parse()
134+
135+
fmt.Println("ok")
136+
return nil
137+
}
138+
139+
func installTriggerPolicy(realm string, policy any) error {
140+
installTriggerDeliveryCall, err := astarteAPIClient.InstallTriggerDeliveryPolicy(realm, policy)
141+
if err != nil {
142+
return err
143+
}
144+
145+
utils.MaybeCurlAndExit(installTriggerDeliveryCall, astarteAPIClient)
146+
147+
installTriggerDeliveryRes, err := installTriggerDeliveryCall.Run(astarteAPIClient)
148+
if err != nil {
149+
return err
150+
}
151+
_, _ = installTriggerDeliveryRes.Parse()
152+
return nil
153+
}
154+
155+
func listPolicies(realm string) ([]string, error) {
156+
ListTriggerPolicyDeliveryCall, err := astarteAPIClient.ListTriggerDeliveryPolicies(realm)
157+
if err != nil {
158+
return []string{}, err
159+
}
160+
161+
utils.MaybeCurlAndExit(ListTriggerPolicyDeliveryCall, astarteAPIClient)
162+
163+
ListTriggerPolicyRes, err := ListTriggerPolicyDeliveryCall.Run(astarteAPIClient)
164+
if err != nil {
165+
return []string{}, err
166+
}
167+
rawlistPolicies, err := ListTriggerPolicyRes.Parse()
168+
if err != nil {
169+
return []string{}, err
170+
}
171+
return rawlistPolicies.([]string), nil
172+
}
173+
174+
func getPolicyDefinition(realm, policyName string) (map[string]interface{}, error) {
175+
getPolicyCall, err := astarteAPIClient.GetTriggerDeliveryPolicy(realm, policyName)
176+
if err != nil {
177+
return nil, err
178+
}
179+
180+
utils.MaybeCurlAndExit(getPolicyCall, astarteAPIClient)
181+
182+
getPolicyrRes, err := getPolicyCall.Run(astarteAPIClient)
183+
if err != nil {
184+
return nil, err
185+
}
186+
rawPolicy, err := getPolicyrRes.Parse()
187+
if err != nil {
188+
return nil, err
189+
}
190+
191+
return rawPolicy.(map[string]interface{}), nil
192+
}

0 commit comments

Comments
 (0)