@@ -13,25 +13,24 @@ $stdout.sync = $stderr.sync = true
13
13
LOGGER = Logger . new ( $stderr) unless defined? ( LOGGER )
14
14
LOGGER . level = Logger ::INFO
15
15
16
- ##
17
- # Default parameters
18
- @options = {
19
- action : nil ,
20
- datadog_api_key : ENV . fetch ( 'DATADOG_API_KEY' ) ,
21
- datadog_app_key : ENV . fetch ( 'DATADOG_APP_KEY' ) ,
22
- backup_dir : File . join ( ENV . fetch ( 'PWD' ) , 'backup' ) ,
23
- diff_format : :color ,
24
- resources : [ DatadogBackup ::Dashboards , DatadogBackup ::Monitors ] ,
25
- output_format : :yaml ,
26
- force_restore : false ,
27
- logger : LOGGER
28
- }
16
+ def fatal ( message )
17
+ LOGGER . fatal ( message )
18
+ exit 1
19
+ end
20
+
21
+ def options_valid? ( options )
22
+ %w[ backup diffs restore ] . include? ( options [ :action ] ) &&
23
+ options [ :datadog_api_key ] &&
24
+ options [ :datadog_app_key ]
25
+ end
29
26
30
- def prereqs
27
+ def prereqs ( defaults )
31
28
ARGV << '--help' if ARGV . empty?
32
29
30
+ result = defaults . dup
31
+
33
32
options = OptionParser . new do |opts |
34
- opts . banner = "Usage: #{ File . basename ( $PROGRAM_NAME) } <backup|diffs|restore>"
33
+ opts . banner = "Usage: DATADOG_API_KEY=abc123 DATADOG_APP_KEY=abc123 #{ File . basename ( $PROGRAM_NAME) } <backup|diffs|restore>"
35
34
opts . separator ''
36
35
opts . on_tail ( '-h' , '--help' , 'Show this message' ) do
37
36
puts opts
@@ -47,40 +46,49 @@ def prereqs
47
46
LOGGER . level = Logger ::ERROR
48
47
end
49
48
opts . on ( '--backup-dir PATH' , '`backup` by default' ) do |path |
50
- @options [ :backup_dir ] = path
49
+ result [ :backup_dir ] = path
51
50
end
52
51
opts . on ( '--monitors-only' ) do
53
- @options [ :resources ] = [ DatadogBackup ::Monitors ]
52
+ result [ :resources ] = [ DatadogBackup ::Monitors ]
54
53
end
55
54
opts . on ( '--dashboards-only' ) do
56
- @options [ :resources ] = [ DatadogBackup ::Dashboards ]
55
+ result [ :resources ] = [ DatadogBackup ::Dashboards ]
57
56
end
58
57
opts . on (
59
58
'--json' ,
60
59
'format backups as JSON instead of YAML. Does not impact `diffs` nor `restore`, but do not mix formats in the same backup-dir.'
61
60
) do
62
- @options [ :output_format ] = :json
61
+ result [ :output_format ] = :json
63
62
end
64
63
opts . on ( '--no-color' , 'removes colored output from diff format' ) do
65
- @options [ :diff_format ] = nil
64
+ result [ :diff_format ] = nil
66
65
end
67
66
opts . on ( '--diff-format FORMAT' , 'one of `color`, `html_simple`, `html`' ) do |format |
68
- @options [ :diff_format ] = format . to_sym
67
+ result [ :diff_format ] = format . to_sym
69
68
end
70
69
opts . on ( '--force-restore' , 'force restore to Datadog' ) do
71
- @options [ :force_restore ] = true
70
+ result [ :force_restore ] = true
72
71
end
73
72
end
74
73
options . parse!
75
74
76
- @options [ :action ] = ARGV . first
77
- if %w[ backup diffs restore ] . include? ( @options [ :action ] )
78
- else
79
- puts options
80
- exit 0
81
- end
75
+ result [ :action ] = ARGV . first
76
+ fatal ( options ) unless options_valid? ( result )
77
+ result
82
78
end
83
79
84
- prereqs
80
+ ##
81
+ # Default parameters
82
+ defaults = {
83
+ action : nil ,
84
+ datadog_api_key : ENV . fetch ( 'DATADOG_API_KEY' , nil ) ,
85
+ datadog_app_key : ENV . fetch ( 'DATADOG_APP_KEY' , nil ) ,
86
+ backup_dir : File . join ( ENV . fetch ( 'PWD' ) , 'backup' ) ,
87
+ diff_format : :color ,
88
+ resources : [ DatadogBackup ::Dashboards , DatadogBackup ::Monitors ] ,
89
+ output_format : :yaml ,
90
+ force_restore : false ,
91
+ logger : LOGGER
92
+ }
85
93
86
- DatadogBackup ::Cli . new ( @options ) . run!
94
+ DatadogBackup ::Cli . new ( prereqs ( defaults ) ) . run!
0 commit comments