File: create_cluster.rb

package info (click to toggle)
ruby-fog-aws 3.18.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 8,140 kB
  • sloc: ruby: 73,328; javascript: 14; makefile: 9; sh: 4
file content (148 lines) | stat: -rw-r--r-- 9,863 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
144
145
146
147
148
module Fog
  module AWS
    class Redshift
      class Real
        require 'fog/aws/parsers/redshift/cluster'

        # ==== Parameters
        #
        # @param [Hash] options
        # * :db_name - (String)
        #    The name of the first database to be created when the cluster is created. To create
        #    additional databases after the cluster is created, connect to the cluster with a SQL
        #    client and use SQL commands to create a database. Default: dev Constraints: Must
        #    contain 1 to 64 alphanumeric characters. Must contain only lowercase letters.
        # * :cluster_identifier - required - (String)
        #    A unique identifier for the cluster. You use this identifier to refer to the cluster
        #    for any subsequent cluster operations such as deleting or modifying. Must be unique
        #    for all clusters within an AWS account. Example: myexamplecluster
        # * :cluster_type - (String)
        #    Type of the cluster. When cluster type is specified as single-node, the NumberOfNodes
        #    parameter is not required. multi-node, the NumberOfNodes parameter is required. Valid
        #    Values: multi-node | single-node Default: multi-node
        # * :node_type - required - (String)
        #    The node type to be provisioned. Valid Values: dw.hs1.xlarge | dw.hs1.8xlarge.
        # * :master_username - required - (String)
        #    The user name associated with the master user account for the cluster that is being
        #    created. Constraints: Must be 1 - 128 alphanumeric characters. First character must
        #    be a letter. Cannot be a reserved word.
        # * :master_user_password - required - (String)
        #    The password associated with the master user account for the cluster that is being
        #    created. Constraints: Must be between 8 and 64 characters in length. Must contain at
        #    least one uppercase letter. Must contain at least one lowercase letter. Must contain
        #    one number.
        # * :cluster_security_groups - (Array<String>)
        #    A list of security groups to be associated with this cluster. Default: The default
        #    cluster security group for Amazon Redshift.
        # * :vpc_security_group_ids - (Array<String>)
        #    A list of Virtual Private Cloud (VPC) security groups to be associated with the
        #    cluster. Default: The default VPC security group is associated with the cluster.
        # * :cluster_subnet_group_name - (String)
        #    The name of a cluster subnet group to be associated with this cluster. If this
        #    parameter is not provided the resulting cluster will be deployed outside virtual
        #    private cloud (VPC).
        # * :availability_zone - (String)
        #    The EC2 Availability Zone (AZ) in which you want Amazon Redshift to provision the
        #    cluster. Default: A random, system-chosen Availability Zone in the region that is
        #    specified by the endpoint. Example: us-east-1d Constraint: The specified
        #    Availability Zone must be in the same region as the current endpoint.
        # * :preferred_maintenance_window - (String)
        #    The weekly time range (in UTC) during which automated cluster maintenance can occur.
        #    Format: ddd:hh24:mi-ddd:hh24:mi Default: A 30-minute window selected at random from
        #    an 8-hour block of time per region, occurring on a random day of the week.
        #    Constraints: Minimum 30-minute window.
        # * :cluster_parameter_group_name - (String)
        #    The name of the parameter group to be associated with this cluster. Default: The
        #    default Amazon Redshift cluster parameter group. Constraints: Must be 1 to 255
        #    alphanumeric characters or hyphens. First character must be a letter. Cannot end
        #    with a hyphen or contain two consecutive hyphens.
        # * :automated_snapshot_retention_period - (Integer)
        #    Number of days that automated snapshots are retained. If the value is 0, automated
        #    snapshots are disabled.  Default: 1 Constraints: Must be a value from 0 to 35.
        # * :port - (Integer)
        #    The port number on which the cluster accepts incoming connections. Default: 5439
        #    Valid Values: 1150-65535
        # * :cluster_version - (String)
        #    The version of the Amazon Redshift engine software that you want to deploy on the
        #    cluster. The version selected runs on all the nodes in the cluster. Constraints:
        #    Only version 1.0 is currently available. Example: 1.0
        # * :allow_version_upgrade - (Boolean)
        #    If `true` , upgrades can be applied during the maintenance window to the Amazon
        #    Redshift engine that is running on the cluster. Default:  `true`
        # * :number_of_nodes - (Integer)
        #    The number of compute nodes in the cluster. This parameter is required when the
        #    ClusterType parameter is specified as multi-node. If you don't specify this parameter,
        #    you get a single-node cluster. When requesting a multi-node cluster, you must specify
        #    the number of nodes that you want in the cluster. Default: 1 Constraints: Value must
        #    be at least 1 and no more than 100.
        # * :publicly_accessible - (Boolean)
        #    If `true` , the cluster can be accessed from a public network.
        # * :encrypted - (Boolean)
        #    If `true` , the data in cluster is encrypted at rest. Default:  `false`

        # ==== See Also
        # http://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateCluster.html
        def create_cluster(options = {})
          db_name                             = options[:db_name]
          cluster_identifier                  = options[:cluster_identifier]
          cluster_type                        = options[:cluster_type]
          node_type                           = options[:node_type]
          master_username                     = options[:master_username]
          master_user_password                = options[:master_user_password]
          cluster_subnet_group_name           = options[:cluster_subnet_group_name]
          availability_zone                   = options[:availability_zone]
          preferred_maintenance_window        = options[:preferred_maintenance_window]
          cluster_parameter_group_name        = options[:cluster_parameter_group_name]
          automated_snapshot_retention_period = options[:automated_snapshot_retention_period]
          port                                = options[:port]
          cluster_version                     = options[:cluster_version]
          allow_version_upgrade               = options[:allow_version_upgrade]
          number_of_nodes                     = options[:number_of_nodes]
          publicly_accessible                 = options[:publicly_accessible]
          encrypted                           = options[:encrypted]

          path = "/"
          params = {
            :idempotent => true,
            :headers    => {},
            :path       => path,
            :method     => :put,
            :query      => {},
            :parser     => Fog::Parsers::Redshift::AWS::Cluster.new
          }

          if cluster_security_groups = options.delete(:ClusterSecurityGroups)
            params[:query].merge!(Fog::AWS.indexed_param('ClusterSecurityGroups.member.%d', [*cluster_security_groups]))
          end

          if vpc_security_group_ids = options.delete(:VpcSecurityGroupIds)
            params[:query].merge!(Fog::AWS.indexed_param('VpcSecurityGroupIds.member.%d', [*vpc_security_group_ids]))
          end

          params[:query]['Action']                           = 'CreateCluster'
          params[:query]['DBName']                           = db_name if db_name
          params[:query]['ClusterIdentifier']                = cluster_identifier if cluster_identifier
          params[:query]['ClusterType']                      = cluster_type if cluster_type
          params[:query]['NodeType']                         = node_type if node_type
          params[:query]['MasterUsername']                   = master_username if master_username
          params[:query]['MasterUserPassword']               = master_user_password if master_user_password
          params[:query]['ClusterSecurityGroups']            = cluster_security_groups if cluster_security_groups
          params[:query]['VpcSecurityGroupIds']              = vpc_security_group_ids if vpc_security_group_ids
          params[:query]['ClusterSubnetGroupName']           = cluster_subnet_group_name if cluster_subnet_group_name
          params[:query]['AvailabilityZone']                 = availability_zone if availability_zone
          params[:query]['PreferredMaintenanceWindow']       = preferred_maintenance_window if preferred_maintenance_window
          params[:query]['ClusterParameterGroupName']        = cluster_parameter_group_name if cluster_parameter_group_name
          params[:query]['AutomatedSnapshotRetentionPeriod'] = automated_snapshot_retention_period if automated_snapshot_retention_period
          params[:query]['Port']                             = port if port
          params[:query]['ClusterVersion']                   = cluster_version if cluster_version
          params[:query]['AllowVersionUpgrade']              = allow_version_upgrade if allow_version_upgrade
          params[:query]['NumberOfNodes']                    = number_of_nodes if number_of_nodes
          params[:query]['PubliclyAccessible']               = publicly_accessible if publicly_accessible
          params[:query]['Encrypted']                        = encrypted if encrypted

          request(params)
        end
      end
    end
  end
end