berta 1.0.0 → 1.1.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: 2c35df5b38eb1ec48f721aab12ab14ae6006f32d
4
- data.tar.gz: 205b376e2b57fb9738880bdd47817b4933135f04
3
+ metadata.gz: b4e81e829b874c07ff7ab8ae0226238d5baa52b4
4
+ data.tar.gz: 99b0e83b23f5213db848f45403b8c901071a6c8b
5
5
  SHA512:
6
- metadata.gz: 9500f02e7755d6eab251cb337bf397cb9979f685fc13b736d433756289c3a5da0ba358cd4731f7e58eef955144f93aff8c8598f5e59cceba148a168cb472811a
7
- data.tar.gz: 3581efd6664b2f26394e7e0bc752c22c01d7e983ea5d113e026044a3df7d65186e34dc305d992ad5accbe1720f75edd8ae110647b6fa795ffa0c77780b6ba466
6
+ metadata.gz: 13a6e7deea100c608d490391b4f3f3377f1771139399f7917c074c4d2faea12e5c905923568b68855c3bbe6718338e1d5c50b9d8a3db8adb2cd68c0e7b644062
7
+ data.tar.gz: df347f0d85a29be79b8c5152e5c13c9ed9de2a3201a3add8c7ebde8f34aad4888705fa146b40d62ba17d38e2b949851e1b12116940459a8372848bc4aaef079d
data/README.md CHANGED
@@ -5,6 +5,7 @@
5
5
  [![Code Climate](https://codeclimate.com/github/dudoslav/berta/badges/gpa.svg)](https://codeclimate.com/github/dudoslav/berta)
6
6
  [![Inline docs](http://inch-ci.org/github/dudoslav/berta.svg?branch=master)](http://inch-ci.org/github/dudoslav/berta)
7
7
  [![Dependency Status](https://gemnasium.com/badges/github.com/dudoslav/berta.svg)](https://gemnasium.com/github.com/dudoslav/berta)
8
+ [![Gem Version](https://badge.fury.io/rb/berta.svg)](https://badge.fury.io/rb/berta)
8
9
 
9
10
  Berta cleans cloud from unused vms. She sets expiration to all virtual machines
10
11
  and when expiration is close she will notify owners. Berta is developed as ruby gem.
@@ -23,7 +24,7 @@ From source:
23
24
 
24
25
  ```bash
25
26
  git clone git://github.com/dudoslav/berta.git
26
- cd cloudkeeper
27
+ cd berta
27
28
  gem install bundler
28
29
  bundle install
29
30
  ```
@@ -33,7 +34,7 @@ bundle install
33
34
  Config files can be located in:
34
35
  * `~/.berta/berta.yml`
35
36
  * `/etc/berta/berta.yml`
36
- * `PATH_TO_GEM_DIR/config/cloudkeeper.yml`
37
+ * `PATH_TO_GEM_DIR/config/berta.yml`
37
38
 
38
39
  ### Execution
39
40
 
data/berta.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'berta'
3
- s.version = '1.0.0'
3
+ s.version = '1.1.0'
4
4
  s.summary = 'Berta VM expiration tool'
5
5
  s.description = 'Berta will check all VMs on OpenNebula cloud for expiration date'
6
6
  s.authors = ['Dusan Baran']
@@ -8,35 +8,36 @@ module Berta
8
8
  # to update expiration on.
9
9
  def update_expirations(vms)
10
10
  vms.each do |vm|
11
- remove_invalid_expirations(vm)
12
- add_default_expiration(vm)
11
+ begin
12
+ vm.update_expirations(add_default_expiration(vm, remove_invalid_expirations(vm.expirations)))
13
+ rescue Berta::Errors::BackendError => e
14
+ logger.error "#{e.message}\n\tOn vm with id #{vm.handle['ID']}"
15
+ end
13
16
  end
14
17
  end
15
18
 
16
- # Removes invalid expirations on vm. That are schelude actions
17
- # with expiration time later than expiration offset.
19
+ # Removes invalid expirations from array of expirations.
20
+ # Invalid expirations are expirations that are planned
21
+ # later than expiration offset value.
18
22
  #
19
- # @param vm [Berta::VirtualMachineHandler] Virtual machine to
20
- # remove invalid expirations on.
21
- def remove_invalid_expirations(vm)
22
- exps = vm.expirations
23
+ # @param exps [Array<Berta::Entities::Expiration>] Expirations to filter
24
+ # @return [Array<Berta::Entities::Expiration>] Filtered expirations
25
+ def remove_invalid_expirations(exps)
23
26
  exps.keep_if(&:in_expiration_interval?)
24
- vm.update_expirations(exps) if exps.length != vm.expirations.length
25
- rescue Berta::Errors::BackendError => e
26
- logger.error "#{e.message}\n\tOn vm with id #{vm.handle['ID']}"
27
27
  end
28
28
 
29
- # Adds default expiration if no valid expiration with
30
- # right expiration action is set.
29
+ # Adds default vm expiration into given array of expirations
30
+ # assuming that array of expirations are expirations of given vm.
31
+ # If vm already has default expiration nothing will be changed.
31
32
  #
32
- # @param vm [Berta::VirtualMachineHandler] Virtual machine
33
- # to set default expiration on.
34
- def add_default_expiration(vm)
35
- return if vm.default_expiration
36
- vm.add_expiration(Time.now.to_i + Berta::Settings.expiration_offset,
37
- Berta::Settings.expiration.action)
38
- rescue Berta::Errors::BackendError => e
39
- logger.error "#{e.message}\n\tOn vm with id #{vm.handle['ID']}"
33
+ # @param vm [Berta::VirtualMachineHandler] VM with or without default expiration
34
+ # @param exps [Array<Berta::Entities::Expiration>] VMs expirations to modify
35
+ # @return Expirations with default expiration
36
+ def add_default_expiration(vm, exps)
37
+ return exps if vm.default_expiration
38
+ exps << Berta::Entities::Expiration.new(vm.next_expiration_id,
39
+ Time.now.to_i + Berta::Settings.expiration_offset,
40
+ Berta::Settings.expiration.action)
40
41
  end
41
42
  end
42
43
  end
@@ -1,6 +1,8 @@
1
1
  module Berta
2
2
  # Class for Berta operations on virtual machines
3
3
  class VirtualMachineHandler
4
+ NOTIFIED_FLAG = 'BERTA_NOTIFIED'.freeze
5
+
4
6
  attr_reader :handle
5
7
 
6
8
  # Constructs Virtual machine handler from given vm.
@@ -22,10 +24,11 @@ module Berta
22
24
  # @raise [Berta::Errors::OpenNebula::ResourceStateError]
23
25
  # @raise [Berta::Errors::OpenNebula::ResourceRetrievalError]
24
26
  def update_notified
25
- logger.debug "Setting notified flag of #{handle['ID']} to #{Time.now.to_i}"
27
+ notify_time = Time.now
28
+ logger.debug "Setting notified flag of VM with id #{handle['ID']} to #{notify_time}"
26
29
  return if Berta::Settings['dry-run']
27
30
  Berta::Utils::OpenNebula::Helper.handle_error do
28
- handle.update("NOTIFIED = #{Time.now.to_i}", true)
31
+ handle.update("#{NOTIFIED_FLAG} = #{notify_time.to_i}", true)
29
32
  handle.info
30
33
  end
31
34
  end
@@ -36,7 +39,7 @@ module Berta
36
39
  # @return [Numeric] Time when notified was set else nil.
37
40
  # Time is in UNIX epoch time format.
38
41
  def notified
39
- time = handle['USER_TEMPLATE/NOTIFIED']
42
+ time = handle["USER_TEMPLATE/#{NOTIFIED_FLAG}"]
40
43
  time.to_i if time
41
44
  end
42
45
 
@@ -54,23 +57,6 @@ module Berta
54
57
  expiration.in_notification_interval?
55
58
  end
56
59
 
57
- # Adds schelude action to virtual machine. This command
58
- # modifies USER_TEMPLATE of virtual machine. But does
59
- # not delete old variables is USER_TEMPLATE.
60
- #
61
- # @note This method modifies OpenNebula database
62
- # @param time [Numeric] Time when to notify user
63
- # @param action [String] Action to perform on expiration
64
- def add_expiration(time, action)
65
- logger.debug "Setting expiration date of #{handle['ID']} to #{action} on #{time} with id #{next_sched_action_id}"
66
- return if Berta::Settings['dry-run']
67
- new_expiration = \
68
- Berta::Entities::Expiration.new(next_sched_action_id,
69
- time,
70
- action)
71
- update_expirations(expirations << new_expiration)
72
- end
73
-
74
60
  # Sets array of expirations to vm, rewrites all old ones.
75
61
  # Receiving empty array wont change anything.
76
62
  #
@@ -79,6 +65,7 @@ module Berta
79
65
  def update_expirations(exps)
80
66
  template = ''
81
67
  exps.each { |exp| template += exp.template }
68
+ return if template == ''
82
69
  logger.debug "Setting multiple expirations:\n#{template}"
83
70
  return if Berta::Settings['dry-run']
84
71
  Berta::Utils::OpenNebula::Helper.handle_error do
@@ -109,9 +96,8 @@ module Berta
109
96
  .min { |exp| exp.time.to_i }
110
97
  end
111
98
 
112
- private
113
-
114
- def next_sched_action_id
99
+ # TODO
100
+ def next_expiration_id
115
101
  elems = handle.retrieve_elements('USER_TEMPLATE/SCHED_ACTION/ID')
116
102
  return 0 unless elems
117
103
  elems.to_a.max.to_i + 1
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berta
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dusan Baran
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-20 00:00:00.000000000 Z
11
+ date: 2017-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler