dd2tf 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a8a2f18e1bde472cb2cc32ed1297334f74647ca5
4
- data.tar.gz: b74172a38ce877b6c8ddc6ef1a08021e7b2dd241
3
+ metadata.gz: f66178c5394b541c9a77bf18f927e0799f260be9
4
+ data.tar.gz: 0216d45d2bcd15c29c5813ed0a9747a2498c664b
5
5
  SHA512:
6
- metadata.gz: d4ba7d722f27b99fed6ca38d96da4f04086de9c3fe8018c6daeb5431ebf1716076e61b30a8695bf3d5577cd7c02adf9ff390aad225ec96c9f843b8bc438e06b2
7
- data.tar.gz: 3334c6dbf87aeb4eb2cf2ceb03bda267dc29b5ffedbf7f8ecc577ebaf6497cefd475f34e080f520b90223de79d2de21c68f58b26891d3dc3525905fe3e73085c
6
+ metadata.gz: 7b749d8cbd33e140611b4e304985ef5b09ee09083bec226b47c02a8b8fdc3d788283837a65bade2726d19f8b6aa0660720fd956cfe5bc3a076b6f4aa809c0e48
7
+ data.tar.gz: 19be79a6b89322451f302890246924fe87ffb8bb03b40e89f9648c94f23be4097dd04283468ffddc18987f230ca2ad96a617443b8308d351aad35bbad2389a64
data/README.md CHANGED
@@ -24,24 +24,24 @@ Or install it yourself as:
24
24
  ```
25
25
  $ dd2tf help
26
26
  Commands:
27
- dd2tf help [COMMAND] # Describe available commands or one specific command
28
- dd2tf puts monitor configuration as terraform config # puts monitor config
29
- dd2tf puts timeboard configuration as terraform config # puts timeboard config
30
- dd2tf puts user configuration as terraform config # puts user config
27
+ dd2tf help [COMMAND] # Describe available commands or one specific command
28
+ dd2tf print [resource] # Print resources importing command for outputting to tfstate. [resource] is one of the [monitor, timeboard, user, downtime]
29
+ dd2tf tf [resource] # Print resources config terrafom formatted. [resource] is one of the [monitor, timeboard, user]
31
30
 
32
31
  Options:
33
- [--dd-api-key=DD_API_KEY]
34
- [--dd-app-key=DD_APP_KEY]
32
+ --dd-api-key=DD_API_KEY
33
+ --dd-app-key=DD_APP_KEY
35
34
  ```
36
35
 
37
- e.g.
36
+
37
+ ### Print resources config terraform formatted
38
38
 
39
39
  ```
40
- $ dd2tf user --dd_api_key=xxx --dd-app_key=xxx
40
+ $ dd2tf tf user --dd_api_key=xxx --dd-app_key=xxx
41
41
  resource "datadog_user" "reiji_kainuma" {
42
42
  disabled = "false"
43
- email = "reizist@gmail.com"
44
- handle = "reizist@gmail.com"
43
+ email = "reizist@example.com"
44
+ handle = "reizist@example.com"
45
45
  is_admin = "true"
46
46
  name = "Reiji Kainuma"
47
47
  role = ""
@@ -50,7 +50,7 @@ resource "datadog_user" "reiji_kainuma" {
50
50
  ```
51
51
 
52
52
  ```
53
- $ dd2tf monitor --dd_api_key=xxx --dd-app_key=xxx
53
+ $ dd2tf tf monitor --dd_api_key=xxx --dd-app_key=xxx
54
54
  resource "datadog_monitor" "auto_clock_in_sync_with_ntp" {
55
55
  name = "[Auto] Clock in sync with NTP"
56
56
  type = "service check"
@@ -70,7 +70,7 @@ Please read the [KB article](http://help.datadoghq.com/hc/en-us/articles/2042820
70
70
  ```
71
71
 
72
72
  ```
73
- $ dd2tf timeboard --dd_api_key=xxx --dd-app_key=xxx
73
+ $ dd2tf tf timeboard --dd_api_key=xxx --dd-app_key=xxx
74
74
  resource "datadog_timeboard" "presto_staging" {
75
75
  title = "Presto(staging)"
76
76
  description = "created by xxx"
@@ -95,6 +95,14 @@ resource "datadog_timeboard" "presto_staging" {
95
95
  }
96
96
  ```
97
97
 
98
+ ### Print import command for importing resources to tfstate
99
+
100
+ ```
101
+ $ dd2tf print monitor --dd_api_key=xxx --dd-app_key=xxx
102
+ terraform import datadog_monitor.presto_insufficient_resource_error xxxxxxx
103
+ terraform import datadog_monitor.presto_queueing_is_very_high xxxxxxx
104
+ ```
105
+
98
106
  # Contributing
99
107
 
100
108
  Bug reports and pull requests are welcome on GitHub at https://github.com/reizist/dd2tf. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
data/exe/dd2tf CHANGED
@@ -5,34 +5,87 @@ require 'thor'
5
5
  require 'dogapi'
6
6
 
7
7
  module Dd2tf
8
- class Cli < Thor
9
- include Thor::Actions
10
8
 
11
- class_option :dd_api_key, type: :string
12
- class_option :dd_app_key, type: :string
9
+ module Util
10
+ def self.included klass
11
+ klass.class_eval do
12
+ class_option(:dd_api_key, desc: "api key")
13
+ class_option(:dd_app_key, desc: "app key")
14
+ end
15
+ end
16
+
17
+ def client
18
+ instance_variable_get_or_set("@client",
19
+ ::Dogapi::Client.new(options[:dd_api_key], options[:dd_app_key]))
20
+ end
21
+
22
+ private
23
+
24
+ def instance_variable_get_or_set(name, object)
25
+ instance_variable_get(name) || instance_variable_set(name, object)
26
+ end
27
+ end
28
+
29
+ class Print < Thor
30
+ include Util
31
+
32
+ desc "user", "ipmort user resource to tfstate"
33
+ def user
34
+ puts ::Dd2tf::Import::User.new(client).print
35
+ end
36
+
37
+ desc "downtime", "ipmort downtime resource to tfstate"
38
+ def downtime
39
+ puts ::Dd2tf::Import::Downtime.new(client).print
40
+ end
41
+
42
+ desc "monitor", "ipmort monitor resource to tfstate"
43
+ def monitor
44
+ puts ::Dd2tf::Import::Monitor.new(client).print
45
+ end
13
46
 
14
- desc "puts monitor configuration as terraform config", "puts monitor config"
47
+ desc "timeboard", "ipmort timeboard resource to tfstate"
48
+ def timeboard
49
+ puts ::Dd2tf::Import::Timeboard.new(client).print
50
+ end
51
+ end
52
+
53
+ class Tf < Thor
54
+ include Util
55
+
56
+ desc "monitor", "puts monitor config"
15
57
  def monitor
16
- puts Monitor.new(client).output
58
+ puts ::Dd2tf::Monitor.new(client).output
17
59
  end
18
60
 
19
- desc "puts timeboard configuration as terraform config", "puts timeboard config"
61
+ desc "timeboard", "puts timeboard config"
20
62
  def timeboard
21
- puts Timeboard.new(client).output
63
+ puts ::Dd2tf::Timeboard.new(client).output
22
64
  end
23
65
 
24
- desc "puts user configuration as terraform config", "puts user config"
66
+ desc "user", "puts user config"
25
67
  def user
26
- puts User.new(client).output
68
+ puts ::Dd2tf::User.new(client).output
27
69
  end
70
+ end
28
71
 
29
- private
72
+ class Cli < Thor
73
+ include Thor::Actions
74
+ include Util
75
+
76
+ class_option :dd_api_key, type: :string, required: true
77
+ class_option :dd_app_key, type: :string, required: true
78
+
79
+ desc "print [resource]",
80
+ "Print resources importing command for outputting to tfstate.
81
+ [resource] is one of the [monitor, timeboard, user, downtime]"
82
+ subcommand 'print', Print
83
+
84
+ desc "tf [resource]",
85
+ "Print resources config terrafom formatted.
86
+ [resource] is one of the [monitor, timeboard, user]"
87
+ subcommand 'tf', Tf
30
88
 
31
- def client
32
- return @client unless @client.nil?
33
- config = Config.new(options[:dd_api_key], options[:dd_app_key])
34
- @client ||= ::Dogapi::Client.new(config.api_key, config.app_key)
35
- end
36
89
  end
37
90
  end
38
91
 
data/lib/dd2tf.rb CHANGED
@@ -1,6 +1,12 @@
1
1
  require "dd2tf/version"
2
+
2
3
  require "dd2tf/base"
4
+ require "dd2tf/user"
3
5
  require "dd2tf/monitor"
4
6
  require "dd2tf/timeboard"
5
- require "dd2tf/user"
6
- require "dd2tf/config"
7
+
8
+ require "dd2tf/import/base"
9
+ require "dd2tf/import/user"
10
+ require "dd2tf/import/monitor"
11
+ require "dd2tf/import/timeboard"
12
+ require "dd2tf/import/downtime"
data/lib/dd2tf/base.rb CHANGED
@@ -3,9 +3,9 @@ require 'active_support'
3
3
  require 'active_support/core_ext'
4
4
 
5
5
  module Dd2tf
6
+ UNALLOWED_RESOURCE_TITLE_REGEXP = /\(|\)|'|,|\.|\[|\]|:/
6
7
  class Base
7
8
  class NotImplementedError < StandardError; end
8
- UNALLOWED_RESOURCE_TITLE_REGEXP = /\(|\)|'|\.|\[|\]|:/
9
9
 
10
10
  def initialize(client)
11
11
  @client = client
@@ -0,0 +1,32 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext'
3
+
4
+ module Dd2tf
5
+ module Import
6
+ class Base
7
+ attr_reader :resources
8
+ class NotImplementedError < StandardError; end
9
+
10
+ def initialize(client)
11
+ @client = client
12
+ end
13
+
14
+ def print
15
+ resources.each do |resource|
16
+ puts "terraform import #{resource_type}.#{resource[:resource_name]} #{resource[:resource_id]}"
17
+ end
18
+ nil
19
+ end
20
+
21
+ private
22
+
23
+ def resources
24
+ raise NotImplementedError
25
+ end
26
+
27
+ def resource_type
28
+ raise NotImplementedError
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,21 @@
1
+ module Dd2tf
2
+ module Import
3
+ class Downtime < Base
4
+ def resource_type
5
+ "datadog_downtime"
6
+ end
7
+
8
+ def resources
9
+ resources = []
10
+ downtimes = @client.get_all_downtimes[1]
11
+
12
+ downtimes.each do |downtime|
13
+ downtime_name = downtime["id"]
14
+ resource_id = downtime["id"]
15
+ resources << { resource_id: resource_id, resource_name: downtime_name }
16
+ end
17
+ resources
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ module Dd2tf
2
+ module Import
3
+ class Monitor < Base
4
+ def resource_type
5
+ "datadog_monitor"
6
+ end
7
+
8
+ def resources
9
+ resources = []
10
+ monitors = @client.get_all_monitors[1]
11
+
12
+ monitors.each do |monitor|
13
+ monitor_name = monitor["name"].underscore.gsub(" ", "_").gsub(::Dd2tf::UNALLOWED_RESOURCE_TITLE_REGEXP, '')
14
+ resource_id = monitor["id"]
15
+ resources << { resource_id: resource_id, resource_name: monitor_name }
16
+ end
17
+
18
+ resources
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module Dd2tf
2
+ module Import
3
+ class Timeboard < Base
4
+ def resource_type
5
+ "datadog_timeboard"
6
+ end
7
+
8
+ def resources
9
+ resources = []
10
+ boards = @client.get_dashboards[1]["dashes"]
11
+
12
+ boards.each do |board|
13
+ board_name = board["title"].underscore.gsub(" ", "_").gsub(::Dd2tf::UNALLOWED_RESOURCE_TITLE_REGEXP, '')
14
+ resource_id = board["id"]
15
+ resources << { resource_id: resource_id, resource_name: board_name }
16
+ end
17
+
18
+ resources
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ module Dd2tf
2
+ module Import
3
+ class User < Base
4
+ def resource_type
5
+ "datadog_user"
6
+ end
7
+
8
+ def resources
9
+ resources = []
10
+ users = @client.get_all_users[1]["users"]
11
+
12
+ users.each do |user|
13
+ user_name = user["name"].to_s.underscore.gsub(" ", "_").gsub(::Dd2tf::UNALLOWED_RESOURCE_TITLE_REGEXP, '')
14
+ # resource_id is the email address
15
+ # see: https://www.terraform.io/docs/providers/datadog/r/user.html#import
16
+ resource_id = user["email"]
17
+ resources << { resource_id: resource_id, resource_name: user_name }
18
+ end
19
+ resources
20
+ end
21
+ end
22
+ end
23
+ end
data/lib/dd2tf/monitor.rb CHANGED
@@ -6,7 +6,7 @@ module Dd2tf
6
6
 
7
7
  results = []
8
8
  monitors.each do |monitor|
9
- monitor_name = monitor["name"].underscore.gsub(" ", "_").gsub(UNALLOWED_RESOURCE_TITLE_REGEXP, '')
9
+ monitor_name = monitor["name"].underscore.gsub(" ", "_").gsub(::Dd2tf::UNALLOWED_RESOURCE_TITLE_REGEXP, '')
10
10
  renderer = renderer()
11
11
  results << renderer.result(binding)
12
12
  end
@@ -5,7 +5,7 @@ module Dd2tf
5
5
  board_ids = @client.get_dashboards[1]["dashes"].map{|board| board["id"]}
6
6
  board_ids.each do |board_id|
7
7
  board = @client.get_dashboard(board_id)[1]["dash"]
8
- board_name = board["title"].underscore.gsub(' ', '_').gsub(UNALLOWED_RESOURCE_TITLE_REGEXP, '')
8
+ board_name = board["title"].underscore.gsub(' ', '_').gsub(::Dd2tf::UNALLOWED_RESOURCE_TITLE_REGEXP, '')
9
9
  renderer = renderer()
10
10
  results << renderer.result(binding)
11
11
  end
data/lib/dd2tf/user.rb CHANGED
@@ -6,7 +6,7 @@ module Dd2tf
6
6
 
7
7
  results = []
8
8
  users.each do |user|
9
- user_name = user["name"].to_s.underscore.gsub(" ", "_").gsub(UNALLOWED_RESOURCE_TITLE_REGEXP, '')
9
+ user_name = user["name"].to_s.underscore.gsub(" ", "_").gsub(::Dd2tf::UNALLOWED_RESOURCE_TITLE_REGEXP, '')
10
10
  renderer = renderer()
11
11
  results << renderer.result(binding)
12
12
  end
data/lib/dd2tf/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dd2tf
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dd2tf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - reizist
@@ -115,7 +115,11 @@ files:
115
115
  - exe/dd2tf
116
116
  - lib/dd2tf.rb
117
117
  - lib/dd2tf/base.rb
118
- - lib/dd2tf/config.rb
118
+ - lib/dd2tf/import/base.rb
119
+ - lib/dd2tf/import/downtime.rb
120
+ - lib/dd2tf/import/monitor.rb
121
+ - lib/dd2tf/import/timeboard.rb
122
+ - lib/dd2tf/import/user.rb
119
123
  - lib/dd2tf/monitor.rb
120
124
  - lib/dd2tf/timeboard.rb
121
125
  - lib/dd2tf/user.rb
data/lib/dd2tf/config.rb DELETED
@@ -1,9 +0,0 @@
1
- module Dd2tf
2
- class Config
3
- attr_reader :api_key, :app_key
4
- def initialize(api_key, app_key)
5
- @api_key = api_key
6
- @app_key = app_key
7
- end
8
- end
9
- end