Skip to content

Commit 28b5edb

Browse files
committed
[cmd] feat: added version command
1 parent 2021926 commit 28b5edb

File tree

6 files changed

+85
-28
lines changed

6 files changed

+85
-28
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ This tool is **HIGHLY DESTRUCTIVE** and can deletes all resources! This should b
2323
### TODO
2424
- [x] Schedule resource refreshing
2525
- [x] generate Sample Yaml config and load config
26+
- [x] [Persist state to remote sources](https://github.com/MeNsaaH/reka/issues/4)
27+
- [ ] [Add More AWS Resources](https://github.com/MeNsaaH/reka/issues/1)
28+
- [ ] [Add More GCP Resources](https://github.com/MeNsaaH/reka/issues/2)
29+
- [ ] [Add More Azure Resources](https://github.com/MeNsaaH/reka/issues/6)
2630
- [ ] [Create Web Dashboard](https://github.com/MeNsaaH/reka/issues/3)
27-
- [ ] [Persist state to remote sources](https://github.com/MeNsaaH/reka/issues/4)
28-
- [ ] [Add AWS Resources](https://github.com/MeNsaaH/reka/issues/1)
29-
- [ ] [Add GCP Resources](https://github.com/MeNsaaH/reka/issues/2)
30-
- [ ] [Add Azure Resources](https://github.com/MeNsaaH/reka/issues/6)
3131

3232
#### Supported Resources
3333
Here is a list of all [supported resources](./supported-resources.md)

cmd/root.go

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ var (
4141
providers []*types.Provider
4242
backend state.Backender
4343
activeState *state.State
44+
verbose bool
4445
)
4546

4647
// rootCmd represents the base command when called without any subcommands
@@ -51,6 +52,21 @@ var rootCmd = &cobra.Command{
5152
// Uncomment the following line if your bare application
5253
// has an action associated with it:
5354
Run: func(cmd *cobra.Command, args []string) {
55+
// Load Config and Defaults
56+
config.LoadConfig()
57+
58+
cfg = config.GetConfig()
59+
60+
for _, rule := range cfg.Rules {
61+
// Convert Rule in config to rules.Rule type
62+
r := *((*rules.Rule)(unsafe.Pointer(&rule)))
63+
r.Tags = resource.Tags(rule.Tags)
64+
rules.ParseRule(r)
65+
}
66+
67+
// Initialize Provider objects
68+
providers = initProviders()
69+
backend = state.InitBackend()
5470
// RefreshResources on every execution
5571
refreshResources(providers)
5672
for _, p := range providers {
@@ -87,6 +103,7 @@ func init() {
87103
cobra.OnInitialize(initConfig)
88104
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.reka.yaml)")
89105
rootCmd.Flags().BoolP("unused-only", "t", false, "Reap only unused resources")
106+
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Output verbose logs (DEBUG)")
90107
}
91108

92109
// initConfig reads in config file and ENV variables if set.
@@ -114,20 +131,11 @@ func initConfig() {
114131
log.Info("Using config file:", viper.ConfigFileUsed())
115132
}
116133

117-
// Load Config and Defaults
118-
config.LoadConfig()
119-
cfg = config.GetConfig()
120-
121-
for _, rule := range cfg.Rules {
122-
// Convert Rule in config to rules.Rule type
123-
r := *((*rules.Rule)(unsafe.Pointer(&rule)))
124-
r.Tags = resource.Tags(rule.Tags)
125-
rules.ParseRule(r)
134+
if verbose {
135+
config.SetVerboseLogging()
136+
log.SetLevel(log.DebugLevel)
126137
}
127138

128-
// Initialize Provider objects
129-
providers = initProviders()
130-
backend = state.InitBackend()
131139
}
132140

133141
func initProviders() []*types.Provider {
@@ -146,14 +154,12 @@ func initProviders() []*types.Provider {
146154
if err != nil {
147155
log.Fatalf("Could not initialize %s Provider: %s", p, err.Error())
148156
}
149-
// TODO Config providers
150157
providers = append(providers, provider)
151158
}
152159
return providers
153160
}
154161

155162
// Refresh current status of resources from Providers
156-
// TODO Reconcile state so that new resources are added to desired states and former resources removed
157163
func refreshResources(providers []*types.Provider) {
158164
// activeState is the current state stored in backend
159165
activeState = backend.GetState()
@@ -166,8 +172,6 @@ func refreshResources(providers []*types.Provider) {
166172

167173
// Add new resources to desired state if they don't already exists
168174
// this is to ensure all new resources created are also added to reka's desired state
169-
// too many for loops 😫
170-
// TODO check for attribute changes not in desired state for instance, if node pool was scaled
171175
for currentProvider, currentProviderResources := range activeState.Current {
172176
if _, ok := activeState.Desired[currentProvider]; ok {
173177
for u, w := range currentProviderResources {
@@ -189,9 +193,6 @@ func refreshResources(providers []*types.Provider) {
189193
backend.WriteState(activeState)
190194
}
191195

192-
func reapResources() {
193-
}
194-
195196
func containsResource(res []*resource.Resource, r *resource.Resource) bool {
196197
for _, rs := range res {
197198
if rs.UUID == r.UUID {

cmd/version.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
Copyright © 2021 NAME HERE <EMAIL ADDRESS>
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
package cmd
17+
18+
import (
19+
"fmt"
20+
21+
"github.com/spf13/cobra"
22+
)
23+
24+
var majorVersion = "0"
25+
var minorVersion = "1"
26+
27+
// versionCmd represents the version command
28+
var versionCmd = &cobra.Command{
29+
Use: "version",
30+
Short: "show reka version",
31+
Run: func(cmd *cobra.Command, args []string) {
32+
fmt.Printf("Reka v%s.%s\n\nhttps://github.com/mensaah/reka (2021)\n", majorVersion, minorVersion)
33+
},
34+
}
35+
36+
func init() {
37+
rootCmd.AddCommand(versionCmd)
38+
39+
// Here you will define your flags and configuration settings.
40+
41+
// Cobra supports Persistent Flags which will work for this command
42+
// and all subcommands, e.g.:
43+
// versionCmd.PersistentFlags().String("foo", "", "A help for foo")
44+
45+
// Cobra supports local flags which will only run when this command
46+
// is called directly, e.g.:
47+
// versionCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
48+
}

config/config.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
)
1313

1414
var (
15-
config *Config
15+
config = &Config{}
1616
workingDir string
1717
err error
1818
)
@@ -28,6 +28,7 @@ type Config struct {
2828
Timezone string
2929
RefreshInterval int32
3030
LogPath string
31+
Verbose bool
3132

3233
Database *DatabaseConfig
3334

@@ -210,3 +211,8 @@ func StaticPath() string {
210211
func GetProviders() []string {
211212
return config.Providers
212213
}
214+
215+
// SetVerboseLogging sets logging to be in DEBUG mode
216+
func SetVerboseLogging() {
217+
config.Verbose = true
218+
}

config/logger.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import (
77
log "github.com/sirupsen/logrus"
88
)
99

10-
// GetLogger returns a logger for logging tasks to file
11-
// TODO Create logger per Job with unique filename
10+
// GetLogger returns a logger for logging manager processes
11+
// Logs are also persisted to file
1212
func GetLogger(mgrName, logPath string) *log.Entry {
1313
logger := log.New()
14-
logger.SetLevel(log.DebugLevel)
14+
if config.Verbose {
15+
logger.SetLevel(log.DebugLevel)
16+
}
1517
file, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
1618
if err == nil {
1719
logger.SetOutput(io.MultiWriter(file, os.Stderr))

provider/aws/s3.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func getS3BucketRegion(cfg aws.Config, bucketName string) (string, error) {
3636
}
3737

3838
func getS3BucketTags(svc *s3.Client, bucketName string) (resource.Tags, error) {
39-
s3Logger.Debug("Fetching S3 Tags")
39+
s3Logger.Debugf("Fetching S3 Tags for %s", bucketName)
4040
input := &s3.GetBucketTaggingInput{
4141
Bucket: aws.String(bucketName),
4242
}

0 commit comments

Comments
 (0)