egon 0.4.8 → 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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MGNhYmJkNjMxMWQ0ZWVlOWVjMTQxNDI5Y2ZiNWI2OTZlYWZjMjZlYQ==
4
+ NjY5YTQ1NjU5ZjNkZTU0Nzg3NzExMTQ5NjI5YzRmNzNmN2Y3OTYxNA==
5
5
  data.tar.gz: !binary |-
6
- MGJjODRiZjVjYzE3ZGZhZDc4YWNkNTQzMGJlOGNjNjk1MzAwZTg3MQ==
6
+ YzM2MjEyMTI0ZmI1MDZkN2ZkZTliYmQ0Y2Q3NGQ0YjlkOGUxMjQzYQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDE3ZjFiNjJlODMwM2ZlZmM4ZjdmMWY5ZWIxNjcyNjA0MmM0Mjc1ZDFjOTZh
10
- MGY2NDllMjQ0NDE4YTY1ZDI1NzMwMjQxZDliMjEzZjQ2NWVmYTRhMDZhYzZh
11
- ODdiZWQwNzI3NzFjYWYwOTliOTAyNTQ5NWFjYzM4MzdhYTBlNGI=
9
+ MWJmMjQyMmIwYjVlODY2MzNmMzk2ZDZlOGFhMTcxYjVkOTM0ODg1NDQwMjJl
10
+ OWRiNzBjOGZmNzdmNDVkZThiYmJhNmI3YWM2MWM3N2NiZjRmNDllOTEyMzk4
11
+ Mjc0Y2U0NGZhYmU2M2RlOTJkOWMzNGRmMzhiOTdiM2QwYWVkN2U=
12
12
  data.tar.gz: !binary |-
13
- MDQwNGQ4Yjk1ZmUyNTBmNGI0ZjRjNTk3NTUxOTQ2NTBlODMwZGNhNzY2ODdh
14
- MWE3MjM5MWUzZTVkYTc4NzdiNjVjODU0NmU0OTU1YmQzZjQyMGU1ZGJhMjRh
15
- MTQ2NjE5NWU3ZjE3NzY4ZTdlYTI0ZWUwNjY5NzUwYWE5ZjczNTA=
13
+ MmYwODFlNzA0ZGUyNTQyNWQyY2JiNzcxNTNhMWYwMjYxZDFjN2ExZDY3ZTcy
14
+ OWEyMmMwYTM3YzEwMGRiM2I2MmYxYWM1YTQxZjg2Mjc2YmI4ZmQ1ODJlZmYy
15
+ ZDYyMWQ5MDJmZTgyNjI5Yjk1ZDJlMzIxODA0ZmE0MWYyZWJiODU=
data/Gemfile.lock ADDED
@@ -0,0 +1,144 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ egon (0.4.4)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ CFPropertyList (2.3.1)
10
+ builder (3.2.2)
11
+ diff-lcs (1.2.5)
12
+ excon (0.45.3)
13
+ fission (0.5.0)
14
+ CFPropertyList (~> 2.2)
15
+ fog (1.36.0)
16
+ fog-atmos
17
+ fog-aws (~> 0.0)
18
+ fog-brightbox (~> 0.4)
19
+ fog-core (~> 1.30)
20
+ fog-ecloud
21
+ fog-google (>= 0.0.2)
22
+ fog-json
23
+ fog-local
24
+ fog-powerdns (>= 0.1.1)
25
+ fog-profitbricks
26
+ fog-radosgw (>= 0.0.2)
27
+ fog-riakcs
28
+ fog-sakuracloud (>= 0.0.4)
29
+ fog-serverlove
30
+ fog-softlayer
31
+ fog-storm_on_demand
32
+ fog-terremark
33
+ fog-vmfusion
34
+ fog-voxel
35
+ fog-xml (~> 0.1.1)
36
+ ipaddress (~> 0.5)
37
+ nokogiri (~> 1.5, >= 1.5.11)
38
+ fog-atmos (0.1.0)
39
+ fog-core
40
+ fog-xml
41
+ fog-aws (0.4.0)
42
+ fog-core (~> 1.27)
43
+ fog-json (~> 1.0)
44
+ fog-xml (~> 0.1)
45
+ ipaddress (~> 0.8)
46
+ fog-brightbox (0.7.1)
47
+ fog-core (~> 1.22)
48
+ fog-json
49
+ inflecto (~> 0.0.2)
50
+ fog-core (1.30.0)
51
+ builder
52
+ excon (~> 0.45)
53
+ formatador (~> 0.2)
54
+ mime-types
55
+ net-scp (~> 1.1)
56
+ net-ssh (>= 2.1.3)
57
+ fog-ecloud (0.1.2)
58
+ fog-core
59
+ fog-xml
60
+ fog-google (0.0.5)
61
+ fog-core
62
+ fog-json
63
+ fog-xml
64
+ fog-json (1.0.2)
65
+ fog-core (~> 1.0)
66
+ multi_json (~> 1.10)
67
+ fog-local (0.2.1)
68
+ fog-core (~> 1.27)
69
+ fog-powerdns (0.1.1)
70
+ fog-core (~> 1.27)
71
+ fog-json (~> 1.0)
72
+ fog-xml (~> 0.1)
73
+ fog-profitbricks (0.0.3)
74
+ fog-core
75
+ fog-xml
76
+ nokogiri
77
+ fog-radosgw (0.0.4)
78
+ fog-core (>= 1.21.0)
79
+ fog-json
80
+ fog-xml (>= 0.0.1)
81
+ fog-riakcs (0.1.0)
82
+ fog-core
83
+ fog-json
84
+ fog-xml
85
+ fog-sakuracloud (1.0.1)
86
+ fog-core
87
+ fog-json
88
+ fog-serverlove (0.1.2)
89
+ fog-core
90
+ fog-json
91
+ fog-softlayer (0.4.6)
92
+ fog-core
93
+ fog-json
94
+ fog-storm_on_demand (0.1.1)
95
+ fog-core
96
+ fog-json
97
+ fog-terremark (0.1.0)
98
+ fog-core
99
+ fog-xml
100
+ fog-vmfusion (0.1.0)
101
+ fission
102
+ fog-core
103
+ fog-voxel (0.1.0)
104
+ fog-core
105
+ fog-xml
106
+ fog-xml (0.1.2)
107
+ fog-core
108
+ nokogiri (~> 1.5, >= 1.5.11)
109
+ formatador (0.2.5)
110
+ inflecto (0.0.2)
111
+ ipaddress (0.8.0)
112
+ mime-types (2.6.1)
113
+ mini_portile (0.6.2)
114
+ multi_json (1.11.0)
115
+ net-scp (1.2.1)
116
+ net-ssh (>= 2.6.5)
117
+ net-ssh (2.9.2)
118
+ nokogiri (1.6.6.2)
119
+ mini_portile (~> 0.6.0)
120
+ rake (10.4.2)
121
+ rspec (3.2.0)
122
+ rspec-core (~> 3.2.0)
123
+ rspec-expectations (~> 3.2.0)
124
+ rspec-mocks (~> 3.2.0)
125
+ rspec-core (3.2.3)
126
+ rspec-support (~> 3.2.0)
127
+ rspec-expectations (3.2.1)
128
+ diff-lcs (>= 1.2.0, < 2.0)
129
+ rspec-support (~> 3.2.0)
130
+ rspec-mocks (3.2.1)
131
+ diff-lcs (>= 1.2.0, < 2.0)
132
+ rspec-support (~> 3.2.0)
133
+ rspec-support (3.2.2)
134
+
135
+ PLATFORMS
136
+ ruby
137
+
138
+ DEPENDENCIES
139
+ bundler (~> 1.7)
140
+ egon!
141
+ fog (~> 1.31.0)
142
+ net-ssh (~> 2.9.2)
143
+ rake (~> 10.0)
144
+ rspec (~> 3.2.0)
@@ -1,17 +1,56 @@
1
1
  #!/bin/bash
2
2
 
3
+ OVERCLOUD_NAME=${1:-overcloud}
4
+ TEMPLATE_DIR=`mktemp -d`
5
+ DEFAULT_PARAMETERS=overcloud-resource-registry-puppet.yaml
6
+ USER_PARAMETERS=environments/deployment_parameters.yaml
7
+
3
8
  source /home/stack/stackrc
4
- source /home/stack/tripleo-overcloud-passwords
5
9
 
6
- KEYSTONE_IP=`heat output-show overcloud KeystoneAdminVip | tr -d '"'`
7
- PUBLIC_IP=`heat output-show overcloud PublicVip | tr -d '"'`
8
- OVERCLOUD_ENDPOINT=`heat output-show overcloud KeystoneURL`
9
- OVERCLOUD_IP=`python -c "from six.moves.urllib.parse import urlparse; print urlparse($OVERCLOUD_ENDPOINT).hostname"`
10
- OVERCLOUD_ENDPOINT=`echo $OVERCLOUD_ENDPOINT | tr -d '"'`
10
+ cd $TEMPLATE_DIR
11
+ swift download overcloud $DEFAULT_PARAMETERS
12
+ swift download overcloud $USER_PARAMETERS
13
+
14
+ function parameter_value_from_file {
15
+ PARAM=$1
16
+ FILE=$2
17
+ PARAM_GREP="^ ${PARAM}: "
18
+ PARAM_VALUE_UNPARSED=`grep "$PARAM_GREP" $FILE`
19
+ PARAM_VALUE=${PARAM_VALUE_UNPARSED#*:}
20
+ echo $PARAM_VALUE
21
+ }
22
+
23
+ function parameter_value {
24
+ PARAM=$1
25
+ PARAM_VALUE=`parameter_value_from_file $PARAM $TEMPLATE_DIR/$USER_PARAMETERS`
26
+
27
+ if [ -z "$PARAM_VALUE" ]; then
28
+ PARAM_VALUE=`parameter_value_from_file $PARAM $TEMPLATE_DIR/$DEFAULT_PARAMETERS`
29
+ fi
30
+
31
+ echo $PARAM_VALUE
32
+ }
33
+
34
+ KEYSTONE_IP=`heat output-show $OVERCLOUD_NAME KeystoneAdminVip | tr -d '"'`
35
+ PUBLIC_IP=`heat output-show $OVERCLOUD_NAME PublicVip | tr -d '"'`
36
+ KEYSTONE_URL=`heat output-show $OVERCLOUD_NAME KeystoneURL`
37
+ OVERCLOUD_IP=`python -c "from six.moves.urllib.parse import urlparse; print urlparse($KEYSTONE_URL).hostname"`
38
+ OVERCLOUD_ENDPOINT=`echo $KEYSTONE_URL | tr -d '"'`
11
39
 
12
40
  # set it to the same as overcloud_ip if empty
13
41
  [ -z "$KEYSTONE_IP" ] && KEYSTONE_IP=$OVERCLOUD_IP
14
42
 
43
+ # get service passwords
44
+ OVERCLOUD_ADMIN_PASSWORD=`parameter_value AdminPassword`
45
+ OVERCLOUD_ADMIN_TOKEN=`parameter_value AdminToken`
46
+ OVERCLOUD_CEILOMETER_PASSWORD=`parameter_value CeilometerPassword`
47
+ OVERCLOUD_CINDER_PASSWORD=`parameter_value CinderPassword`
48
+ OVERCLOUD_GLANCE_PASSWORD=`parameter_value GlancePassword`
49
+ OVERCLOUD_HEAT_PASSWORD=`parameter_value HeatPassword`
50
+ OVERCLOUD_NEUTRON_PASSWORD=`parameter_value NeutronPassword`
51
+ OVERCLOUD_NOVA_PASSWORD=`parameter_value NovaPassword`
52
+ OVERCLOUD_SWIFT_PASSWORD=`parameter_value SwiftPassword`
53
+
15
54
  # Write overcloudrc
16
55
  su - stack -c cat > /home/stack/overcloudrc << EOF
17
56
  export NOVA_VERSION=1.1
@@ -50,7 +89,6 @@ cat > $ENDPOINTS_FILE << EOF
50
89
  "heat": {"password": "$OVERCLOUD_HEAT_PASSWORD"},
51
90
  "neutron": {"password": "$OVERCLOUD_NEUTRON_PASSWORD"},
52
91
  "nova": {"password": "$OVERCLOUD_NOVA_PASSWORD"},
53
- "novav3": {"password": "$OVERCLOUD_NOVA_PASSWORD"},
54
92
  "swift": {"password": "$OVERCLOUD_SWIFT_PASSWORD"},
55
93
  "horizon": {
56
94
  "port": "80",
@@ -62,4 +100,7 @@ EOF
62
100
 
63
101
  # set up the endpoints
64
102
  setup-endpoints -s $ENDPOINTS_FILE -r regionOne
103
+
104
+ # cleanup
65
105
  rm -f $ENDPOINTS_FILE
106
+ rm -rf $TEMPLATE_DIR
@@ -3,5 +3,5 @@ require 'egon/undercloud/commands'
3
3
  require 'egon/undercloud/installer'
4
4
 
5
5
  installer = Egon::Undercloud::Installer.new
6
- installer.install(Egon::Undercloud::Commands.OSP7_no_registration)
6
+ installer.install(Egon::Undercloud::Commands.OSP8_no_registration)
7
7
  installer.check_ports
@@ -15,7 +15,7 @@ SATELLITE_ACTIVATION_KEY = ARGV[5]
15
15
 
16
16
  connection = Egon::Undercloud::SSHConnection.new(SSH_HOST, SSH_USER, SSH_PASSWORD)
17
17
  installer = Egon::Undercloud::Installer.new(connection)
18
- installer.install(Egon::Undercloud::Commands.OSP7_satellite(SATELLITE_URL, SATELLITE_ORG, SATELLITE_ACTIVATION_KEY))
18
+ installer.install(Egon::Undercloud::Commands.OSP8_satellite(SATELLITE_URL, SATELLITE_ORG, SATELLITE_ACTIVATION_KEY))
19
19
  while !installer.completed?
20
20
  sleep 1
21
21
  end
@@ -13,7 +13,7 @@ RHSM_POOL_ID = ARGV[5]
13
13
 
14
14
  connection = Egon::Undercloud::SSHConnection.new(SSH_HOST, SSH_USER, SSH_PASSWORD)
15
15
  installer = Egon::Undercloud::Installer.new(connection)
16
- installer.install(Egon::Undercloud::Commands.OSP7_vanilla_rhel(RHSM_USER, RHSM_PASSWORD, RHSM_POOL_ID))
16
+ installer.install(Egon::Undercloud::Commands.OSP8_vanilla_rhel(RHSM_USER, RHSM_PASSWORD, RHSM_POOL_ID))
17
17
  while !installer.completed?
18
18
  sleep 1
19
19
  end
data/egon.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
 
25
25
  s.add_development_dependency "bundler", "~> 1.7"
26
26
  s.add_development_dependency "rake", "~> 10.0"
27
- s.add_development_dependency "fog", "~> 1.31.0"
27
+ s.add_development_dependency "fog", "~> 1.36.0"
28
28
  s.add_development_dependency "net-ssh", "~> 2.9.2"
29
29
  s.add_development_dependency "rspec", "~> 3.2.0"
30
30
  end
@@ -1,81 +1,157 @@
1
1
  module Overcloud
2
2
  module Deployment
3
+
4
+ # BASE PLAN ACTIONS
5
+
6
+ def list_plans
7
+ uri = "#{base_tripleo_api_url}/plans"
8
+ response = Fog::Core::Connection.new(uri, false).request({
9
+ :expects => 200,
10
+ :headers => {'Content-Type' => 'application/json',
11
+ 'Accept' => 'application/json',
12
+ 'X-Auth-Token' => auth_token},
13
+ :method => 'GET'
14
+ })
15
+ body = Fog::JSON.decode(response.body)
16
+ body['plans']
17
+ end
3
18
 
4
19
  def get_plan(plan_name)
5
- service('Planning').plans.find_by_name(plan_name)
20
+ uri = "#{base_tripleo_api_url}/plans/#{plan_name}"
21
+ response = Fog::Core::Connection.new(uri, false).request({
22
+ :expects => 200,
23
+ :headers => {'Content-Type' => 'application/json',
24
+ 'Accept' => 'application/json',
25
+ 'X-Auth-Token' => auth_token},
26
+ :method => 'GET'
27
+ })
28
+ body = Fog::JSON.decode(response.body)
29
+ body['plan']
30
+ end
31
+
32
+ def deploy_plan(plan_name)
33
+ plan = get_plan(plan_name)
34
+
35
+ # ensure that nodes are in correct state
36
+ for node in list_nodes
37
+ node.set_provision_state('provide') if node.provision_state == 'manageable'
38
+ end
39
+
40
+ uri = "#{base_tripleo_api_url}/plans/#{plan_name}/deploy"
41
+ response = Fog::Core::Connection.new(uri, false).request({
42
+ :expects => 202,
43
+ :headers => {'Content-Type' => 'application/json',
44
+ 'Accept' => 'application/json',
45
+ 'X-Auth-Token' => auth_token},
46
+ :method => 'PUT'
47
+ })
48
+ end
49
+
50
+ ## PLAN PARAMETER METHODS
51
+
52
+ def get_plan_parameters(plan_name)
53
+ uri = "#{base_tripleo_api_url}/plans/#{plan_name}/parameters"
54
+ response = Fog::Core::Connection.new(uri, false).request({
55
+ :expects => 200,
56
+ :headers => {'Content-Type' => 'application/json',
57
+ 'Accept' => 'application/json',
58
+ 'X-Auth-Token' => auth_token},
59
+ :method => 'GET',
60
+ :read_timeout => 360,
61
+ })
62
+ body = Fog::JSON.decode(response.body)
63
+ body['parameters']['Parameters']
6
64
  end
7
65
 
8
66
  def get_plan_parameter_value(plan_name, parameter_name)
9
- params = get_plan(plan_name).parameters
10
- param = params.find{|param| param["name"] == parameter_name }
11
- if param
12
- param["value"]
67
+ parameters = get_plan_parameters(plan_name)
68
+ if parameters.key?(parameter_name)
69
+ parameters[parameter_name]["Default"]
13
70
  else
14
71
  nil
15
72
  end
16
73
  end
17
74
 
18
75
  def edit_plan_parameters(plan_name, parameters)
19
- get_plan(plan_name).patch(:parameters => parameters)
76
+ uri = "#{base_tripleo_api_url}/plans/#{plan_name}/parameters"
77
+ response = Fog::Core::Connection.new(uri, false).request({
78
+ :expects => 200,
79
+ :headers => {'Content-Type' => 'application/json',
80
+ 'Accept' => 'application/json',
81
+ 'X-Auth-Token' => auth_token},
82
+ :method => 'PATCH',
83
+ :body => Fog::JSON.encode(parameters),
84
+ :read_timeout => 360,
85
+ :write_timeout => 360,
86
+ })
20
87
  end
21
88
 
22
89
  def edit_plan_deployment_role_count(plan_name, role_name, count)
23
- parameter = {"name" => role_name + "-1::count", "value" => count.to_s}
24
- edit_plan_parameters(plan_name, [parameter])
90
+ parameters = {role_name + "Count" => count.to_s}
91
+ edit_plan_parameters(plan_name, parameters)
25
92
  end
26
93
 
27
- def edit_plan_deployment_role_image(plan_name, role_name, image_uuid)
28
- parameter = {"name" => role_name + "-1::Image", "value" => image_uuid}
29
- edit_plan_parameters([parameter])
94
+ def edit_plan_deployment_role_flavor(plan_name, role_name, flavor_name)
95
+ if role_name == 'Controller'
96
+ flavor_parameter = 'OvercloudControlFlavor'
97
+ else
98
+ flavor_parameter = 'Overcloud' + role_name + 'Flavor'
99
+ end
100
+ parameters = {flavor_parameter => flavor_name}
101
+ edit_plan_parameters(plan_name, parameters)
30
102
  end
31
103
 
32
- def edit_plan_deployment_role_flavor(plan_name, role_name, flavor_name)
33
- parameter = {"name" => role_name + "-1::Flavor", "value" => flavor_name}
34
- edit_plan_parameters(plan_name, [parameter])
104
+ ## PLAN ENVIRONMENT ACTIONS
105
+
106
+ def get_plan_environments(plan_name)
107
+ uri = "#{base_tripleo_api_url}/plans/#{plan_name}/environments"
108
+ response = Fog::Core::Connection.new(uri, false).request({
109
+ :expects => 200,
110
+ :headers => {'Content-Type' => 'application/json',
111
+ 'Accept' => 'application/json',
112
+ 'X-Auth-Token' => auth_token},
113
+ :method => 'GET',
114
+ :read_timeout => 360,
115
+ })
116
+ body = Fog::JSON.decode(response.body)
117
+ body['environments']
35
118
  end
36
119
 
37
- def deploy_plan(plan_name)
38
- plan = get_plan(plan_name)
120
+ def edit_plan_environments(plan_name, environments)
121
+ uri = "#{base_tripleo_api_url}/plans/#{plan_name}/environments"
122
+ response = Fog::Core::Connection.new(uri, false).request({
123
+ :expects => 200,
124
+ :headers => {'Content-Type' => 'application/json',
125
+ 'Accept' => 'application/json',
126
+ 'X-Auth-Token' => auth_token},
127
+ :method => 'PATCH',
128
+ :body => Fog::JSON.encode(environments),
129
+ :read_timeout => 360,
130
+ :write_timeout => 360,
131
+ })
132
+ end
39
133
 
40
- # ensure that nodes are in correct state
41
- for node in list_nodes
42
- node.set_provision_state('provide') if node.provision_state == 'manageable'
43
- end
134
+ ## MISCELLANEOUS PLAN ACTIONS
44
135
 
45
- # assign all unassigned roles; make sure their count is 0
46
- default_flavor = list_flavors[0]
47
- for role in list_deployment_roles
48
- flavor_parameter_name = role.name + "-1::Flavor"
49
- flavor_parameter_value = get_plan_parameter_value(plan_name, flavor_parameter_name)
50
- if flavor_parameter_value.to_s == 'baremetal'
51
- edit_plan_deployment_role_count(plan_name, role.name, 0)
52
- edit_plan_deployment_role_flavor(plan_name, role.name, default_flavor.name)
53
- end
54
- end
136
+ def get_plan_deployment_roles(plan_name)
137
+ # temporarily hard-coded until API adds role function
138
+ return ['Controller', 'Compute', 'BlockStorage', 'ObjectStorage',
139
+ 'CephStorage']
55
140
 
56
- # temporary workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1212740
57
- templates = Hash[plan.provider_resource_templates]
58
- templates.keys.each do |template_path|
59
- if template_path.index('puppet/') == 0
60
- new_template_path = template_path.sub('puppet/','')
61
- templates[new_template_path] = templates[template_path]
62
- end
63
- end
64
- templates["hieradata/RedHat.yaml"] = templates["puppet/hieradata/RedHat.yaml"]
65
- templates["yum_update.sh"] = templates["extraconfig/tasks/yum_update.sh"]
66
-
67
- stack_parameters = {
68
- :stack_name => plan.name,
69
- :template => plan.master_template,
70
- :environment => plan.environment,
71
- :files => templates,
72
- :password => @password,
73
- :timeout_mins => 60,
74
- :disable_rollback => true
75
- }
76
- service('Orchestration').stacks.new.save(stack_parameters)
141
+ #uri = "#{base_tripleo_api_url}/plans/#{plan_name}/roles"
142
+ #response = Fog::Core::Connection.new(uri, false).request({
143
+ # :expects => 200,
144
+ # :headers => {'Content-Type' => 'application/json',
145
+ # 'Accept' => 'application/json',
146
+ # 'X-Auth-Token' => auth_token},
147
+ # :method => 'GET'
148
+ # })
149
+ #body = Fog::JSON.decode(response.body)
150
+ #body['roles']
77
151
  end
78
152
 
153
+ ## HEAT ACTIONS
154
+
79
155
  def list_stacks
80
156
  service('Orchestration').stacks.all
81
157
  end
@@ -83,6 +159,16 @@ module Overcloud
83
159
  def get_stack_by_name(stack_name)
84
160
  list_stacks.find{|s| s.stack_name == stack_name}
85
161
  end
86
-
162
+
163
+ def delete_stack(overcloud)
164
+ service('Orchestration').delete_stack(overcloud)
165
+ end
166
+
167
+ private
168
+
169
+ def base_tripleo_api_url
170
+ return "http://#{@auth_url}:8585/v1"
171
+ end
172
+
87
173
  end
88
174
  end
@@ -9,6 +9,14 @@ module Overcloud
9
9
  service('Baremetal').nodes.details
10
10
  end
11
11
 
12
+ def list_ports
13
+ service('Baremetal').ports.all
14
+ end
15
+
16
+ def list_ports_detailed
17
+ service('Baremetal').ports.details
18
+ end
19
+
12
20
  def get_node(node_id)
13
21
  service('Baremetal').nodes.find_by_uuid(node_id)
14
22
  end
@@ -77,7 +85,22 @@ module Overcloud
77
85
  end
78
86
 
79
87
  def delete_node(node_id)
80
- service('Baremetal').nodes.destroy(node_id)
88
+ begin
89
+ node = get_node(node_id)
90
+ if node.power_state == 'power on' && node.provision_state != 'active'
91
+ node.set_power_state('power off')
92
+ retries = 15
93
+ while retries > 0 && node.power_state != 'power off' do
94
+ sleep(2)
95
+ retries -= 1
96
+ end
97
+ end
98
+ service('Baremetal').nodes.destroy(node_id)
99
+ rescue Fog::Compute::OpenStack::NotFound => e
100
+ "Node Not Found"
101
+ rescue Excon::Errors::Conflict, Excon::Errors::BadRequest => e
102
+ JSON.parse(JSON.parse(e.response.body)["error_message"])["faultstring"].split("\n").first
103
+ end
81
104
  end
82
105
 
83
106
  ## THESE METHODS ARE TEMPORARY UNTIL IRONIC-DISCOVERD IS ADDED TO
@@ -85,7 +108,6 @@ module Overcloud
85
108
 
86
109
  def introspect_node(node_uuid)
87
110
  uri = "http://#{@auth_url}:5050/v1/introspection/#{node_uuid}"
88
- auth_token = service('Baremetal').instance_variable_get(:@auth_token)
89
111
  response = Fog::Core::Connection.new(uri, false).request({
90
112
  :expects => 202,
91
113
  :headers => {'Content-Type' => 'application/json',
@@ -97,7 +119,6 @@ module Overcloud
97
119
 
98
120
  def introspect_node_status(node_uuid)
99
121
  uri = "http://#{@auth_url}:5050/v1/introspection/#{node_uuid}"
100
- auth_token = service('Baremetal').instance_variable_get(:@auth_token)
101
122
  response = Fog::Core::Connection.new(uri, false).request({
102
123
  :expects => 200,
103
124
  :headers => {'Content-Type' => 'application/json',
@@ -1,6 +1,5 @@
1
1
  require 'fog'
2
2
  require_relative 'undercloud_handle/deployment'
3
- require_relative 'undercloud_handle/deployment_role'
4
3
  require_relative 'undercloud_handle/flavor'
5
4
  require_relative 'undercloud_handle/image'
6
5
  require_relative 'undercloud_handle/node'
@@ -9,7 +8,6 @@ module Overcloud
9
8
  class UndercloudHandle
10
9
 
11
10
  include Overcloud::Deployment
12
- include Overcloud::DeploymentRole
13
11
  include Overcloud::Flavor
14
12
  include Overcloud::Image
15
13
  include Overcloud::Node
@@ -37,6 +35,10 @@ module Overcloud
37
35
  end
38
36
  return Fog.const_get(service_name).new(fog_parameters)
39
37
  end
40
-
38
+
39
+ def auth_token
40
+ service('Baremetal').instance_variable_get(:@auth_token)
41
+ end
42
+
41
43
  end
42
44
  end
@@ -3,12 +3,14 @@ module Egon
3
3
  module Undercloud
4
4
  class Commands
5
5
 
6
+ ## OSP7
7
+
6
8
  def self.OSP7_satellite(satellite_url, org, activation_key)
7
9
  return "
8
10
  curl -k -O #{satellite_url}/pub/katello-ca-consumer-latest.noarch.rpm
9
11
  sudo yum install -y katello-ca-consumer-latest.noarch.rpm
10
12
  sudo subscription-manager register --org=\"#{org}\" --activationkey=\"#{activation_key}\"
11
- #{self.OSP7_COMMON_no_registration}"
13
+ #{self.OSP7_no_registration}"
12
14
  end
13
15
 
14
16
  def self.OSP7_vanilla_rhel(rhsm_user, rhsm_password, rhsm_pool_id)
@@ -34,7 +36,7 @@ module Egon
34
36
  return OSP7_COMMON
35
37
  end
36
38
 
37
- POST_INSTALL = "
39
+ POST_INSTALL_7 = "
38
40
  source ~/stackrc
39
41
  source ~/tripleo-undercloud-passwords
40
42
 
@@ -235,7 +237,109 @@ module Egon
235
237
  sudo chown $USER: ~/tripleo-undercloud-passwords
236
238
  sudo cp /root/stackrc ~
237
239
  sudo chown $USER: ~/stackrc
238
- #{POST_INSTALL}"
240
+ #{POST_INSTALL_7}"
241
+
242
+ ## OSP8
243
+
244
+ def self.OSP8_satellite(satellite_url, org, activation_key)
245
+ return "
246
+ curl -k -O #{satellite_url}/pub/katello-ca-consumer-latest.noarch.rpm
247
+ sudo yum install -y katello-ca-consumer-latest.noarch.rpm
248
+ sudo subscription-manager register --org=\"#{org}\" --activationkey=\"#{activation_key}\"
249
+ #{self.OSP8_no_registration}"
250
+ end
251
+
252
+ def self.OSP8_vanilla_rhel(rhsm_user, rhsm_password, rhsm_pool_id)
253
+ return "
254
+ sudo subscription-manager register --force --username=\"#{rhsm_user}\" --password=\"#{rhsm_password}\"
255
+ sudo subscription-manager attach --pool=\"#{rhsm_pool_id}\"
256
+ sudo subscription-manager repos --enable=rhel-7-server-rpms \
257
+ --enable=rhel-7-server-optional-rpms --enable=rhel-7-server-extras-rpms \
258
+ --enable=rhel-7-server-openstack-6.0-rpms
259
+ #{self.OSP8_no_registration}"
260
+ end
261
+
262
+ def self.OSP8_no_registration
263
+ return "
264
+ sudo yum install -y python-rdomanager-oscplugin
265
+ if [ ! -f ~/undercloud.conf ]; then
266
+ cp -f /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf;
267
+ sed -i -- 's/#store_events = false/store_events = true/g' ~/undercloud.conf
268
+ fi
269
+ #{self.OSP8_no_registration_no_packages}"
270
+ end
271
+
272
+ def self.OSP8_no_registration_no_packages
273
+ return OSP8_COMMON
274
+ end
275
+
276
+ POST_INSTALL_8 = "
277
+ sudo setenforce permissive
278
+ source ~/stackrc
279
+
280
+ sudo yum install -y rhosp-director-images
281
+ cd /usr/share/rhosp-director-images
282
+ sudo tar xf ironic-python-agent.tar
283
+ sudo tar xf overcloud-full.tar
284
+ openstack overcloud image upload
285
+ cd ~
286
+
287
+ SUBNET_ID=$(neutron subnet-show '' | awk '$2==\"id\" {print $4}')
288
+ neutron subnet-update $SUBNET_ID --dns-nameserver 192.168.122.1
289
+
290
+ OS_AUTH_URL_ESC=$(sed 's/\\\//\\\\\\//g' <<<\"$OS_AUTH_URL\")
291
+ sudo yum install -y openstack-tripleo-api
292
+ sudo sed -i -- \"s/#auth_strategy = keystone/auth_strategy = noauth/g\" /etc/tripleo/tripleo.conf
293
+ sudo sed -i -- \"s/#password = <None>/password = $OS_PASSWORD/g\" /etc/tripleo/tripleo.conf
294
+ sudo sed -i -- \"s/#auth_url = http:\\/\\/localhost:35357\\/v2.0/auth_url = $OS_AUTH_URL_ESC/g\" /etc/tripleo/tripleo.conf
295
+ sudo sed -i -- \"s/#identity_uri = <None>/identity_uri = $OS_AUTH_URL_ESC/g\" /etc/tripleo/tripleo.conf
296
+ sudo sed -i -- \"s/#admin_user = <None>/admin_user = admin/g\" /etc/tripleo/tripleo.conf
297
+ sudo sed -i -- \"s/#admin_password = <None>/admin_password = $OS_PASSWORD/g\" /etc/tripleo/tripleo.conf
298
+ sudo service openstack-tripleo-api restart
299
+ sudo systemctl enable openstack-tripleo-api
300
+ sudo sed -i -- \"s/max_json_body_size = 1048576/max_json_body_size = 2000000/g\" /etc/heat/heat.conf
301
+ sudo service openstack-heat-api restart
302
+ sudo service openstack-heat-api-cfn restart
303
+ sudo service openstack-heat-engine restart
304
+
305
+ if ! [ $(swift list | grep overcloud) ]; then
306
+
307
+ cp -r /usr/share/openstack-tripleo-heat-templates .
308
+ cp /usr/share/tripleo-api/templates/capabilities-map.yaml openstack-tripleo-heat-templates/.
309
+
310
+ echo ' BlockStorageImage: overcloud-full' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
311
+ echo ' CephStorageImage: overcloud-full' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
312
+ echo ' SwiftStorageImage: overcloud-full' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
313
+ echo ' controllerImage: overcloud-full' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
314
+ echo ' NovaImage: overcloud-full' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
315
+ echo ' CinderPassword: Ma3kfBHqB8FDb2hgJa3sPUAzh' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
316
+ echo ' GlancePassword: EBNnAsWxuzAHfqG8trjjMDsCu' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
317
+ echo ' SwiftPassword: KfqyTxGtQ9y7P6yCK2m7n2xMz' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
318
+ echo ' NeutronMetadataProxySharedSecret: A2kEkckqfAzxcdVEJtnWj4hGP' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
319
+ echo ' HeatPassword: BEhHu9UhKd4ZnQwmtCUFsZrh4' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
320
+ echo ' HeatStackDomainAdminPassword: fpRbkRneNJVutk4QqK8xYR3Qm' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
321
+ echo ' NeutronPassword: 9n3AfD2b9zfBrmmBHwHyc7TgV' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
322
+ echo ' AdminToken: CuVyGZqfwZdbTwUaX9euaPGaA' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
323
+ echo ' SwiftHashSuffix: JN273288Xt3JTBqnE8RBsrYze' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
324
+ echo ' CeilometerMeteringSecret: Hvkf9Rzz6tHF6UVsErPjCE3uM' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
325
+ echo ' SnmpdReadonlyUserPassword: password' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
326
+ echo ' CeilometerPassword: 2zgV6yAE2d3JTskTnBUsvzDf4' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
327
+ echo ' NovaPassword: QCn7EHTkMMrJHH7Upp6txzUYX' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
328
+ echo ' RedisPassword: Rhq8Fd7eEIoPP821Ui' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
329
+ echo ' HAProxyStatsPassword: veLYjyhxgs7GtQuKXF' >> openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml
330
+
331
+ echo 'parameter_defaults:' >> openstack-tripleo-heat-templates/environments/deployment_parameters.yaml
332
+ echo ' AdminPassword: changeme' >> openstack-tripleo-heat-templates/environments/deployment_parameters.yaml
333
+
334
+ sudo tripleo-plan-create --config-file /etc/tripleo/tripleo.conf
335
+ fi
336
+ "
337
+
338
+ OSP8_COMMON = "
339
+ sudo sed -i '$ a\net.ipv4.ip_forward = 1' /etc/sysctl.conf
340
+ sudo sysctl -p /etc/sysctl.conf
341
+ openstack undercloud install
342
+ #{POST_INSTALL_8}"
239
343
 
240
344
  end
241
345
  end
@@ -54,6 +54,9 @@ module Egon
54
54
 
55
55
  def check_ports(stringio=nil)
56
56
  # closed ports 5385, 36357
57
+ address = File.foreach('/home/stack/undercloud.conf')
58
+ .grep(/^local_ip/).first
59
+ .match(/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/).to_s
57
60
  ports = [8774, 9292, 8777, 9696, 8004, 5000, 8585, 15672]
58
61
  ports.each do |p|
59
62
  if !@connection.nil?
@@ -63,7 +66,7 @@ module Egon
63
66
  end
64
67
  else
65
68
  # local check
66
- set_failure(true) unless !port_open?("192.0.2.1", p, stringio)
69
+ set_failure(true) unless !port_open?(address, p, stringio)
67
70
  end
68
71
  end
69
72
  end
data/lib/egon/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Egon
2
- VERSION = "0.4.8"
2
+ VERSION = "1.0.0"
3
3
  end
Binary file
Binary file
data/pkg/egon-0.1.0.gem CHANGED
Binary file
Binary file
data/rubygem-egon.spec CHANGED
@@ -4,8 +4,8 @@
4
4
  %global gem_name egon
5
5
 
6
6
  Name: %{?scl_prefix}rubygem-%{gem_name}
7
- Version: 0.4.2
8
- Release: 7%{?dist}
7
+ Version: 1.0.0
8
+ Release: 0%{?dist}
9
9
  Summary: A library on top of Fog that encapsulates TripleO deployment operations
10
10
  Group: Development/Languages
11
11
  License: GPL-3.0+
@@ -13,7 +13,7 @@ URL: https://github.com/fusor/egon
13
13
  Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
14
14
  BuildRequires: %{?scl_prefix}rubygems-devel
15
15
  Requires: %{?scl_prefix}ruby
16
- Requires: %{?scl_prefix}rubygem(fog) => 1.31.0
16
+ Requires: %{?scl_prefix}rubygem(fog) => 1.36.0
17
17
  Requires: %{?scl_prefix}rubygem(net-ssh) => 2.9.2
18
18
  Requires: %{?scl_prefix}rubygem(net-ssh) < 2.10
19
19
  BuildArch: noarch
@@ -93,6 +93,9 @@ popd
93
93
  %{gem_instdir}/test
94
94
 
95
95
  %changelog
96
+ * Thu Oct 29 2015 Jason Rist <jrist@redhat.com> 0.4.8
97
+ - bump fog requirement to 1.36.0 to fix uuid bug (jrist@redhat.com)
98
+
96
99
  * Thu Sep 10 2015 Jason Montleon <jmontleo@redhat.com> 0.4.2-7
97
100
  - gempsec and rpm spec cleanup (jmontleo@redhat.com)
98
101
 
@@ -1,10 +1,8 @@
1
1
  require 'fog'
2
2
  require 'fog/openstack/models/baremetal/nodes'
3
3
  require 'fog/openstack/models/compute/flavors'
4
- require 'fog/openstack/models/image/image'
4
+ require 'fog/openstack/models/image_v1/image'
5
5
  require 'fog/openstack/models/orchestration/stacks'
6
- require 'fog/openstack/models/planning/plans'
7
- require 'fog/openstack/models/planning/role'
8
6
  require './lib/egon/overcloud/undercloud_handle'
9
7
 
10
8
  describe "overcloud installation mocked" do
@@ -18,12 +16,12 @@ describe "overcloud installation mocked" do
18
16
  @undercloud_handle = Overcloud::UndercloudHandle.new(options[:openstack_username], 'xxxxxxx', options[:openstack_auth_url])
19
17
 
20
18
  # setup for mock image service
21
- image_service = Fog::Image::OpenStack::Mock.new(options)
22
- bm_deploy_kernel_image = Fog::Image::OpenStack::Image.new({
19
+ image_service = Fog::Image::OpenStack::V1::Mock.new(options)
20
+ bm_deploy_kernel_image = Fog::Image::OpenStack::V1::Image.new({
23
21
  :id => '1',
24
22
  :name => 'bm-deploy-kernel'
25
23
  })
26
- bm_deploy_ramdisk_image = Fog::Image::OpenStack::Image.new({
24
+ bm_deploy_ramdisk_image = Fog::Image::OpenStack::V1::Image.new({
27
25
  :id => '2',
28
26
  :name => 'bm-deploy-ramdisk'
29
27
  })
@@ -71,34 +69,14 @@ describe "overcloud installation mocked" do
71
69
  allow(compute_service).to receive(:flavors).and_return(flavors)
72
70
  allow(@undercloud_handle).to receive(:service).with('Compute').and_return(compute_service)
73
71
 
74
- # setup for mock planning service
75
- planning_service = Fog::Openstack::Planning::Mock.new(options)
76
- plans = Fog::Openstack::Planning::Plans.new
77
- overcloud_plan = Fog::Openstack::Planning::Plan.new({
78
- :uuid => '1',
79
- :name => 'overcloud'
80
- })
81
- compute_role = Fog::Openstack::Planning::Role.new({
82
- :uuid => '1',
83
- :name => 'Compute'
84
- })
85
- controller_role = Fog::Openstack::Planning::Role.new({
86
- :uuid => '1',
87
- :name => 'Controller'
88
- })
89
- allow(planning_service).to receive(:roles).and_return([compute_role, controller_role])
90
- allow(planning_service).to receive(:plans).and_return(plans)
91
- allow(plans).to receive(:find_by_name).and_return(overcloud_plan)
92
- allow(@undercloud_handle).to receive(:service).with('Planning').and_return(planning_service)
93
-
94
72
  # setup for mock orchestration service
95
73
  orchestration_service = Fog::Orchestration::OpenStack::Mock.new(options)
96
74
  stacks = Fog::Orchestration::OpenStack::Stacks.new
97
75
  overcloud_stack = Fog::Orchestration::OpenStack::Stack.new({
98
76
  'id' => '1',
99
- 'name' => 'overcloud',
77
+ 'stack_name' => 'overcloud',
100
78
  })
101
- allow(stacks).to receive(:get).and_return(overcloud_stack)
79
+ allow(stacks).to receive(:all).and_return([overcloud_stack])
102
80
  allow(orchestration_service).to receive(:stacks).and_return(stacks)
103
81
  allow(@undercloud_handle).to receive(:service).with('Orchestration').and_return(orchestration_service)
104
82
  end
@@ -164,16 +142,8 @@ describe "overcloud installation mocked" do
164
142
  expect(@undercloud_handle.list_nodes.length).to eq 2
165
143
  end
166
144
 
167
- it "should be able to list_deployment_roles" do
168
- expect(@undercloud_handle.list_deployment_roles.length).to eq 2
169
- end
170
-
171
- it "should be able to get_plan" do
172
- expect(@undercloud_handle.get_plan('overcloud').uuid).to eq '1'
173
- end
174
-
175
145
  it "should be able to get_stack" do
176
- expect(@undercloud_handle.get_stack('overcloud').id).to eq '1'
146
+ expect(@undercloud_handle.get_stack_by_name('overcloud').id).to eq '1'
177
147
  end
178
148
  end
179
149
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: egon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.8
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Egon and Fusor team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-13 00:00:00.000000000 Z
11
+ date: 2016-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 1.31.0
47
+ version: 1.36.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 1.31.0
54
+ version: 1.36.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: net-ssh
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -92,6 +92,7 @@ extensions: []
92
92
  extra_rdoc_files: []
93
93
  files:
94
94
  - Gemfile
95
+ - Gemfile.lock
95
96
  - LICENSE
96
97
  - README.md
97
98
  - Rakefile
@@ -103,7 +104,6 @@ files:
103
104
  - lib/egon.rb
104
105
  - lib/egon/overcloud/undercloud_handle.rb
105
106
  - lib/egon/overcloud/undercloud_handle/deployment.rb
106
- - lib/egon/overcloud/undercloud_handle/deployment_role.rb
107
107
  - lib/egon/overcloud/undercloud_handle/flavor.rb
108
108
  - lib/egon/overcloud/undercloud_handle/image.rb
109
109
  - lib/egon/overcloud/undercloud_handle/node.rb
@@ -112,21 +112,10 @@ files:
112
112
  - lib/egon/undercloud/port-check-mixin.rb
113
113
  - lib/egon/undercloud/ssh-connection.rb
114
114
  - lib/egon/version.rb
115
+ - pkg/egon-0.0.1.gem
116
+ - pkg/egon-0.0.2.gem
115
117
  - pkg/egon-0.1.0.gem
116
- - pkg/egon-0.2.0.gem
117
- - pkg/egon-0.3.1.gem
118
- - pkg/egon-0.3.2.gem
119
- - pkg/egon-0.3.3.gem
120
- - pkg/egon-0.3.4.gem
121
- - pkg/egon-0.3.5.gem
122
- - pkg/egon-0.3.6.gem
123
- - pkg/egon-0.4.0.gem
124
- - pkg/egon-0.4.1.gem
125
- - pkg/egon-0.4.2.gem
126
- - pkg/egon-0.4.4.gem
127
- - pkg/egon-0.4.5.gem
128
- - pkg/egon-0.4.6.gem
129
- - pkg/egon-0.4.7.gem
118
+ - pkg/egon-0.4.3.gem
130
119
  - rubygem-egon.spec
131
120
  - test/test_ssh_connection.rb
132
121
  - test/test_undercloud.rb
@@ -1,9 +0,0 @@
1
- module Overcloud
2
- module DeploymentRole
3
-
4
- def list_deployment_roles
5
- service('Planning').roles
6
- end
7
-
8
- end
9
- end
data/pkg/egon-0.2.0.gem DELETED
Binary file
data/pkg/egon-0.3.1.gem DELETED
Binary file
data/pkg/egon-0.3.2.gem DELETED
Binary file
data/pkg/egon-0.3.3.gem DELETED
Binary file
data/pkg/egon-0.3.4.gem DELETED
Binary file
data/pkg/egon-0.3.5.gem DELETED
Binary file
data/pkg/egon-0.3.6.gem DELETED
Binary file
data/pkg/egon-0.4.0.gem DELETED
Binary file
data/pkg/egon-0.4.1.gem DELETED
Binary file
data/pkg/egon-0.4.2.gem DELETED
Binary file
data/pkg/egon-0.4.4.gem DELETED
Binary file
data/pkg/egon-0.4.5.gem DELETED
Binary file
data/pkg/egon-0.4.6.gem DELETED
Binary file
data/pkg/egon-0.4.7.gem DELETED
Binary file