// 2020 Rackspace, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"): you may // not use this file except in compliance with the License. You may obtain // a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations // under the License. package refresh import ( "os" "github.com/jedib0t/go-pretty/v6/table" "github.rackspace.com/DCM/gomigrate/core" "github.rackspace.com/gorax/clients/migrationAPI" "github.rackspace.com/gorax/gokeys" ) const ( argsBQ = iota argsDCX argsLinked argsRVI argsUnipede ) type argValues struct { Accounts *[]string Devices *[]int MoveGroups *[]string } var ( args = []argValues{{}, {}, {}, {}, {}, {}} subPlugins = make([]core.Plugin, 0) ) // Plugin function will return a argparse.Command type back to the parent parser // nolint:typecheck func Plugin(p *core.Parser) core.Plugin { cmd := p.NewCommand("refresh", "Refresh data in NSI DB") subPlugins = append( subPlugins, fromBQSubPlugin(cmd), fromDCXSubPlugin(cmd), fromLinkedSubPlugin(cmd), fromUnipedeSubPlugin(cmd), fromRVISubPlugin(cmd), ) return core.Plugin{CMD: cmd, Func: pluginFunc} } func pluginFunc(cfg gokeys.Settings) { for _, p := range subPlugins { if p.CMD.Happened() { p.Func(cfg) } } } //// pPrint func will take a structured type of response data and render a table //// output to stdout. // func pPrintCollect(data []migrationAPI.CollectResponse) { t := table.NewWriter() t.SetOutputMirror(os.Stdout) totalUpdated := 0 totalSkipped := 0 for _, r := range data { totalUpdated += r.Data.Updated totalSkipped += len(r.Data.Missed) } t.AppendRow(table.Row{"DEVICES REFRESHED", totalUpdated}) t.AppendRow(table.Row{"DEVICES SKIPPED", totalSkipped}) if totalSkipped > 0 { t.AppendSeparator() } for _, row := range data { for _, d := range row.Data.Missed { t.AppendRow(table.Row{d.Item, d.Details}) } } t.Render() }