avst-cloud 0.1.30 → 0.1.31
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 +4 -4
 - data/README.md +19 -0
 - data/avst-cloud.gemspec +2 -2
 - data/lib/avst-cloud/aws_connection.rb +18 -2
 - data/lib/avst-cloud/rackspace_connection.rb +44 -3
 - metadata +5 -5
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 7cad9e4dc98b83ba6e613a270ca130fa900e7bae7d1505c81a9a8af2f77271e1
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 477338b913d229c8a92c7d310aef13aa893974aeb78d1a70b9682f7aac5a4f0f
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 23da11cf970a260583b226e24051a2d519f9fe76101aa466963129bc9effb72dacc167221208cc0f6b6a089fc20806e53ed34ee462f8c579875051dfee7f79ae
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 3be32f47fca6e6689a9c614579db49c60a1f18d4d2a9905d32b21f4c2737a9d95cabcb15408e77124309a72b77d38a60867f8fcb3b8fd2597f86fc6c398e0781
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -35,6 +35,15 @@ The application depends on several gems listed in avst-cloud.gemspec file. Bundl 
     | 
|
| 
       35 
35 
     | 
    
         
             
                # ebs_size - disk size
         
     | 
| 
       36 
36 
     | 
    
         
             
                # hdd_device_path - hdd device path, may differ per ami/os
         
     | 
| 
       37 
37 
     | 
    
         
             
                # availability_zone - aws availability zone
         
     | 
| 
      
 38 
     | 
    
         
            +
                # additional_hdds - hash of additional disks to attach to server, must contain device_name (e.g. /dev/sda1) and ebs_size per each hdd
         
     | 
| 
      
 39 
     | 
    
         
            +
                additional_hdds:
         
     | 
| 
      
 40 
     | 
    
         
            +
                    'AppDisk':
         
     | 
| 
      
 41 
     | 
    
         
            +
                        device_name: '/dev/sdf'
         
     | 
| 
      
 42 
     | 
    
         
            +
                        ebs_size: '100'
         
     | 
| 
      
 43 
     | 
    
         
            +
                    'DatabaseDisk':
         
     | 
| 
      
 44 
     | 
    
         
            +
                        device_name: '/dev/sdg'
         
     | 
| 
      
 45 
     | 
    
         
            +
                        ebs_size: '50'
         
     | 
| 
      
 46 
     | 
    
         
            +
                        volume_type: 'gp2' #default value
         
     | 
| 
       38 
47 
     | 
    
         
             
                # vpc - virtual private cloud, defaults to nil, make sure you adjust subned_id and security_group_ids accordingly when setting this option
         
     | 
| 
       39 
48 
     | 
    
         | 
| 
       40 
49 
     | 
    
         
             
                server = conn.create_server(server_name, flavour, os, key_name, ssh_key, subnet_id, security_group_ids, ebs_size, hdd_device_path, ami_image_id, availability_zone)
         
     | 
| 
         @@ -53,6 +62,16 @@ The application depends on several gems listed in avst-cloud.gemspec file. Bundl 
     | 
|
| 
       53 
62 
     | 
    
         | 
| 
       54 
63 
     | 
    
         
             
            ### Rackspace
         
     | 
| 
       55 
64 
     | 
    
         | 
| 
      
 65 
     | 
    
         
            +
            # additional_hdds - hash of additional disks to attach to server, must contain device_name (e.g. /dev/sda1) and ebs_size per each hdd
         
     | 
| 
      
 66 
     | 
    
         
            +
                additional_hdds:
         
     | 
| 
      
 67 
     | 
    
         
            +
                    'AppDisk':
         
     | 
| 
      
 68 
     | 
    
         
            +
                        device_name: '/dev/sdf'
         
     | 
| 
      
 69 
     | 
    
         
            +
                        ebs_size: '100'
         
     | 
| 
      
 70 
     | 
    
         
            +
                        volume_type: 'SSD' #default value
         
     | 
| 
      
 71 
     | 
    
         
            +
                    'DatabaseDisk':
         
     | 
| 
      
 72 
     | 
    
         
            +
                        device_name: '/dev/sdg'
         
     | 
| 
      
 73 
     | 
    
         
            +
                        ebs_size: '50'
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
       56 
75 
     | 
    
         
             
            ```
         
     | 
| 
       57 
76 
     | 
    
         | 
| 
       58 
77 
     | 
    
         
             
                conn = AvstCloud::RackspaceConnection.new(provider_user, provider_pass, region)
         
     | 
    
        data/avst-cloud.gemspec
    CHANGED
    
    | 
         @@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            Gem::Specification.new do |spec|
         
     | 
| 
       6 
6 
     | 
    
         
             
                spec.name          = "avst-cloud"
         
     | 
| 
       7 
     | 
    
         
            -
                spec.version       = '0.1. 
     | 
| 
      
 7 
     | 
    
         
            +
                spec.version       = '0.1.31'
         
     | 
| 
       8 
8 
     | 
    
         
             
                spec.authors       = ["Martin Brehovsky", "Jon Bevan", "Matthew Hope"]
         
     | 
| 
       9 
9 
     | 
    
         
             
                spec.email         = ["mbrehovsky@adaptavist.com", "jbevan@adaptavist.com", "mhope@adaptavist.com"]
         
     | 
| 
       10 
10 
     | 
    
         
             
                spec.summary       = %q{Automated creation, bootstrapping and provisioning of servers }
         
     | 
| 
         @@ -25,7 +25,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       25 
25 
     | 
    
         
             
                spec.add_dependency "rvm-capistrano"
         
     | 
| 
       26 
26 
     | 
    
         
             
                spec.add_dependency "capistrano", "3.4.1"
         
     | 
| 
       27 
27 
     | 
    
         
             
                spec.add_dependency "capistrano-rvm"
         
     | 
| 
       28 
     | 
    
         
            -
                spec.add_dependency "net-ssh", " 
     | 
| 
      
 28 
     | 
    
         
            +
                spec.add_dependency "net-ssh", "4.2.0"
         
     | 
| 
       29 
29 
     | 
    
         
             
                spec.add_dependency "sshkit", "~> 1.16.0"
         
     | 
| 
       30 
30 
     | 
    
         
             
                spec.add_dependency "derelict"
         
     | 
| 
       31 
31 
     | 
    
         
             
                spec.add_dependency "docopt", ">= 0.5.0"
         
     | 
| 
         @@ -33,7 +33,7 @@ module AvstCloud 
     | 
|
| 
       33 
33 
     | 
    
         
             
                        AvstCloud::AwsServer.new(server, server_name, server.public_ip_address, root_user, root_password)
         
     | 
| 
       34 
34 
     | 
    
         
             
                    end
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                    def create_server(server_name, flavour, os, key_name, ssh_key, subnet_id, security_group_ids, ebs_size, hdd_device_path, ami_image_id, availability_zone, vpc=nil, created_by=nil, custom_tags={})
         
     | 
| 
      
 36 
     | 
    
         
            +
                    def create_server(server_name, flavour, os, key_name, ssh_key, subnet_id, security_group_ids, ebs_size, hdd_device_path, ami_image_id, availability_zone, additional_hdds={}, vpc=nil, created_by=nil, custom_tags={})
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                        # Permit named instances from DEFAULT_FLAVOURS
         
     | 
| 
       39 
39 
     | 
    
         
             
                        flavour = flavour || "t2.micro"
         
     | 
| 
         @@ -85,6 +85,7 @@ module AvstCloud 
     | 
|
| 
       85 
85 
     | 
    
         
             
                            logger.debug "availability_zone  - #{availability_zone}"
         
     | 
| 
       86 
86 
     | 
    
         
             
                            logger.debug "ebs_size           - #{ebs_size}"
         
     | 
| 
       87 
87 
     | 
    
         
             
                            logger.debug "hdd_device_path    - #{device_name}"
         
     | 
| 
      
 88 
     | 
    
         
            +
                            logger.debug "additional_hdds    - #{additional_hdds}"
         
     | 
| 
       88 
89 
     | 
    
         
             
                            logger.debug "vpc                - #{vpc}"
         
     | 
| 
       89 
90 
     | 
    
         | 
| 
       90 
91 
     | 
    
         
             
                            create_ebs_volume = nil
         
     | 
| 
         @@ -97,7 +98,22 @@ module AvstCloud 
     | 
|
| 
       97 
98 
     | 
    
         
             
                                                            'Ebs.VolumeSize' => ebs_size,
         
     | 
| 
       98 
99 
     | 
    
         
             
                                                        } 
         
     | 
| 
       99 
100 
     | 
    
         
             
                                                    ]
         
     | 
| 
      
 101 
     | 
    
         
            +
                                if additional_hdds and additional_hdds.is_a?(Hash)
         
     | 
| 
      
 102 
     | 
    
         
            +
                                    additional_hdds.each_value do |disk|
         
     | 
| 
      
 103 
     | 
    
         
            +
                                        volume_type = disk['volume_type'] || 'gp2'
         
     | 
| 
      
 104 
     | 
    
         
            +
                                        if disk['device_name'] && disk['ebs_size']
         
     | 
| 
      
 105 
     | 
    
         
            +
                                            create_ebs_volume << { 
         
     | 
| 
      
 106 
     | 
    
         
            +
                                                :DeviceName => disk['device_name'],
         
     | 
| 
      
 107 
     | 
    
         
            +
                                                'Ebs.VolumeType' => volume_type,
         
     | 
| 
      
 108 
     | 
    
         
            +
                                                'Ebs.VolumeSize' => disk['ebs_size']
         
     | 
| 
      
 109 
     | 
    
         
            +
                                            }
         
     | 
| 
      
 110 
     | 
    
         
            +
                                        else
         
     | 
| 
      
 111 
     | 
    
         
            +
                                            logger.warn "Failed to create additional hdd, required params device_name (e.g. /dev/sda1) or ebs_size missing: #{disk}"
         
     | 
| 
      
 112 
     | 
    
         
            +
                                        end 
         
     | 
| 
      
 113 
     | 
    
         
            +
                                    end 
         
     | 
| 
      
 114 
     | 
    
         
            +
                                end
         
     | 
| 
       100 
115 
     | 
    
         
             
                            end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
       101 
117 
     | 
    
         
             
                            tags = {
         
     | 
| 
       102 
118 
     | 
    
         
             
                                'Name' => server_name,
         
     | 
| 
       103 
119 
     | 
    
         
             
                                'os' => os
         
     | 
| 
         @@ -218,4 +234,4 @@ module AvstCloud 
     | 
|
| 
       218 
234 
     | 
    
         
             
                        connect.servers.all({'tag:Name' => server_name})
         
     | 
| 
       219 
235 
     | 
    
         
             
                    end
         
     | 
| 
       220 
236 
     | 
    
         
             
                end
         
     | 
| 
       221 
     | 
    
         
            -
            end
         
     | 
| 
      
 237 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -33,7 +33,7 @@ module AvstCloud 
     | 
|
| 
       33 
33 
     | 
    
         
             
                        AvstCloud::RackspaceServer.new(server, server_name, server.public_ip_address, root_user, root_password)
         
     | 
| 
       34 
34 
     | 
    
         
             
                    end
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                    def create_server(server_name, image_id, flavor_id='4')
         
     | 
| 
      
 36 
     | 
    
         
            +
                    def create_server(server_name, image_id, flavor_id='4', additional_hdds={})
         
     | 
| 
       37 
37 
     | 
    
         
             
                        server_number, os="ubuntu14"
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
39 
     | 
    
         
             
                        logger.debug "Creating Rackspace server:"
         
     | 
| 
         @@ -71,7 +71,22 @@ module AvstCloud 
     | 
|
| 
       71 
71 
     | 
    
         | 
| 
       72 
72 
     | 
    
         
             
                                logger.debug "The server has been successfully created, to login onto the server:\n\n"
         
     | 
| 
       73 
73 
     | 
    
         
             
                                logger.debug "\t ssh #{server.username}@#{server.public_ip_address}\n\n"
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
      
 74 
     | 
    
         
            +
                                if additional_hdds and additional_hdds.is_a?(Hash)
         
     | 
| 
      
 75 
     | 
    
         
            +
                                    additional_hdds.each do |disk_name, disk|
         
     | 
| 
      
 76 
     | 
    
         
            +
                                        if disk['device_name'] && disk['ebs_size']
         
     | 
| 
      
 77 
     | 
    
         
            +
                                            volume_type = disk['volume_type'] || 'SSD'
         
     | 
| 
      
 78 
     | 
    
         
            +
                                            volume = storageService.volumes.create(:size => disk['ebs_size'], :display_name => disk_name, :volume_type => volume_type)
         
     | 
| 
      
 79 
     | 
    
         
            +
                                            if volume && volume.id
         
     | 
| 
      
 80 
     | 
    
         
            +
                                                wait_for_hdd(volume.id, 'available')
         
     | 
| 
      
 81 
     | 
    
         
            +
                                                server.attach_volume volume.id, disk['device_name'] 
         
     | 
| 
      
 82 
     | 
    
         
            +
                                            else
         
     | 
| 
      
 83 
     | 
    
         
            +
                                                logger.error "Failed to create volume, #{disk_name}"
         
     | 
| 
      
 84 
     | 
    
         
            +
                                            end
         
     | 
| 
      
 85 
     | 
    
         
            +
                                        else
         
     | 
| 
      
 86 
     | 
    
         
            +
                                            logger.warn "Failed to create additional hdd, required params device_name (e.g. /dev/sda1) or ebs_size missing: #{disk}"
         
     | 
| 
      
 87 
     | 
    
         
            +
                                        end 
         
     | 
| 
      
 88 
     | 
    
         
            +
                                    end 
         
     | 
| 
      
 89 
     | 
    
         
            +
                                end
         
     | 
| 
       75 
90 
     | 
    
         
             
                            rescue Fog::Errors::TimeoutError
         
     | 
| 
       76 
91 
     | 
    
         
             
                                logger.debug "[TIMEOUT]\n\n"
         
     | 
| 
       77 
92 
     | 
    
         
             
                                logger.debug "This server is currently #{server.progress}% into the build process and is taking longer to complete than expected."
         
     | 
| 
         @@ -130,14 +145,40 @@ module AvstCloud 
     | 
|
| 
       130 
145 
     | 
    
         
             
                        unless @connection
         
     | 
| 
       131 
146 
     | 
    
         
             
                            logger.debug "Creating new connection to rackspace: #{@provider_user} #{Logging.mask_message(@provider_pass)} #{@region}"
         
     | 
| 
       132 
147 
     | 
    
         
             
                            @connection = Fog::Compute.new({
         
     | 
| 
       133 
     | 
    
         
            -
                                :provider             => ' 
     | 
| 
      
 148 
     | 
    
         
            +
                                :provider             => 'Rackspace',
         
     | 
| 
       134 
149 
     | 
    
         
             
                                :rackspace_username   => @provider_access_user,
         
     | 
| 
       135 
150 
     | 
    
         
             
                                :rackspace_api_key    => @provider_access_pass,
         
     | 
| 
      
 151 
     | 
    
         
            +
                                :rackspace_auth_url  => Fog::Rackspace::UK_AUTH_ENDPOINT,
         
     | 
| 
       136 
152 
     | 
    
         
             
                                :version => :v2,  # Use Next Gen Cloud Servers
         
     | 
| 
       137 
153 
     | 
    
         
             
                                :rackspace_region => @region
         
     | 
| 
       138 
154 
     | 
    
         
             
                            })
         
     | 
| 
       139 
155 
     | 
    
         
             
                        end
         
     | 
| 
       140 
156 
     | 
    
         
             
                        @connection
         
     | 
| 
       141 
157 
     | 
    
         
             
                    end
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
                    def storageService
         
     | 
| 
      
 160 
     | 
    
         
            +
                        unless @storageService
         
     | 
| 
      
 161 
     | 
    
         
            +
                            logger.debug "Creating new connection to rackspace storage service: #{@provider_user} #{Logging.mask_message(@provider_pass)} #{@region}"
         
     | 
| 
      
 162 
     | 
    
         
            +
                            @storageService = Fog::Rackspace::BlockStorage.new({
         
     | 
| 
      
 163 
     | 
    
         
            +
                                :rackspace_username  => @provider_access_user,        # Your Rackspace Username
         
     | 
| 
      
 164 
     | 
    
         
            +
                                :rackspace_api_key   => @provider_access_pass,              # Your Rackspace API key
         
     | 
| 
      
 165 
     | 
    
         
            +
                                :rackspace_auth_url  => Fog::Rackspace::UK_AUTH_ENDPOINT,
         
     | 
| 
      
 166 
     | 
    
         
            +
                                :rackspace_region    => @region
         
     | 
| 
      
 167 
     | 
    
         
            +
                            })
         
     | 
| 
      
 168 
     | 
    
         
            +
                        end
         
     | 
| 
      
 169 
     | 
    
         
            +
                        @storageService
         
     | 
| 
      
 170 
     | 
    
         
            +
                    end
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
                    def wait_for_hdd(id, expected_state)
         
     | 
| 
      
 173 
     | 
    
         
            +
                        logger.debug "Waiting for hdd state change...".yellow
         
     | 
| 
      
 174 
     | 
    
         
            +
                        (1..60).each do |c|
         
     | 
| 
      
 175 
     | 
    
         
            +
                            hdd = storageService.volumes.get(id)
         
     | 
| 
      
 176 
     | 
    
         
            +
                            if hdd.state == expected_state
         
     | 
| 
      
 177 
     | 
    
         
            +
                                break
         
     | 
| 
      
 178 
     | 
    
         
            +
                            end
         
     | 
| 
      
 179 
     | 
    
         
            +
                            logger.debug(.)
         
     | 
| 
      
 180 
     | 
    
         
            +
                            sleep 60
         
     | 
| 
      
 181 
     | 
    
         
            +
                        end
         
     | 
| 
      
 182 
     | 
    
         
            +
                    end
         
     | 
| 
       142 
183 
     | 
    
         
             
                end
         
     | 
| 
       143 
184 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: avst-cloud
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.31
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Martin Brehovsky
         
     | 
| 
         @@ -10,7 +10,7 @@ authors: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       11 
11 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       12 
12 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       13 
     | 
    
         
            -
            date: 2018- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2018-06-15 00:00:00.000000000 Z
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies:
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       16 
16 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -158,14 +158,14 @@ dependencies: 
     | 
|
| 
       158 
158 
     | 
    
         
             
                requirements:
         
     | 
| 
       159 
159 
     | 
    
         
             
                - - '='
         
     | 
| 
       160 
160 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       161 
     | 
    
         
            -
                    version:  
     | 
| 
      
 161 
     | 
    
         
            +
                    version: 4.2.0
         
     | 
| 
       162 
162 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       163 
163 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       164 
164 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       165 
165 
     | 
    
         
             
                requirements:
         
     | 
| 
       166 
166 
     | 
    
         
             
                - - '='
         
     | 
| 
       167 
167 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       168 
     | 
    
         
            -
                    version:  
     | 
| 
      
 168 
     | 
    
         
            +
                    version: 4.2.0
         
     | 
| 
       169 
169 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       170 
170 
     | 
    
         
             
              name: sshkit
         
     | 
| 
       171 
171 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -301,7 +301,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       301 
301 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       302 
302 
     | 
    
         
             
            requirements: []
         
     | 
| 
       303 
303 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       304 
     | 
    
         
            -
            rubygems_version: 2.7. 
     | 
| 
      
 304 
     | 
    
         
            +
            rubygems_version: 2.7.7
         
     | 
| 
       305 
305 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       306 
306 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       307 
307 
     | 
    
         
             
            summary: Automated creation, bootstrapping and provisioning of servers
         
     |