lita-digitalocean 0.0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,61 @@
1
+ module Lita
2
+ module Handlers
3
+ class Digitalocean < Handler
4
+ class Domain < Base
5
+ do_route /^do\s+domains?\s+create\s+[^\s]+\s+[^\s]+$/i, :create, {
6
+ t("help.domains.create_key") => t("help.domains.create_value")
7
+ }
8
+
9
+ do_route /^do\s+domains?\s+delete\s+[^\s]+$/i, :delete, {
10
+ t("help.domains.delete_key") => t("help.domains.delete_value")
11
+ }
12
+
13
+ do_route /^do\s+domains?\s+list$/i, :list, {
14
+ t("help.domains.list_key") => t("help.domains.list_value")
15
+ }
16
+
17
+ do_route /^do\s+domains?\s+show\s+[^\s]+$/i, :show, {
18
+ t("help.domains.show_key") => t("help.domains.show_value")
19
+ }
20
+
21
+ def create(response)
22
+ name, ip_address = response.args[2..3]
23
+
24
+ do_response = do_call(response) do |client|
25
+ client.domains.create(name: name, ip_address: ip_address)
26
+ end or return
27
+
28
+ response.reply(t("domains.create.created", do_response[:domain]))
29
+ end
30
+
31
+ def delete(response)
32
+ do_response = do_call(response) do |client|
33
+ client.domains.delete(response.args[2])
34
+ end or return
35
+
36
+ response.reply(t("domains.delete.deleted"))
37
+ end
38
+
39
+ def list(response)
40
+ do_response = do_call(response) do |client|
41
+ client.domains.list
42
+ end or return
43
+
44
+ messages = do_response[:domains].map { |domain| t("domains.list.detail", domain) }
45
+
46
+ response.reply(*messages)
47
+ end
48
+
49
+ def show(response)
50
+ do_response = do_call(response) do |client|
51
+ client.domains.show(response.args[2])
52
+ end or return
53
+
54
+ response.reply(t("domains.show.details", do_response[:domain]))
55
+ end
56
+ end
57
+
58
+ Lita.register_handler(Domain)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,99 @@
1
+ module Lita
2
+ module Handlers
3
+ class Digitalocean < Handler
4
+ class DomainRecord < Base
5
+ do_route /^do\s+domain\s+records?\s+create\s(?:[^\s]+\s+){2}[^\s]/i, :create, {
6
+ t("help.domain_records.create_key") => t("help.domain_records.create_value")
7
+ }, {
8
+ name: {},
9
+ priority: {},
10
+ port: {},
11
+ weight: {}
12
+ }
13
+
14
+ do_route /^do\s+domain\s+records?\s+delete\s+[^\s]+\s+\d+$/i, :delete, {
15
+ t("help.domain_records.delete_key") => t("help.domain_records.delete_value")
16
+ }
17
+
18
+ do_route /^do\s+domain\s+records?\s+edit\s+(?:[^\s]+\s+){3}[^\s]+/i, :edit, {
19
+ t("help.domain_records.edit_key") => t("help.domain_records.edit_value")
20
+ }, {
21
+ name: {},
22
+ priority: {},
23
+ port: {},
24
+ weight: {}
25
+ }
26
+
27
+ do_route /^do\s+domain\s+records?\s+list\s+[^\s]+$/i, :list, {
28
+ t("help.domain_records.list_key") => t("help.domain_records.list_value")
29
+ }
30
+
31
+ do_route /^do\s+domain\s+records?\s+show\s+[^\s]+\s+\d+$/i, :show, {
32
+ t("help.domain_records.show_key") => t("help.domain_records.show_value")
33
+ }
34
+
35
+ def create(response)
36
+ id, type, data = response.args[3..5]
37
+
38
+ params = {
39
+ data: data,
40
+ record_type: type
41
+ }.merge(response.extensions[:kwargs])
42
+
43
+ do_response = do_call(response) do |client|
44
+ client.domains.create_record(id, params)
45
+ end or return
46
+
47
+ response.reply(t("domain_records.create.created", do_response[:record]))
48
+ end
49
+
50
+ def delete(response)
51
+ id, record_id = response.args[3..4]
52
+
53
+ do_response = do_call(response) do |client|
54
+ client.domains.delete_record(id, record_id)
55
+ end or return
56
+
57
+ response.reply(t("domain_records.delete.deleted"))
58
+ end
59
+
60
+ def edit(response)
61
+ id, record_id, type, data = response.args[3..6]
62
+
63
+ params = {
64
+ data: data,
65
+ record_type: type
66
+ }.merge(response.extensions[:kwargs].reject { |_key, value| value.nil? })
67
+
68
+ do_response = do_call(response) do |client|
69
+ client.domains.edit_record(id, record_id, params)
70
+ end or return
71
+
72
+ response.reply(t("domain_records.edit.updated"))
73
+ end
74
+
75
+ def list(response)
76
+ do_response = do_call(response) do |client|
77
+ client.domains.list_records(response.args[3])
78
+ end or return
79
+
80
+ messages = do_response[:records].map { |record| t("domain_records.list.detail", record) }
81
+
82
+ response.reply(*messages)
83
+ end
84
+
85
+ def show(response)
86
+ id, record_id = response.args[3..4]
87
+
88
+ do_response = do_call(response) do |client|
89
+ client.domains.show_record(id, record_id)
90
+ end or return
91
+
92
+ response.reply(t("domain_records.show.details", do_response[:record]))
93
+ end
94
+ end
95
+
96
+ Lita.register_handler(DomainRecord)
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,236 @@
1
+ module Lita
2
+ module Handlers
3
+ class Digitalocean < Handler
4
+ class Droplet < Base
5
+ do_route /^do\s+droplets?\s+create(?:\s+[^\s]+){4}/i, :create, {
6
+ t("help.droplets.create_key") => t("help.droplets.create_value")
7
+ }, {
8
+ backups_enabled: { boolean: true },
9
+ private_networking: { boolean: true },
10
+ ssh_key_ids: {}
11
+ }
12
+
13
+ do_route /^do\s+droplets?\s+delete\s+\d+/i, :delete, {
14
+ t("help.droplets.delete_key") => t("help.droplets.delete_value")
15
+ }, { scrub: { boolean: true } }
16
+
17
+ do_route /^do\s+droplets?\s+list$/i, :list, {
18
+ t("help.droplets.list_key") => t("help.droplets.list_value")
19
+ }
20
+
21
+ do_route /^do\s+droplets?\s+password\s+reset\s+\d+$/i, :password_reset, {
22
+ t("help.droplets.password_reset_key") => t("help.droplets.password_reset_value")
23
+ }
24
+
25
+ do_route /^do\s+droplets?\s+power\s+cycle\s+\d+$/i, :power_cycle, {
26
+ t("help.droplets.power_cycle_key") => t("help.droplets.power_cycle_value")
27
+ }
28
+
29
+ do_route /^do\s+droplets?\s+power\s+off\s+\d+$/i, :power_off, {
30
+ t("help.droplets.power_off_key") => t("help.droplets.power_off_value")
31
+ }
32
+
33
+ do_route /^do\s+droplets?\s+power\s+on\s+\d+$/i, :power_on, {
34
+ t("help.droplets.power_on_key") => t("help.droplets.power_on_value")
35
+ }
36
+
37
+ do_route /^do\s+droplets?\s+reboot\s+\d+$/i, :reboot, {
38
+ t("help.droplets.reboot_key") => t("help.droplets.reboot_value")
39
+ }
40
+
41
+ do_route /^do\s+droplets?\s+rebuild(?:\s+\d+){2}$/i, :rebuild, {
42
+ t("help.droplets.rebuild_key") => t("help.droplets.rebuild_value")
43
+ }
44
+
45
+ do_route /^do\s+droplets?\s+resize\s+\d+\s+[^\s]+$/i, :resize, {
46
+ t("help.droplets.resize_key") => t("help.droplets.resize_value")
47
+ }
48
+
49
+ do_route /^do\s+droplets?\s+restore(?:\s+\d+){2}$/i, :restore, {
50
+ t("help.droplets.restore_key") => t("help.droplets.restore_value")
51
+ }
52
+
53
+ do_route /^do\s+droplets?\s+show\s+\d+$/i, :show, {
54
+ t("help.droplets.show_key") => t("help.droplets.show_value")
55
+ }
56
+
57
+ do_route /^do\s+droplets?\s+shut\s*down\s+(\d+)$/i, :shutdown, {
58
+ t("help.droplets.shutdown_key") => t("help.droplets.shutdown_value")
59
+ }
60
+
61
+ do_route /^do\s+droplets?\s+snapshot\s+\d+/i, :snapshot, {
62
+ t("help.droplets.snapshot_key") => t("help.droplets.snapshot_value")
63
+ }
64
+
65
+ def create(response)
66
+ name, size, image, region = response.args[2..5]
67
+ kwargs = response.extensions[:kwargs].dup
68
+ kwargs.each { |k, v| kwargs.delete(k) if v.nil? }
69
+
70
+ numeric = /^\d+$/
71
+
72
+ size_key = size =~ numeric ? :size_id : :size_slug
73
+ image_key = image =~ numeric ? :image_id : :image_slug
74
+ region_key = region =~ numeric ? :region_id : :region_slug
75
+
76
+ options = {
77
+ name: name,
78
+ size_key => size,
79
+ image_key => image,
80
+ region_key => region
81
+ }.merge(kwargs)
82
+
83
+ do_response = do_call(response) do |client|
84
+ client.droplets.create(options)
85
+ end or return
86
+
87
+ response.reply(t("droplets.create.created", do_response[:droplet]))
88
+ end
89
+
90
+ def delete(response)
91
+ id = response.args[2]
92
+ options = {}
93
+ options[:scrub_data] = true if response.extensions[:kwargs][:scrub]
94
+
95
+ do_response = do_call(response) do |client|
96
+ client.droplets.delete(id, options)
97
+ end or return
98
+
99
+ response.reply(t("droplets.delete.deleted", id: id))
100
+ end
101
+
102
+ def list(response)
103
+ do_response = do_call(response) do |client|
104
+ client.droplets.list
105
+ end or return
106
+
107
+ messages = do_response[:droplets].map { |droplet| t("droplets.list.detail", droplet) }
108
+
109
+ response.reply(*messages)
110
+ end
111
+
112
+ def password_reset(response)
113
+ id = response.args[3]
114
+
115
+ do_response = do_call(response) do |client|
116
+ client.droplets.password_reset(id)
117
+ end or return
118
+
119
+ response.reply(t("droplets.password_reset.reset", id: id))
120
+ end
121
+
122
+ def power_cycle(response)
123
+ id = response.args[3]
124
+
125
+ do_response = do_call(response) do |client|
126
+ client.droplets.power_cycle(response.args[3])
127
+ end or return
128
+
129
+ response.reply(t("droplets.power_cycle.cycled", id: id))
130
+ end
131
+
132
+ def power_off(response)
133
+ id = response.args[3]
134
+
135
+ do_response = do_call(response) do |client|
136
+ client.droplets.power_off(response.args[3])
137
+ end or return
138
+
139
+ response.reply(t("droplets.power_off.powered_off", id: id))
140
+ end
141
+
142
+ def power_on(response)
143
+ id = response.args[3]
144
+
145
+ do_response = do_call(response) do |client|
146
+ client.droplets.power_on(response.args[3])
147
+ end or return
148
+
149
+ response.reply(t("droplets.power_on.powered_on", id: id))
150
+ end
151
+
152
+ def reboot(response)
153
+ id = response.args[2]
154
+
155
+ do_response = do_call(response) do |client|
156
+ client.droplets.reboot(response.args[2])
157
+ end or return
158
+
159
+ response.reply(t("droplets.reboot.rebooted", id: id))
160
+ end
161
+
162
+ def rebuild(response)
163
+ id, image_id = response.args[2..3]
164
+
165
+ do_response = do_call(response) do |client|
166
+ client.droplets.rebuild(id, image_id: image_id)
167
+ end or return
168
+
169
+ response.reply(t("droplets.rebuild.rebuilt", id: id))
170
+ end
171
+
172
+ def resize(response)
173
+ id, size = response.args[2..3]
174
+ size_key = size =~ /^\d+$/ ? :size_id : :size_slug
175
+
176
+ do_response = do_call(response) do |client|
177
+ client.droplets.resize(id, size_key => size)
178
+ end or return
179
+
180
+ response.reply(t("droplets.resize.resized", id: id))
181
+ end
182
+
183
+ def restore(response)
184
+ id, image_id = response.args[2..3]
185
+
186
+ do_response = do_call(response) do |client|
187
+ client.droplets.restore(id, image_id: image_id)
188
+ end or return
189
+
190
+ response.reply(t("droplets.restore.restored", id: id))
191
+ end
192
+
193
+ def show(response)
194
+ do_response = do_call(response) do |client|
195
+ client.droplets.show(response.args[2])
196
+ end or return
197
+
198
+ response.reply(t("droplets.show.details", formatted_droplet(do_response[:droplet])))
199
+ end
200
+
201
+ def shutdown(response)
202
+ id = response.matches[0][0]
203
+
204
+ do_response = do_call(response) do |client|
205
+ client.droplets.shutdown(id)
206
+ end or return
207
+
208
+ response.reply(t("droplets.shutdown.shut_down", id: id))
209
+ end
210
+
211
+ def snapshot(response)
212
+ id, name = response.args[2..3]
213
+ options = {}
214
+ options[:name] = name if name
215
+
216
+ do_response = do_call(response) do |client|
217
+ client.droplets.snapshot(id, options)
218
+ end or return
219
+
220
+ response.reply(t("droplets.snapshot.snapshotted", id: id))
221
+ end
222
+
223
+ private
224
+
225
+ def formatted_droplet(droplet)
226
+ Hashie::Mash.new droplet.merge(
227
+ formatted_backups: format_array(droplet[:backups]),
228
+ formatted_snapshots: format_array(droplet[:snapshots])
229
+ )
230
+ end
231
+ end
232
+
233
+ Lita.register_handler(Droplet)
234
+ end
235
+ end
236
+ end
@@ -0,0 +1,68 @@
1
+ module Lita
2
+ module Handlers
3
+ class Digitalocean < Handler
4
+ class Image < Base
5
+ do_route /^do\s+images?\s+delete\s+([^\s]+)$/i, :delete, {
6
+ t("help.images.delete_key") => t("help.images.delete_value")
7
+ }
8
+
9
+ do_route /^do\s+images?\s+list\s*.*$/i, :list, {
10
+ t("help.images.list_key") => t("help.images.list_value")
11
+ }
12
+
13
+ do_route /^do\s+images?\s+show\s([^\s]+)$/i, :show, {
14
+ t("help.images.show_key") => t("help.images.show_value")
15
+ }
16
+
17
+ def delete(response)
18
+ image_id = response.args[2]
19
+
20
+ do_response = do_call(response) do |client|
21
+ client.images.delete(image_id)
22
+ end or return
23
+
24
+ response.reply(t("images.delete.deleted", image_id: image_id))
25
+ end
26
+
27
+ def list(response)
28
+ filter = response.args[2]
29
+ normalized_filter = filter.to_s.downcase
30
+ options = {}
31
+
32
+ if filter && %(global my_images).include?(normalized_filter)
33
+ options[:filter] = normalized_filter
34
+ end
35
+
36
+ do_response = do_call(response) do |client|
37
+ client.images.list(options)
38
+ end or return
39
+
40
+ messages = do_response[:images].map { |image| t("images.details", formatted_image(image)) }
41
+
42
+ response.reply(*messages)
43
+ end
44
+
45
+ def show(response)
46
+ image_id = response.args[2]
47
+
48
+ do_response = do_call(response) do |client|
49
+ client.images.show(image_id)
50
+ end or return
51
+
52
+ response.reply(t("images.details", formatted_image(do_response[:image])))
53
+ end
54
+
55
+ private
56
+
57
+ def formatted_image(image)
58
+ Hashie::Mash.new image.merge(
59
+ formatted_regions: format_array(image[:regions]),
60
+ formatted_region_slugs: format_array(image[:region_slugs])
61
+ )
62
+ end
63
+ end
64
+
65
+ Lita.register_handler(Image)
66
+ end
67
+ end
68
+ end