knife-scaleway 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/.rubocop.yml +11 -0
- data/Gemfile +4 -0
- data/Guardfile +8 -0
- data/LICENSE.txt +201 -0
- data/README.md +480 -0
- data/Rakefile +23 -0
- data/knife-scaleway.gemspec +36 -0
- data/lib/chef/knife/scaleway.rb +110 -0
- data/lib/chef/knife/scaleway_account_info.rb +45 -0
- data/lib/chef/knife/scaleway_base.rb +89 -0
- data/lib/chef/knife/scaleway_droplet_create.rb +338 -0
- data/lib/chef/knife/scaleway_droplet_destroy.rb +69 -0
- data/lib/chef/knife/scaleway_droplet_list.rb +54 -0
- data/lib/chef/knife/scaleway_droplet_power.rb +69 -0
- data/lib/chef/knife/scaleway_droplet_powercycle.rb +48 -0
- data/lib/chef/knife/scaleway_droplet_reboot.rb +48 -0
- data/lib/chef/knife/scaleway_droplet_rebuild.rb +61 -0
- data/lib/chef/knife/scaleway_droplet_rename.rb +58 -0
- data/lib/chef/knife/scaleway_droplet_resize.rb +58 -0
- data/lib/chef/knife/scaleway_droplet_snapshot.rb +58 -0
- data/lib/chef/knife/scaleway_image_destroy.rb +42 -0
- data/lib/chef/knife/scaleway_image_list.rb +58 -0
- data/lib/chef/knife/scaleway_ip_list.rb +46 -0
- data/lib/chef/knife/scaleway_region_list.rb +43 -0
- data/lib/chef/knife/scaleway_size_list.rb +41 -0
- data/lib/chef/knife/scaleway_volume_list.rb +48 -0
- data/lib/knife-scaleway.rb +8 -0
- data/lib/knife-scaleway/version.rb +5 -0
- metadata +269 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
#
|
13
|
+
require 'chef/knife/scaleway_base'
|
14
|
+
|
15
|
+
class Chef
|
16
|
+
class Knife
|
17
|
+
class ScalewayServerDestroy < Knife
|
18
|
+
include Knife::ScalewayBase
|
19
|
+
|
20
|
+
banner 'knife scaleway server destroy (options)'
|
21
|
+
|
22
|
+
option :server,
|
23
|
+
short: '-S ID',
|
24
|
+
long: '--server ID',
|
25
|
+
description: 'The server id'
|
26
|
+
|
27
|
+
option :all,
|
28
|
+
short: '-a',
|
29
|
+
long: '--all',
|
30
|
+
description: '!WARNING! UNRECOVERABLE Destroy all servers.'
|
31
|
+
|
32
|
+
def run
|
33
|
+
$stdout.sync = true
|
34
|
+
|
35
|
+
validate!
|
36
|
+
|
37
|
+
servers_ids = []
|
38
|
+
|
39
|
+
if locate_config_value(:server)
|
40
|
+
servers_ids = [locate_config_value(:server)]
|
41
|
+
elsif locate_config_value(:all)
|
42
|
+
ui.error('Warning all servers will be lost unless you exit with ctrl-c now!')
|
43
|
+
|
44
|
+
15.times do |x|
|
45
|
+
print x
|
46
|
+
print 13.chr
|
47
|
+
sleep 1
|
48
|
+
end
|
49
|
+
|
50
|
+
servers_ids = client.servers.all.map(&:id)
|
51
|
+
else
|
52
|
+
ui.error 'You need to specify either a --server id or --all'
|
53
|
+
exit 1
|
54
|
+
end
|
55
|
+
|
56
|
+
if servers_ids.empty?
|
57
|
+
ui.error('Could not find any server(s)')
|
58
|
+
exit 1
|
59
|
+
end
|
60
|
+
|
61
|
+
servers_ids.each do |id|
|
62
|
+
ui.info "Delete server with id: #{id}"
|
63
|
+
result = client.servers.delete(id: id)
|
64
|
+
ui.info 'OK' if result == true || ui.error(JSON.parse(result)['message'])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
#
|
13
|
+
require 'chef/knife/scaleway_base'
|
14
|
+
|
15
|
+
class Chef
|
16
|
+
class Knife
|
17
|
+
class ScalewayServerList < Knife
|
18
|
+
include Knife::ScalewayBase
|
19
|
+
|
20
|
+
banner 'knife scaleway server list (options)'
|
21
|
+
|
22
|
+
def run
|
23
|
+
$stdout.sync = true
|
24
|
+
|
25
|
+
validate!
|
26
|
+
|
27
|
+
server_list = [
|
28
|
+
ui.color('ID', :bold),
|
29
|
+
ui.color('Name', :bold),
|
30
|
+
ui.color('Size', :bold),
|
31
|
+
ui.color('Region', :bold),
|
32
|
+
ui.color('IPv4', :bold),
|
33
|
+
ui.color('Image', :bold),
|
34
|
+
ui.color('Status', :bold)
|
35
|
+
]
|
36
|
+
servers = Scaleway::Server.all
|
37
|
+
|
38
|
+
servers.each do |server|
|
39
|
+
ip = server.public_ip ? server.public_ip.address.to_s : ''.to_s
|
40
|
+
|
41
|
+
server_list << server.id.to_s
|
42
|
+
server_list << server.name.to_s
|
43
|
+
server_list << '?' # server.size_slug.to_s
|
44
|
+
server_list << 'fr-1' # server.region.name.to_s
|
45
|
+
server_list << ip
|
46
|
+
server_list << server.image.name.to_s
|
47
|
+
server_list << server.state.to_s
|
48
|
+
end
|
49
|
+
|
50
|
+
puts ui.list(server_list, :uneven_columns_across, 7)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
#
|
13
|
+
require 'chef/knife/scaleway_base'
|
14
|
+
|
15
|
+
class Chef
|
16
|
+
class Knife
|
17
|
+
class ScalewayServerPower < Knife
|
18
|
+
include Knife::ScalewayBase
|
19
|
+
|
20
|
+
banner 'knife scaleway server power (options)'
|
21
|
+
|
22
|
+
option :action,
|
23
|
+
short: '-a ACTION',
|
24
|
+
long: '--action ACTION',
|
25
|
+
description: 'Power Action On/Off'
|
26
|
+
|
27
|
+
option :id,
|
28
|
+
short: '-I ID',
|
29
|
+
long: '--server-id ID',
|
30
|
+
description: 'Droplet ID'
|
31
|
+
|
32
|
+
def run
|
33
|
+
$stdout.sync = true
|
34
|
+
|
35
|
+
validate!
|
36
|
+
|
37
|
+
unless locate_config_value(:action)
|
38
|
+
ui.error('Action cannot be empty. => -a <action>')
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
unless locate_config_value(:id)
|
43
|
+
ui.error('ID cannot be empty. => -I <id>')
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
|
47
|
+
case locate_config_value(:action)
|
48
|
+
when /(on)/i
|
49
|
+
poweron = true
|
50
|
+
result = Scaleway::Server.action(locate_config_value(:id), 'poweron')
|
51
|
+
when /(off)/i
|
52
|
+
poweroff = true
|
53
|
+
result = Scaleway::Server.action(locate_config_value(:id), 'poweroff')
|
54
|
+
else
|
55
|
+
ui.error 'Bad Action: Use on/off.'
|
56
|
+
exit 1
|
57
|
+
end
|
58
|
+
|
59
|
+
unless result.task.description
|
60
|
+
#ui.error JSON.parse(result)['message']
|
61
|
+
exit 1
|
62
|
+
end
|
63
|
+
|
64
|
+
wait_for_status(result, status: 'running') if poweron
|
65
|
+
wait_for_status(result, status: 'stopped') if poweroff
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
#
|
13
|
+
require 'chef/knife/scaleway_base'
|
14
|
+
|
15
|
+
class Chef
|
16
|
+
class Knife
|
17
|
+
class ScalewayServerPowercycle < Knife
|
18
|
+
include Knife::ScalewayBase
|
19
|
+
|
20
|
+
banner 'knife scaleway server powercycle (options)'
|
21
|
+
|
22
|
+
option :id,
|
23
|
+
short: '-I ID',
|
24
|
+
long: '--server-id ID',
|
25
|
+
description: 'Droplet ID'
|
26
|
+
|
27
|
+
def run
|
28
|
+
$stdout.sync = true
|
29
|
+
|
30
|
+
validate!
|
31
|
+
|
32
|
+
unless locate_config_value(:id)
|
33
|
+
ui.error('ID cannot be empty. => -I <id>')
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
|
37
|
+
result = client.server_actions.power_cycle(server_id: locate_config_value(:id))
|
38
|
+
|
39
|
+
unless result.class == DropletKit::Action
|
40
|
+
ui.error JSON.parse(result)['message']
|
41
|
+
exit 1
|
42
|
+
end
|
43
|
+
|
44
|
+
wait_for_status(result, status: 'active')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
#
|
13
|
+
require 'chef/knife/scaleway_base'
|
14
|
+
|
15
|
+
class Chef
|
16
|
+
class Knife
|
17
|
+
class ScalewayServerReboot < Knife
|
18
|
+
include Knife::ScalewayBase
|
19
|
+
|
20
|
+
banner 'knife scaleway server reboot (options)'
|
21
|
+
|
22
|
+
option :id,
|
23
|
+
short: '-I ID',
|
24
|
+
long: '--server-id ID',
|
25
|
+
description: 'Droplet ID'
|
26
|
+
|
27
|
+
def run
|
28
|
+
$stdout.sync = true
|
29
|
+
|
30
|
+
validate!
|
31
|
+
|
32
|
+
unless locate_config_value(:id)
|
33
|
+
ui.error('ID cannot be empty. => -I <id>')
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
|
37
|
+
result = client.server_actions.reboot(server_id: locate_config_value(:id))
|
38
|
+
|
39
|
+
unless result.class == DropletKit::Action
|
40
|
+
ui.error JSON.parse(result)['message']
|
41
|
+
exit 1
|
42
|
+
end
|
43
|
+
|
44
|
+
wait_for_status(result)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
#
|
13
|
+
require 'chef/knife/scaleway_base'
|
14
|
+
|
15
|
+
class Chef
|
16
|
+
class Knife
|
17
|
+
class ScalewayServerRebuild < Knife
|
18
|
+
include Knife::ScalewayBase
|
19
|
+
|
20
|
+
banner 'knife scaleway server rebuild (options)'
|
21
|
+
|
22
|
+
option :image,
|
23
|
+
short: '-i IMAGE',
|
24
|
+
long: '--image-id IMAGE',
|
25
|
+
description: 'Image ID'
|
26
|
+
|
27
|
+
option :id,
|
28
|
+
short: '-I ID',
|
29
|
+
long: '--server-id ID',
|
30
|
+
description: 'Droplet ID'
|
31
|
+
|
32
|
+
def run
|
33
|
+
$stdout.sync = true
|
34
|
+
|
35
|
+
validate!
|
36
|
+
|
37
|
+
unless locate_config_value(:image)
|
38
|
+
ui.error('Image ID cannot be empty. => -i <image-id>')
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
unless locate_config_value(:id)
|
43
|
+
ui.error('ID cannot be empty. => -I <id>')
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
|
47
|
+
result = client.server_actions.rebuild(
|
48
|
+
server_id: locate_config_value(:id),
|
49
|
+
image: locate_config_value(:image)
|
50
|
+
)
|
51
|
+
|
52
|
+
unless result.class == DropletKit::Action
|
53
|
+
ui.error JSON.parse(result)['message']
|
54
|
+
exit 1
|
55
|
+
end
|
56
|
+
|
57
|
+
wait_for_status(result, status: 'active')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
#
|
13
|
+
require 'chef/knife/scaleway_base'
|
14
|
+
|
15
|
+
class Chef
|
16
|
+
class Knife
|
17
|
+
class ScalewayServerRename < Knife
|
18
|
+
include Knife::ScalewayBase
|
19
|
+
|
20
|
+
banner 'knife scaleway server rename (options)'
|
21
|
+
|
22
|
+
option :name,
|
23
|
+
short: '-N NAME',
|
24
|
+
long: '--server-name NAME',
|
25
|
+
description: 'Name of server'
|
26
|
+
|
27
|
+
option :id,
|
28
|
+
short: '-I ID',
|
29
|
+
long: '--server-id ID',
|
30
|
+
description: 'Droplet ID'
|
31
|
+
|
32
|
+
def run
|
33
|
+
$stdout.sync = true
|
34
|
+
|
35
|
+
validate!
|
36
|
+
|
37
|
+
unless locate_config_value(:name)
|
38
|
+
ui.error('Name cannot be empty. => -N <name>')
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
unless locate_config_value(:id)
|
43
|
+
ui.error('ID cannot be empty. => -I <id>')
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
|
47
|
+
result = client.server_actions.rename(server_id: locate_config_value(:id), name: locate_config_value(:name))
|
48
|
+
|
49
|
+
unless result.class == DropletKit::Action
|
50
|
+
ui.error JSON.parse(result)['message']
|
51
|
+
exit 1
|
52
|
+
end
|
53
|
+
|
54
|
+
wait_for_status(result)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
#
|
13
|
+
require 'chef/knife/scaleway_base'
|
14
|
+
|
15
|
+
class Chef
|
16
|
+
class Knife
|
17
|
+
class ScalewayServerResize < Knife
|
18
|
+
include Knife::ScalewayBase
|
19
|
+
|
20
|
+
banner 'knife scaleway server resize (options)'
|
21
|
+
|
22
|
+
option :size,
|
23
|
+
short: '-s SIZE',
|
24
|
+
long: '--size SIZE',
|
25
|
+
description: 'Power Action On/Off'
|
26
|
+
|
27
|
+
option :id,
|
28
|
+
short: '-I ID',
|
29
|
+
long: '--server-id ID',
|
30
|
+
description: 'Droplet ID'
|
31
|
+
|
32
|
+
def run
|
33
|
+
$stdout.sync = true
|
34
|
+
|
35
|
+
validate!
|
36
|
+
|
37
|
+
unless locate_config_value(:size)
|
38
|
+
ui.error('Size cannot be empty. => -s <size>')
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
unless locate_config_value(:id)
|
43
|
+
ui.error('ID cannot be empty. => -I <id>')
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
|
47
|
+
result = client.server_actions.resize(server_id: locate_config_value(:id), size: locate_config_value(:size))
|
48
|
+
|
49
|
+
unless result.class == DropletKit::Action
|
50
|
+
ui.error JSON.parse(result)['message']
|
51
|
+
exit 1
|
52
|
+
end
|
53
|
+
|
54
|
+
wait_for_status(result)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|