diff --git a/cli/cmd/subManagement.go b/cli/cmd/subManagement.go index ffade6c3a0904d1b8d408a7840788bc9cd4705a2..f34cb1949007c3a0470ee10265ffb9ae73433194 100644 --- a/cli/cmd/subManagement.go +++ b/cli/cmd/subManagement.go @@ -43,6 +43,8 @@ var subCmd = &cobra.Command{ Long: `The subscription command contains all sub-commands for subscription management. It has no functionality in itself.`, } +var subUUID string + func init() { rootCmd.AddCommand(subCmd) } diff --git a/cli/cmd/subManagementAdd.go b/cli/cmd/subManagementAdd.go new file mode 100644 index 0000000000000000000000000000000000000000..bb8557607f2f7057760c21fbb022d8a4653885ab --- /dev/null +++ b/cli/cmd/subManagementAdd.go @@ -0,0 +1,70 @@ +/* +Copyright © 2021 da/net Research Group <danet@h-da.de> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +package cmd + +import ( + "code.fbi.h-da.de/danet/gosdn/controller/api" + "github.com/pterm/pterm" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +// subAddCmd represents the add one subscription command. +var subAddCmd = &cobra.Command{ + Use: "add", + Short: "Add creates a new subscription for the network element matching the provided ID using the provided subscribe options.", + Long: "Add creates a new subscription for the network element matching the provided ID using the provided subscribe options.", + Run: func(cmd *cobra.Command, args []string) { + spinner, _ := pterm.DefaultSpinner.Start("Adding subscription") + + // TODO: add option to provide sub options?? + _, err := api.Add(createContextWithAuthorization(), viper.GetString("controllerAPIEndpoint"), mneUUID, nil) + if err != nil { + pterm.Error.Println(err) + return + } + spinner.Success() + }, + + PostRun: func(cmd *cobra.Command, args []string) { + // Necessary for prompt mode. The flag variables have to be resetted, + // since in prompt mode the program keeps running. + mneUUID = "" + }, +} + +func init() { + subCmd.AddCommand(subAddCmd) + + subAddCmd.Flags().StringVar(&mneUUID, "uuid", "", "network element UUID") + +} diff --git a/cli/cmd/subManagementDelete.go b/cli/cmd/subManagementDelete.go new file mode 100644 index 0000000000000000000000000000000000000000..ed161dc1f1e4c3c5a4e89443b189b668bebda419 --- /dev/null +++ b/cli/cmd/subManagementDelete.go @@ -0,0 +1,68 @@ +/* +Copyright © 2021 da/net Research Group <danet@h-da.de> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +package cmd + +import ( + "code.fbi.h-da.de/danet/gosdn/controller/api" + "github.com/pterm/pterm" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +// subDeleteCmd represents the delete one subscription command. +var subDeleteCmd = &cobra.Command{ + Use: "delete", + Short: "Stops and removes one running gNMI subscription.", + Long: "Stops and removes one running gNMI subscription.", + Run: func(cmd *cobra.Command, args []string) { + spinner, _ := pterm.DefaultSpinner.Start("Removing subscription") + + _, err := api.Delete(createContextWithAuthorization(), viper.GetString("controllerAPIEndpoint"), subUUID) + if err != nil { + pterm.Error.Println(err) + return + } + + spinner.Success() + }, + PostRun: func(cmd *cobra.Command, args []string) { + // Necessary for prompt mode. The flag variables have to be resetted, + // since in prompt mode the program keeps running. + subUUID = "" + }, +} + +func init() { + subCmd.AddCommand(subDeleteCmd) + + subDeleteCmd.Flags().StringVar(&subUUID, "uuid", "", "UUID of the subcription") +} diff --git a/cli/cmd/subManagementGet.go b/cli/cmd/subManagementGet.go new file mode 100644 index 0000000000000000000000000000000000000000..4fc40ee1499a8754d70c99c4f21ceed13adc1075 --- /dev/null +++ b/cli/cmd/subManagementGet.go @@ -0,0 +1,86 @@ +/* +Copyright © 2021 da/net Research Group <danet@h-da.de> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +package cmd + +import ( + "fmt" + + "code.fbi.h-da.de/danet/gosdn/controller/api" + "github.com/pterm/pterm" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +// subGetCmd represents the get one subscription command. +var subGetCmd = &cobra.Command{ + Use: "get", + Short: "Fetches details about one specific currently running gNMI subscriptions.", + Long: "Fetches details about one specific currently running gNMI subscriptions.", + Run: func(cmd *cobra.Command, args []string) { + spinner, _ := pterm.DefaultSpinner.Start("Fetching subscription") + + resp, err := api.Get(createContextWithAuthorization(), viper.GetString("controllerAPIEndpoint"), subUUID) + if err != nil { + pterm.Error.Println(err) + return + } + spinner.Success() + + data := pterm.TableData{[]string{"SubUUID", "MneID", "MneName", "PndID"}} + data = append(data, []string{resp.Subscriptions.Subid, resp.Subscriptions.Mneid, resp.Subscriptions.MneName, resp.Subscriptions.Pid}) + + data = append(data, []string{"Subscribe Options"}) + data = append(data, []string{"GnmiMode", "GnmiStreamMode", "Sampleinterval"}) + data = append(data, []string{resp.Subscriptions.SubscribeOptions.GnmiMode, resp.Subscriptions.SubscribeOptions.GnmiStreamMode, fmt.Sprint(resp.Subscriptions.SubscribeOptions.SampleInterval)}) + + data = append(data, []string{"Paths"}) + for _, path := range resp.Subscriptions.Paths { + data = append(data, path.Elem) + } + + err = pterm.DefaultTable.WithHasHeader().WithData(data).Render() + if err != nil { + return + } + }, + PostRun: func(cmd *cobra.Command, args []string) { + // Necessary for prompt mode. The flag variables have to be resetted, + // since in prompt mode the program keeps running. + subUUID = "" + }, +} + +func init() { + subCmd.AddCommand(subGetCmd) + + subGetCmd.Flags().StringVar(&subUUID, "uuid", "", "UUID of the subcription") +}