Class: Script

Inherits:
Object
  • Object
show all
Defined in:
lib/rscalr/model/script.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Script

Returns a new instance of Script.



6
7
8
# File 'lib/rscalr/model/script.rb', line 6

def initialize client
  @client = client
end

Instance Attribute Details

#descriptionObject

Returns the value of attribute description.



4
5
6
# File 'lib/rscalr/model/script.rb', line 4

def description
  @description
end

#detailsObject

Returns the value of attribute details.



4
5
6
# File 'lib/rscalr/model/script.rb', line 4

def details
  @details
end

#idObject

Returns the value of attribute id.



4
5
6
# File 'lib/rscalr/model/script.rb', line 4

def id
  @id
end

#latest_revisionObject

Returns the value of attribute latest_revision.



4
5
6
# File 'lib/rscalr/model/script.rb', line 4

def latest_revision
  @latest_revision
end

#nameObject

Returns the value of attribute name.



4
5
6
# File 'lib/rscalr/model/script.rb', line 4

def name
  @name
end

Instance Method Details

#execute(farm_id, timeout = 30, async = :no_async, farm_role_id = nil, server_id = nil, revision = nil, config_vars = nil) ⇒ Object



10
11
12
13
14
# File 'lib/rscalr/model/script.rb', line 10

def execute(farm_id, timeout=30, async=:no_async, farm_role_id=nil, server_id=nil, revision=nil, config_vars=nil)
  set_revision(revision) # Side effect!
  api_response = @client.script_execute farm_id, @id, timeout, async, farm_role_id, server_id, @revision, config_vars
  parse_script_execution_response(api_response, farm_id, farm_role_id, server_id)
end

#get_config_variablesObject



44
45
46
47
48
49
# File 'lib/rscalr/model/script.rb', line 44

def get_config_variables
  load_details unless @details != nil
  @revision = @latest_revision unless @revision != nil
  puts "Rev: #{@revision} -- Deets: #{@details}"
  @details.revisions[@revision].config_variables
end

#load_detailsObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/rscalr/model/script.rb', line 16

def load_details
  @details = ScriptDetails.new @id
  scalr_response = @client.script_get_details @id
  scalr_response.root.each_element('ScriptRevisionSet/Item') { |row| 
    revision = ScriptRevision.new
    
    row.each_element { |prop| 
      if "Revision" == prop.name
        revision.revision = prop.text.to_i
      elsif "Date" == prop.name
        revision.date = Time.parse(prop.text)
      elsif "ConfigVariables" == prop.name
        prop.each_element { |configvar_element| 
          configvar_element.each_element { |configvar_prop| 
            if "Name" == prop.name
              revision.config_variables << prop.text
            end
          }
        }
      end
    }

    @details.revisions[revision.revision] = revision
  }
  
  @details
end

#parse_script_execution_response(api_response, farm_id, farm_role_id = nil, server_id = nil) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/rscalr/model/script.rb', line 61

def parse_script_execution_response(api_response, farm_id, farm_role_id=nil, server_id=nil)
  if api_response.success? 
    result = nil
    event_id = nil
    api_response.root.each_element { |field| 
      if "TransactionID" == field.name
        event_id = field.text
      elsif "Result" == field.name
        result = field.text.to_i
      end
    }
    ScriptExecution.new(@id, result, event_id, farm_id, farm_role_id, server_id)
  elsif
    ScriptExecution.new(@id, 0, nil, farm_id)
  end
end

#set_revision(revision) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/rscalr/model/script.rb', line 51

def set_revision(revision)
  if revision.nil? || revision >= @latest_revision
    @revision = @latest_revision
  elsif revision < 1
    @revision = 1
  else
    @revision = revision
  end
end

#to_sObject



78
79
80
# File 'lib/rscalr/model/script.rb', line 78

def to_s
  "{ type: \"script\", id: #{@id}, name: \"#{@name}\" }"
end