ubuntu_ami 0.1 → 0.4.3

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,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6ea459dc455e28a1196699035bd176a151786f8f6676b3090251fa9a96e3de3f
4
+ data.tar.gz: f5b91294c206dd5d1fba6089e99c047c45b7a9cb608b6cd405fd2b185cf858b3
5
+ SHA512:
6
+ metadata.gz: 59a22938260ec46e3e2862c3e9e0fd90eaf113d4342aca98149a247bb1676e65ca581ebdcab7bc3bc511c126f7b76c274e03d63db8ebdb9692ea80b61040944d
7
+ data.tar.gz: 111894541f28127c505c9a25a85cef92d5f475cba0afdd947d68a320fe0688ad44254c08ca29f021e491f7fff724c10a9ba05d20cb91d453c3bf0aea51eb09db
@@ -0,0 +1,128 @@
1
+ #
2
+ # Author:: Joshua Timberman (<joshua@housepub.org>)
3
+ # Description:: Retrieves AMI information from Canonical's AMI release list.
4
+ #
5
+ # Copyright:: 2011, Joshua Timberman
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require 'chef/knife'
20
+
21
+ module KnifePlugins
22
+ class Ec2AmisUbuntu < Chef::Knife
23
+
24
+ deps do
25
+ begin
26
+ require 'ubuntu_ami'
27
+ rescue LoadError
28
+ Chef::Log.error("Could not load Ubuntu AMI library.")
29
+ end
30
+ end
31
+
32
+ banner "knife ec2 amis ubuntu DISTRO [TYPE] (options)"
33
+
34
+ # Substitutes dashes for underscores in region portion of type for
35
+ # nice display. Replaces "1" as implied for most regions.
36
+ #
37
+ # === Parameters
38
+ # region<String>:: comes from Ubuntu::Ami#region
39
+ #
40
+ # === Returns
41
+ # String:: e.g., us_east_small or us_east_small_ebs
42
+ def region_fix(region)
43
+ region.gsub(/-1/,'').gsub(/-/,'_')
44
+ end
45
+
46
+ # Identifies the virtualization type as HVM if image is HVM.
47
+ #
48
+ # === Parameters
49
+ # type<String>:: comes from Ubuntu::Ami#virtualization_type
50
+ #
51
+ # === Returns
52
+ # String:: "_hvm" if the #virtualization_type is HVM, otherwise empty.
53
+ def virt_type(type)
54
+ type =~ /hvm/ ? "_hvm" : ''
55
+ end
56
+
57
+ # Indicates whether a particular image has EBS root volume.
58
+ #
59
+ # === Parameters
60
+ # store<String>:: comes from Ubuntu::Ami#root_store
61
+ #
62
+ # === Returns
63
+ # String:: "_ebs" if the #root_store is EBS, _ebs_ssd if ebs-ssd,
64
+ # _ebs_io1 if provisioned IOPS, etc. Otherwise empty.
65
+ def disk_store(store)
66
+ if store =~ /ebs/
67
+ "_#{store.tr('-', '_')}"
68
+ else
69
+ ''
70
+ end
71
+ end
72
+
73
+ # Indicates whether the architecture type is a large or small AMI.
74
+ #
75
+ # === Parameters
76
+ # arch<String>:: Values can be amd64, x86_64, large, or begin with
77
+ # "64". Intended to be from Ubuntu::Ami#arch, but this method
78
+ # move to Ubuntu directly.
79
+ #
80
+ # === Returns
81
+ # String:: For 64 bit architectures (Ubuntu::Ami#arch #=> amd64),
82
+ # this will return "large". Otherwise, it returns "small".
83
+ def size_of(arch)
84
+ String(arch) =~ /(amd64|x86_64|large|^64)/ ? "large" : "small"
85
+ end
86
+
87
+ # Makes a nice string for the type of AMI to display, including
88
+ # the region, architecture size and whether the AMI has EBS root
89
+ # store.
90
+ #
91
+ # === Parameters
92
+ # region<String>:: from Ubuntu::Ami#region
93
+ # arch<String>:: from Ubuntu::Ami#arch
94
+ # root_store<String>:: from Ubuntu::Ami#root_store
95
+ #
96
+ # === Returns
97
+ # String:: The region, arch and root_store (if EBS) concatenated
98
+ # with underscore (_).
99
+ def build_type(region, arch, root_store, type)
100
+ "#{region_fix(region)}_#{size_of(arch)}#{disk_store(root_store)}#{virt_type(type)}"
101
+ end
102
+
103
+ # Iterates over the AMIs available for the specified distro.
104
+ #
105
+ # === Parameters
106
+ # distro<String>:: Release name of the distro to display.
107
+ #
108
+ # === Returns
109
+ # Hash:: Keys are the AMI type, values are the AMI ID.
110
+ def list_amis(distro)
111
+ amis = Hash.new
112
+ Ubuntu.release(distro).amis.each do |ami|
113
+ amis[build_type(ami.region, ami.arch, ami.root_store, ami.virtualization_type)] = ami.name
114
+ end
115
+ amis
116
+ end
117
+
118
+ # Runs the plugin. If TYPE (name_args[1]) is passed, then select a
119
+ # specified type, based on #build_type, above.
120
+ def run
121
+ distro = name_args[0]
122
+ type = name_args[1]
123
+ ami_list = list_amis(distro)[type] || list_amis(distro)
124
+ output(format_for_display(ami_list))
125
+ end
126
+
127
+ end
128
+ end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Author:: Joshua Timberman (<joshua@opscode.com>)
2
+ # Author:: Joshua Timberman (<joshua@housepub.org>), Michael Hale (<mike@hales.ws>)
3
3
  # Description:: Retrieves AMI information from Canonical's AMI release list.
4
4
  #
5
5
  # Copyright:: 2011, Joshua Timberman
@@ -16,33 +16,73 @@
16
16
  # See the License for the specific language governing permissions and
17
17
  # limitations under the License.
18
18
 
19
- require 'pp'
20
19
  require 'open-uri'
21
20
 
22
- class UbuntuAmi
23
- def initialize(release)
24
- @uri = "http://uec-images.ubuntu.com/query/#{release}/server/released.current.txt"
21
+ class Ubuntu
22
+ attr_reader :release_name
23
+
24
+ def self.release(release_name)
25
+ instance_for_release(release_name)
26
+ end
27
+
28
+ def self.instance_for_release(release_name)
29
+ @releases ||= {}
30
+ @releases[release_name] ||= new(release_name)
31
+ end
32
+
33
+ def initialize(release_name)
34
+ @release_name = release_name
25
35
  end
26
36
 
27
- def arch_size(arch)
28
- arch =~ /amd64/ ? "large" : "small"
37
+ # Map the output from Canonical's image list.
38
+ #
39
+ # === Returns
40
+ # Array:: An array of Ubuntu::Ami objects.
41
+ def amis
42
+ content.map do |line|
43
+ Ami.new(
44
+ line.split[7],
45
+ line.split[4],
46
+ line.split[5],
47
+ line.split[6],
48
+ line.split[8..9].last)
49
+ end
29
50
  end
30
51
 
31
- def disk_store(store)
32
- "_ebs" if store =~ /ebs/
52
+ # The URL of Canonical's current released AMIs for the given
53
+ # release.
54
+ #
55
+ # Visit "http://uec-images.ubuntu.com/query" to get a list of
56
+ # available releases.
57
+ #
58
+ # === Returns
59
+ # String:: The full URL to the released AMIs.
60
+ def url
61
+ "http://uec-images.ubuntu.com/query/#{release_name}/server/released.current.txt"
33
62
  end
34
63
 
35
- def region_fix(region)
36
- region.gsub(/-1/,'').gsub(/-/,'_')
64
+ # Reads the URL for processing.
65
+ # === Exception
66
+ # Raises an exception if the release name was not specified or was
67
+ # not found.
68
+ def content
69
+ begin
70
+ @content ||= ::OpenURI.open_uri(url).read.split("\n")
71
+ rescue
72
+ raise "Could not find AMI list for distro release '#{release_name}', did you specify it correctly? (e.g., 'lucid')"
73
+ end
37
74
  end
38
75
 
39
- def run
40
- amis = {}
41
- open(@uri).each do |a|
42
- key = a.split[4..6]
43
- ami = a.split[7]
44
- amis["#{region_fix(key[2])}_#{arch_size(key[1])}#{disk_store(key[0])}"] = ami
76
+ # Provides accessors for the properties of the AMI list.
77
+ class Ami
78
+ attr_reader :name, :root_store, :arch, :region, :virtualization_type
79
+
80
+ def initialize(name, root_store, arch, region, virtualization_type)
81
+ @name = name
82
+ @root_store = root_store
83
+ @arch = arch
84
+ @region = region
85
+ @virtualization_type = virtualization_type
45
86
  end
46
- amis
47
87
  end
48
88
  end
@@ -0,0 +1,22 @@
1
+ # Author:: Joshua Timberman (<joshua@housepub.org>)
2
+ # Description:: Retrieves AMI information from Canonical's AMI release list.
3
+ #
4
+ # Copyright:: 2011, Joshua Timberman
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ class Ubuntu
19
+ class Ami
20
+ VERSION = '0.4.3'
21
+ end
22
+ end
metadata CHANGED
@@ -1,65 +1,47 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ubuntu_ami
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- version: "0.1"
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.3
9
5
  platform: ruby
10
- authors:
6
+ authors:
11
7
  - Joshua Timberman
12
- autorequire:
8
+ autorequire:
13
9
  bindir: bin
14
10
  cert_chain: []
15
-
16
- date: 2011-01-27 00:00:00 -07:00
17
- default_executable:
11
+ date: 2020-08-18 00:00:00.000000000 Z
18
12
  dependencies: []
19
-
20
- description: Retrieves AMI information from Canonical's Ubuntu release list.
21
- email: joshua@opscode.com
13
+ description: Retrieves AMI information from Canonical's Ubuntu release list.Also provides
14
+ a knife plugin to retrieve the list.
15
+ email: joshua@chef.io
22
16
  executables: []
23
-
24
17
  extensions: []
25
-
26
18
  extra_rdoc_files: []
27
-
28
- files:
19
+ files:
29
20
  - LICENSE
30
- - README.md
21
+ - lib/chef/knife/ec2_amis_ubuntu.rb
31
22
  - lib/ubuntu_ami.rb
32
- has_rdoc: true
33
- homepage: http://github.com/jtimberman/ubuntu_ami
34
- licenses: []
35
-
36
- post_install_message:
23
+ - lib/ubuntu_ami/version.rb
24
+ homepage: https://github.com/jtimberman/ubuntu_ami
25
+ licenses:
26
+ - Apache-2.0
27
+ metadata: {}
28
+ post_install_message:
37
29
  rdoc_options: []
38
-
39
- require_paths:
30
+ require_paths:
40
31
  - lib
41
- required_ruby_version: !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
44
34
  - - ">="
45
- - !ruby/object:Gem::Version
46
- segments:
47
- - 0
48
- version: "0"
49
- required_rubygems_version: !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
52
39
  - - ">="
53
- - !ruby/object:Gem::Version
54
- segments:
55
- - 0
56
- version: "0"
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
57
42
  requirements: []
58
-
59
- rubyforge_project:
60
- rubygems_version: 1.3.7
61
- signing_key:
62
- specification_version: 3
43
+ rubygems_version: 3.1.2
44
+ signing_key:
45
+ specification_version: 4
63
46
  summary: Retrieves AMI information from Canonical's Ubuntu release list.
64
47
  test_files: []
65
-
data/README.md DELETED
File without changes