File: environment.rb

package info (click to toggle)
ruby-fog-aws 3.3.0-5
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 7,816 kB
  • sloc: ruby: 68,587; makefile: 6
file content (143 lines) | stat: -rw-r--r-- 4,935 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
module Fog
  module AWS
    class ElasticBeanstalk
      class Environment < Fog::Model
        identity :name, :aliases => 'EnvironmentName'
        attribute :id, :aliases => 'EnvironmentId'

        attribute :application_name, :aliases => 'ApplicationName'
        attribute :cname, :aliases => 'CNAME'
        attribute :cname_prefix, :aliases => 'CNAMEPrefix'
        attribute :created_at, :aliases => 'DateCreated'
        attribute :updated_at, :aliases => 'DateUpdated'
        attribute :updated_at, :aliases => 'DateUpdated'
        attribute :description, :aliases => 'Description'
        attribute :endpoint_url, :aliases => 'EndpointURL'
        attribute :health, :aliases => 'Health'
        attribute :resources, :aliases => 'Resources'
        attribute :solution_stack_name, :aliases => 'SolutionStackName'
        attribute :status, :aliases => 'Status'
        attribute :template_name, :aliases => 'TemplateName'
        attribute :version_label, :aliases => 'VersionLabel'
        attribute :option_settings, :aliases => 'OptionSettings'
        attribute :options_to_remove, :aliases => 'OptionsToRemove'

        def healthy?
          health == 'Green'
        end

        def ready?
          status == 'Ready'
        end

        def terminated?
          status == 'Terminated'
        end

        # Returns the current live resources for this environment
        def live_resources
          requires :id
          data = service.describe_environment_resources({'EnvironmentId' => id}).body['DescribeEnvironmentResourcesResult']['EnvironmentResources']
          data.delete('EnvironmentName') # Delete the environment name from the result, only return actual resources
          data
        end

        # Returns the load balancer object associated with the environment.
        def load_balancer(elb_connection = Fog::AWS[:elb])
          if resources.nil?
            elb_connection.load_balancers.get(live_resources['LoadBalancers'].first['Name'])
          else
            elb_connection.load_balancers.get(resources['LoadBalancer']['LoadBalancerName'])
          end
        end

        # Return events related to this version
        def events
          requires :id
          service.events.all({'EnvironmentId' => id})
        end

        # Restarts the app servers in this environment
        def restart_app_server
          requires :id
          service.restart_app_server({'EnvironmentId' => id})
          reload
        end

        # Rebuilds the environment
        def rebuild
          requires :id
          service.rebuild_environment({'EnvironmentId' => id})
          reload
        end

        def swap_cnames(source)
          requires :name
          service.swap_environment_cnames({
              'SourceEnvironmentName' => source.name,
              'DestinationEnvironmentName' => name
                                             })
          source.reload
          reload
        end

        # Return the version object for this environment
        def version
          requires :application_name, :version_label
          service.versions.get(application_name, version_label)
        end

        # Update the running version of this environment
        def version=(new_version)
          requires :id
          if new_version.is_a?(String)
            new_version_label = new_version
          elsif new_version.is_a?(Fog::AWS::ElasticBeanstalk::Version)
            new_version_label = new_version.label
          else
            raise "Unknown type for new_version, must be either String or Fog::AWS::ElasticBeanstalk::Version"
          end

          if new_version.nil?
            raise "Version label not specified."
          end

          data = service.update_environment({
              'EnvironmentId' => id,
              'VersionLabel' => new_version_label
                                        }).body['UpdateEnvironmentResult']

          merge_attributes(data)
        end

        def destroy
          requires :id
          service.terminate_environment({'EnvironmentId' => id})
          true
        end

        def save
          requires :name, :application_name
          requires_one :template_name, :solution_stack_name

          options = {
              'ApplicationName' => application_name,
              'CNAMEPrefix' => cname_prefix,
              'Description' => description,
              'EnvironmentName' => name,
              'OptionSettings' => option_settings,
              'OptionsToRemove' => options_to_remove,
              'SolutionStackName' => solution_stack_name,
              'TemplateName' => template_name,
              'VersionLabel' => version_label
          }
          options.delete_if {|key, value| value.nil?}

          data = service.create_environment(options).body['CreateEnvironmentResult']
          merge_attributes(data)
          true
        end
      end
    end
  end
end