vagrant-oneandone 1.0.0
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 +7 -0
 - data/.gitignore +33 -0
 - data/.rspec +2 -0
 - data/.rubocop.yml +29 -0
 - data/.travis.yml +16 -0
 - data/Gemfile +12 -0
 - data/LICENSE +201 -0
 - data/README.md +275 -0
 - data/Rakefile +33 -0
 - data/box/README.md +13 -0
 - data/box/Vagrantfile +7 -0
 - data/box/dummy.box +0 -0
 - data/box/metadata.json +3 -0
 - data/examples/01_coreos_simple/Vagrantfile +12 -0
 - data/examples/02_django_centos7_app/Vagrantfile +14 -0
 - data/examples/03_ubuntu12.04_shell_provision/Vagrantfile +19 -0
 - data/examples/04_parallel_servers/Vagrantfile +26 -0
 - data/examples/05_debian8_docker_provision/Vagrantfile +17 -0
 - data/lib/vagrant-oneandone.rb +26 -0
 - data/lib/vagrant-oneandone/action.rb +163 -0
 - data/lib/vagrant-oneandone/action/connect_1and1.rb +28 -0
 - data/lib/vagrant-oneandone/action/create.rb +76 -0
 - data/lib/vagrant-oneandone/action/destroy.rb +69 -0
 - data/lib/vagrant-oneandone/action/get_state.rb +17 -0
 - data/lib/vagrant-oneandone/action/power_off.rb +49 -0
 - data/lib/vagrant-oneandone/action/power_on.rb +39 -0
 - data/lib/vagrant-oneandone/action/read_ssh_info.rb +54 -0
 - data/lib/vagrant-oneandone/action/read_state.rb +44 -0
 - data/lib/vagrant-oneandone/action/reload.rb +48 -0
 - data/lib/vagrant-oneandone/command/list_appliances.rb +38 -0
 - data/lib/vagrant-oneandone/command/list_datacenters.rb +36 -0
 - data/lib/vagrant-oneandone/command/list_firewalls.rb +32 -0
 - data/lib/vagrant-oneandone/command/list_ips.rb +45 -0
 - data/lib/vagrant-oneandone/command/list_load_balancers.rb +43 -0
 - data/lib/vagrant-oneandone/command/list_monitor_policies.rb +32 -0
 - data/lib/vagrant-oneandone/command/list_servers.rb +32 -0
 - data/lib/vagrant-oneandone/command/list_sizes.rb +43 -0
 - data/lib/vagrant-oneandone/command/main.rb +85 -0
 - data/lib/vagrant-oneandone/command/utils.rb +31 -0
 - data/lib/vagrant-oneandone/config.rb +65 -0
 - data/lib/vagrant-oneandone/config_resolver.rb +97 -0
 - data/lib/vagrant-oneandone/errors.rb +45 -0
 - data/lib/vagrant-oneandone/plugin.rb +36 -0
 - data/lib/vagrant-oneandone/provider.rb +41 -0
 - data/lib/vagrant-oneandone/version.rb +5 -0
 - data/locales/en.yml +124 -0
 - data/vagrant-oneandone.gemspec +29 -0
 - data/vagrant-spec.config.rb +9 -0
 - metadata +189 -0
 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'vagrant-oneandone/command/utils'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 4 
     | 
    
         
            +
              module OneAndOne
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Command
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class ListLoadBalancers < Vagrant.plugin('2', :command)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    include VagrantPlugins::OneAndOne::Command::Utils
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def execute
         
     | 
| 
      
 10 
     | 
    
         
            +
                      options = OptionParser.new do |o|
         
     | 
| 
      
 11 
     | 
    
         
            +
                        o.banner = I18n.t('vagrant_1and1.command.list_load_balancers')
         
     | 
| 
      
 12 
     | 
    
         
            +
                        o.separator ''
         
     | 
| 
      
 13 
     | 
    
         
            +
                        o.separator 'Usage: vagrant oneandone loadbalancers [<api_key>]'
         
     | 
| 
      
 14 
     | 
    
         
            +
                        o.separator ''
         
     | 
| 
      
 15 
     | 
    
         
            +
                      end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                      argv = parse_options(options)
         
     | 
| 
      
 18 
     | 
    
         
            +
                      return unless argv
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                      compute = fog_oneandone(argv[0])
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                      rows = []
         
     | 
| 
      
 23 
     | 
    
         
            +
                      compute.list_load_balancers.body.each do |lb|
         
     | 
| 
      
 24 
     | 
    
         
            +
                        rows << [
         
     | 
| 
      
 25 
     | 
    
         
            +
                          lb['id'],
         
     | 
| 
      
 26 
     | 
    
         
            +
                          lb['name'],
         
     | 
| 
      
 27 
     | 
    
         
            +
                          lb['ip'],
         
     | 
| 
      
 28 
     | 
    
         
            +
                          lb['method'],
         
     | 
| 
      
 29 
     | 
    
         
            +
                          lb['state'],
         
     | 
| 
      
 30 
     | 
    
         
            +
                          lb['datacenter']['country_code']
         
     | 
| 
      
 31 
     | 
    
         
            +
                        ]
         
     | 
| 
      
 32 
     | 
    
         
            +
                      end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                      display_table(
         
     | 
| 
      
 35 
     | 
    
         
            +
                        @env,
         
     | 
| 
      
 36 
     | 
    
         
            +
                        ['ID', 'Name', 'IP Address', 'Method', 'State', 'Data Center'],
         
     | 
| 
      
 37 
     | 
    
         
            +
                        rows
         
     | 
| 
      
 38 
     | 
    
         
            +
                      )
         
     | 
| 
      
 39 
     | 
    
         
            +
                    end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'vagrant-oneandone/command/utils'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 4 
     | 
    
         
            +
              module OneAndOne
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Command
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class ListMonitorPolicies < Vagrant.plugin('2', :command)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    include VagrantPlugins::OneAndOne::Command::Utils
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def execute
         
     | 
| 
      
 10 
     | 
    
         
            +
                      options = OptionParser.new do |o|
         
     | 
| 
      
 11 
     | 
    
         
            +
                        o.banner = I18n.t('vagrant_1and1.command.list_monitor_policies')
         
     | 
| 
      
 12 
     | 
    
         
            +
                        o.separator ''
         
     | 
| 
      
 13 
     | 
    
         
            +
                        o.separator 'Usage: vagrant oneandone monitors [<api_key>]'
         
     | 
| 
      
 14 
     | 
    
         
            +
                        o.separator ''
         
     | 
| 
      
 15 
     | 
    
         
            +
                      end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                      argv = parse_options(options)
         
     | 
| 
      
 18 
     | 
    
         
            +
                      return unless argv
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                      compute = fog_oneandone(argv[0])
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                      rows = []
         
     | 
| 
      
 23 
     | 
    
         
            +
                      compute.monitoring_policies.all.each do |mp|
         
     | 
| 
      
 24 
     | 
    
         
            +
                        rows << [mp.id, mp.name, mp.email, mp.state, mp.agent ? 'yes' : 'no']
         
     | 
| 
      
 25 
     | 
    
         
            +
                      end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                      display_table(@env, %w(ID Name Email State Agent), rows)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'vagrant-oneandone/command/utils'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 4 
     | 
    
         
            +
              module OneAndOne
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Command
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class ListServers < Vagrant.plugin('2', :command)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    include VagrantPlugins::OneAndOne::Command::Utils
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def execute
         
     | 
| 
      
 10 
     | 
    
         
            +
                      options = OptionParser.new do |o|
         
     | 
| 
      
 11 
     | 
    
         
            +
                        o.banner = I18n.t('vagrant_1and1.command.list_servers')
         
     | 
| 
      
 12 
     | 
    
         
            +
                        o.separator ''
         
     | 
| 
      
 13 
     | 
    
         
            +
                        o.separator 'Usage: vagrant oneandone servers [<api_key>]'
         
     | 
| 
      
 14 
     | 
    
         
            +
                        o.separator ''
         
     | 
| 
      
 15 
     | 
    
         
            +
                      end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                      argv = parse_options(options)
         
     | 
| 
      
 18 
     | 
    
         
            +
                      return unless argv
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                      compute = fog_oneandone(argv[0])
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                      rows = []
         
     | 
| 
      
 23 
     | 
    
         
            +
                      compute.servers.all.each do |s|
         
     | 
| 
      
 24 
     | 
    
         
            +
                        rows << [s.id, s.name, s.status['state'], s.datacenter['country_code']]
         
     | 
| 
      
 25 
     | 
    
         
            +
                      end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                      display_table(@env, ['ID', 'Name', 'State', 'Data Center'], rows)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'vagrant-oneandone/command/utils'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 4 
     | 
    
         
            +
              module OneAndOne
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Command
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class ListSizes < Vagrant.plugin('2', :command)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    include VagrantPlugins::OneAndOne::Command::Utils
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def execute
         
     | 
| 
      
 10 
     | 
    
         
            +
                      options = OptionParser.new do |o|
         
     | 
| 
      
 11 
     | 
    
         
            +
                        o.banner = I18n.t('vagrant_1and1.command.list_sizes')
         
     | 
| 
      
 12 
     | 
    
         
            +
                        o.separator ''
         
     | 
| 
      
 13 
     | 
    
         
            +
                        o.separator 'Usage: vagrant oneandone sizes [<api_key>]'
         
     | 
| 
      
 14 
     | 
    
         
            +
                        o.separator ''
         
     | 
| 
      
 15 
     | 
    
         
            +
                      end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                      argv = parse_options(options)
         
     | 
| 
      
 18 
     | 
    
         
            +
                      return unless argv
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                      compute = fog_oneandone(argv[0])
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                      rows = []
         
     | 
| 
      
 23 
     | 
    
         
            +
                      compute.list_fixed_servers.body.each do |s|
         
     | 
| 
      
 24 
     | 
    
         
            +
                        rows << [
         
     | 
| 
      
 25 
     | 
    
         
            +
                          s['id'],
         
     | 
| 
      
 26 
     | 
    
         
            +
                          s['name'],
         
     | 
| 
      
 27 
     | 
    
         
            +
                          s['hardware']['ram'],
         
     | 
| 
      
 28 
     | 
    
         
            +
                          s['hardware']['vcore'],
         
     | 
| 
      
 29 
     | 
    
         
            +
                          s['hardware']['cores_per_processor'],
         
     | 
| 
      
 30 
     | 
    
         
            +
                          s['hardware']['hdds'][0]['size']
         
     | 
| 
      
 31 
     | 
    
         
            +
                        ]
         
     | 
| 
      
 32 
     | 
    
         
            +
                      end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                      display_table(
         
     | 
| 
      
 35 
     | 
    
         
            +
                        @env,
         
     | 
| 
      
 36 
     | 
    
         
            +
                        ['ID', 'Name', 'RAM (GB)', 'CPU No.', 'Cores per CPU', 'Disk Size (GB)'],
         
     | 
| 
      
 37 
     | 
    
         
            +
                        rows
         
     | 
| 
      
 38 
     | 
    
         
            +
                      )
         
     | 
| 
      
 39 
     | 
    
         
            +
                    end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,85 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'vagrant-oneandone/action'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 4 
     | 
    
         
            +
              module OneAndOne
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Command
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class Main < Vagrant.plugin('2', :command)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    def self.synopsis
         
     | 
| 
      
 8 
     | 
    
         
            +
                      I18n.t('vagrant_1and1.command.synopsis')
         
     | 
| 
      
 9 
     | 
    
         
            +
                    end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    def initialize(argv, env)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                      @subcommands = Vagrant::Registry.new
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                      @subcommands.register(:appliances) do
         
     | 
| 
      
 17 
     | 
    
         
            +
                        require File.expand_path('../list_appliances', __FILE__)
         
     | 
| 
      
 18 
     | 
    
         
            +
                        ListAppliances
         
     | 
| 
      
 19 
     | 
    
         
            +
                      end
         
     | 
| 
      
 20 
     | 
    
         
            +
                      @subcommands.register(:datacenters) do
         
     | 
| 
      
 21 
     | 
    
         
            +
                        require File.expand_path('../list_datacenters', __FILE__)
         
     | 
| 
      
 22 
     | 
    
         
            +
                        ListDatacenters
         
     | 
| 
      
 23 
     | 
    
         
            +
                      end
         
     | 
| 
      
 24 
     | 
    
         
            +
                      @subcommands.register(:firewalls) do
         
     | 
| 
      
 25 
     | 
    
         
            +
                        require File.expand_path('../list_firewalls', __FILE__)
         
     | 
| 
      
 26 
     | 
    
         
            +
                        ListFirewalls
         
     | 
| 
      
 27 
     | 
    
         
            +
                      end
         
     | 
| 
      
 28 
     | 
    
         
            +
                      @subcommands.register(:ips) do
         
     | 
| 
      
 29 
     | 
    
         
            +
                        require File.expand_path('../list_ips', __FILE__)
         
     | 
| 
      
 30 
     | 
    
         
            +
                        ListIPs
         
     | 
| 
      
 31 
     | 
    
         
            +
                      end
         
     | 
| 
      
 32 
     | 
    
         
            +
                      @subcommands.register(:loadbalancers) do
         
     | 
| 
      
 33 
     | 
    
         
            +
                        require File.expand_path('../list_load_balancers', __FILE__)
         
     | 
| 
      
 34 
     | 
    
         
            +
                        ListLoadBalancers
         
     | 
| 
      
 35 
     | 
    
         
            +
                      end
         
     | 
| 
      
 36 
     | 
    
         
            +
                      @subcommands.register(:monitors) do
         
     | 
| 
      
 37 
     | 
    
         
            +
                        require File.expand_path('../list_monitor_policies', __FILE__)
         
     | 
| 
      
 38 
     | 
    
         
            +
                        ListMonitorPolicies
         
     | 
| 
      
 39 
     | 
    
         
            +
                      end
         
     | 
| 
      
 40 
     | 
    
         
            +
                      @subcommands.register(:servers) do
         
     | 
| 
      
 41 
     | 
    
         
            +
                        require File.expand_path('../list_servers', __FILE__)
         
     | 
| 
      
 42 
     | 
    
         
            +
                        ListServers
         
     | 
| 
      
 43 
     | 
    
         
            +
                      end
         
     | 
| 
      
 44 
     | 
    
         
            +
                      @subcommands.register(:sizes) do
         
     | 
| 
      
 45 
     | 
    
         
            +
                        require File.expand_path('../list_sizes', __FILE__)
         
     | 
| 
      
 46 
     | 
    
         
            +
                        ListSizes
         
     | 
| 
      
 47 
     | 
    
         
            +
                      end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                      super(argv, env)
         
     | 
| 
      
 50 
     | 
    
         
            +
                    end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                    def execute
         
     | 
| 
      
 53 
     | 
    
         
            +
                      if @main_args.include?('-h') || @main_args.include?('--help')
         
     | 
| 
      
 54 
     | 
    
         
            +
                        return help
         
     | 
| 
      
 55 
     | 
    
         
            +
                      end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                      command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
         
     | 
| 
      
 58 
     | 
    
         
            +
                      return help if !command_class || !@sub_command
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                      # Initialize and execute the command class
         
     | 
| 
      
 61 
     | 
    
         
            +
                      command_class.new(@sub_args, @env).execute
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                    def help
         
     | 
| 
      
 65 
     | 
    
         
            +
                      opts = OptionParser.new do |o|
         
     | 
| 
      
 66 
     | 
    
         
            +
                        o.banner = 'Usage: vagrant oneandone <subcommand> [<api_key>]'
         
     | 
| 
      
 67 
     | 
    
         
            +
                        o.separator ''
         
     | 
| 
      
 68 
     | 
    
         
            +
                        o.separator I18n.t('vagrant_1and1.command.available_subcommands')
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                        keys = []
         
     | 
| 
      
 71 
     | 
    
         
            +
                        @subcommands.each { |key| keys << key.to_s }
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                        keys.sort.each { |key| o.separator "     #{key}" }
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                        o.separator ''
         
     | 
| 
      
 76 
     | 
    
         
            +
                        o.separator I18n.t('vagrant_1and1.command.help_subcommands') +
         
     | 
| 
      
 77 
     | 
    
         
            +
                                    ' `vagrant oneandone <subcommand> -h`'
         
     | 
| 
      
 78 
     | 
    
         
            +
                      end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                      @env.ui.info(opts.help)
         
     | 
| 
      
 81 
     | 
    
         
            +
                    end
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
              end
         
     | 
| 
      
 85 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'fog-oneandone'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'terminal-table'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 5 
     | 
    
         
            +
              module OneAndOne
         
     | 
| 
      
 6 
     | 
    
         
            +
                module Command
         
     | 
| 
      
 7 
     | 
    
         
            +
                  module Utils
         
     | 
| 
      
 8 
     | 
    
         
            +
                    def fog_oneandone(token)
         
     | 
| 
      
 9 
     | 
    
         
            +
                      api_key = token ? token : ENV['ONEANDONE_API_KEY']
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                      raise Errors::NoApiKeyError unless api_key
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                      params = {
         
     | 
| 
      
 14 
     | 
    
         
            +
                        oneandone_api_key: api_key
         
     | 
| 
      
 15 
     | 
    
         
            +
                      }
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                      Fog::Compute::OneAndOne.new params
         
     | 
| 
      
 18 
     | 
    
         
            +
                    end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    def display_table(env, headers, rows)
         
     | 
| 
      
 21 
     | 
    
         
            +
                      table = Terminal::Table.new headings: headers, rows: rows
         
     | 
| 
      
 22 
     | 
    
         
            +
                      if env.respond_to?('ui')
         
     | 
| 
      
 23 
     | 
    
         
            +
                        env.ui.info(table.to_s)
         
     | 
| 
      
 24 
     | 
    
         
            +
                      else
         
     | 
| 
      
 25 
     | 
    
         
            +
                        env[:ui].info(table.to_s)
         
     | 
| 
      
 26 
     | 
    
         
            +
                      end
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'vagrant'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 4 
     | 
    
         
            +
              module OneAndOne
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Config < Vagrant.plugin('2', :config)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  attr_accessor :api_key
         
     | 
| 
      
 7 
     | 
    
         
            +
                  attr_accessor :name
         
     | 
| 
      
 8 
     | 
    
         
            +
                  attr_accessor :description
         
     | 
| 
      
 9 
     | 
    
         
            +
                  attr_accessor :fixed_size
         
     | 
| 
      
 10 
     | 
    
         
            +
                  attr_accessor :datacenter
         
     | 
| 
      
 11 
     | 
    
         
            +
                  attr_accessor :appliance
         
     | 
| 
      
 12 
     | 
    
         
            +
                  attr_accessor :password
         
     | 
| 
      
 13 
     | 
    
         
            +
                  attr_accessor :firewall_id
         
     | 
| 
      
 14 
     | 
    
         
            +
                  attr_accessor :ip
         
     | 
| 
      
 15 
     | 
    
         
            +
                  attr_accessor :load_balancer_id
         
     | 
| 
      
 16 
     | 
    
         
            +
                  attr_accessor :monitoring_policy_id
         
     | 
| 
      
 17 
     | 
    
         
            +
                  attr_accessor :timeout
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def initialize
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @api_key              = UNSET_VALUE
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @name                 = UNSET_VALUE
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @description          = UNSET_VALUE
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @fixed_size           = UNSET_VALUE
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @datacenter           = UNSET_VALUE
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @appliance            = UNSET_VALUE
         
     | 
| 
      
 26 
     | 
    
         
            +
                    @password             = UNSET_VALUE
         
     | 
| 
      
 27 
     | 
    
         
            +
                    @firewall_id          = UNSET_VALUE
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @ip                   = UNSET_VALUE
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @load_balancer_id     = UNSET_VALUE
         
     | 
| 
      
 30 
     | 
    
         
            +
                    @monitoring_policy_id = UNSET_VALUE
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @timeout              = UNSET_VALUE
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  def finalize!
         
     | 
| 
      
 35 
     | 
    
         
            +
                    @api_key              = ENV['ONEANDONE_API_KEY'] if @api_key == UNSET_VALUE
         
     | 
| 
      
 36 
     | 
    
         
            +
                    @name                 = nil if @name == UNSET_VALUE
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @password             = nil if @password == UNSET_VALUE
         
     | 
| 
      
 38 
     | 
    
         
            +
                    @appliance            = 'ubuntu1404-64std' if @appliance == UNSET_VALUE
         
     | 
| 
      
 39 
     | 
    
         
            +
                    @datacenter           = 'US' if @datacenter == UNSET_VALUE
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @fixed_size           = 'M' if @fixed_size == UNSET_VALUE
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @timeout              = nil if @timeout == UNSET_VALUE
         
     | 
| 
      
 42 
     | 
    
         
            +
                    @ip                   = nil if @ip == UNSET_VALUE
         
     | 
| 
      
 43 
     | 
    
         
            +
                    @firewall_id          = nil if @firewall_id == UNSET_VALUE
         
     | 
| 
      
 44 
     | 
    
         
            +
                    @load_balancer_id     = nil if @load_balancer_id == UNSET_VALUE
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @monitoring_policy_id = nil if @monitoring_policy_id == UNSET_VALUE
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @description          = nil if @description == UNSET_VALUE
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  def validate(machine)
         
     | 
| 
      
 50 
     | 
    
         
            +
                    errors = []
         
     | 
| 
      
 51 
     | 
    
         
            +
                    errors << I18n.t('vagrant_1and1.config.api_key_required') unless @api_key
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    key = machine.config.ssh.private_key_path
         
     | 
| 
      
 54 
     | 
    
         
            +
                    key = key[0] if key.is_a?(Array)
         
     | 
| 
      
 55 
     | 
    
         
            +
                    if !key
         
     | 
| 
      
 56 
     | 
    
         
            +
                      errors << I18n.t('vagrant_1and1.config.private_key')
         
     | 
| 
      
 57 
     | 
    
         
            +
                    elsif !File.file?(File.expand_path("#{key}.pub", machine.env.root_path))
         
     | 
| 
      
 58 
     | 
    
         
            +
                      errors << I18n.t('vagrant_1and1.config.public_key', key: "#{key}.pub")
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                    { 'OneAndOne Provider' => errors }
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,97 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 2 
     | 
    
         
            +
              module OneAndOne
         
     | 
| 
      
 3 
     | 
    
         
            +
                class ConfigResolver
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def initialize(env)
         
     | 
| 
      
 5 
     | 
    
         
            +
                    @logger  = Log4r::Logger.new('vagrant_1and1::action::config_resolver')
         
     | 
| 
      
 6 
     | 
    
         
            +
                    @compute = env[:oneandone_compute]
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @provider_config = env[:machine].provider_config
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def resolve_fixed_instance_size(env)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @logger.info 'Obtaining fixed-instance list'
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    env[:ui].info(I18n.t('vagrant_1and1.finding_fixed_instance_size'))
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    sizes = @compute.list_fixed_servers
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                    @logger.info "Finding size matching '#{@provider_config.fixed_size}'"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    size = find_matching(sizes.body, %w(id name), @provider_config.fixed_size)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    raise Errors::NoMatchingFixedSizeError unless size
         
     | 
| 
      
 22 
     | 
    
         
            +
                    size['id']
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  def resolve_appliance(env)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    @logger.info 'Obtaining server appliances'
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    env[:ui].info(I18n.t('vagrant_1and1.finding_appliance'))
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                    appliances = @compute.list_server_appliances(q: @provider_config.appliance)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    @logger.info "Finding server appliance matching '#{@provider_config.appliance}'"
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    app = find_matching(appliances.body, %w(id name), @provider_config.appliance)
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                    raise Errors::NoMatchingApplianceError unless app
         
     | 
| 
      
 37 
     | 
    
         
            +
                    raise Errors::UnsupportedApplianceError if 'linux'.casecmp(app['os_family']) != 0
         
     | 
| 
      
 38 
     | 
    
         
            +
                    app['id']
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  def resolve_datacenter(env)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    @logger.info 'Obtaining data centers'
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                    env[:ui].info(I18n.t('vagrant_1and1.finding_datacenter'))
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    datacenters = @compute.list_datacenters
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                    @logger.info "Finding data center matching '#{@provider_config.datacenter}'"
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                    dc = find_matching(datacenters.body, %w(id country_code), @provider_config.datacenter)
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                    raise Errors::NoMatchingDataCenterError unless dc
         
     | 
| 
      
 53 
     | 
    
         
            +
                    dc['id']
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  def resolve_public_ip(env)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    # do nothing unless IP is set
         
     | 
| 
      
 58 
     | 
    
         
            +
                    if @provider_config.ip
         
     | 
| 
      
 59 
     | 
    
         
            +
                      @logger.info 'Obtaining public IPs'
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                      env[:ui].info(I18n.t('vagrant_1and1.finding_public_ip'))
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                      public_ips = @compute.list_public_ips
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                      @logger.info "Finding public IP matching '#{@provider_config.ip}'"
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                      ip = find_matching(public_ips.body, %w(id ip), @provider_config.ip)
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                      raise Errors::NoMatchingPublicIPAddressError unless ip
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                      raise Errors::IPAddressInUseError if ip['assigned_to']
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                      ip['id']
         
     | 
| 
      
 74 
     | 
    
         
            +
                    end
         
     | 
| 
      
 75 
     | 
    
         
            +
                  end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  def resolve_ssh_key(env)
         
     | 
| 
      
 78 
     | 
    
         
            +
                    private_key = env[:machine].config.ssh.private_key_path
         
     | 
| 
      
 79 
     | 
    
         
            +
                    private_key = private_key[0] if private_key.is_a?(Array)
         
     | 
| 
      
 80 
     | 
    
         
            +
                    private_key = File.expand_path(private_key, env[:machine].env.root_path)
         
     | 
| 
      
 81 
     | 
    
         
            +
                    OneAndOne.public_key(private_key)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                  private
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                  def find_matching(collection, keys, value)
         
     | 
| 
      
 87 
     | 
    
         
            +
                    collection.each do |item|
         
     | 
| 
      
 88 
     | 
    
         
            +
                      keys.each do |key|
         
     | 
| 
      
 89 
     | 
    
         
            +
                        return item if value.casecmp(item[key]) == 0
         
     | 
| 
      
 90 
     | 
    
         
            +
                      end
         
     | 
| 
      
 91 
     | 
    
         
            +
                    end
         
     | 
| 
      
 92 
     | 
    
         
            +
                    @logger.error "No item key '#{value}' found in collection #{collection}"
         
     | 
| 
      
 93 
     | 
    
         
            +
                    nil
         
     | 
| 
      
 94 
     | 
    
         
            +
                  end
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
              end
         
     | 
| 
      
 97 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,45 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module VagrantPlugins
         
     | 
| 
      
 2 
     | 
    
         
            +
              module OneAndOne
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Errors
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class OneAndOneError < Vagrant::Errors::VagrantError
         
     | 
| 
      
 5 
     | 
    
         
            +
                    error_namespace('vagrant_1and1.errors')
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  class IPAddressInUseError < OneAndOneError
         
     | 
| 
      
 9 
     | 
    
         
            +
                    error_key(:ip_address_already_in_use)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  class NoApiKeyError < OneAndOneError
         
     | 
| 
      
 13 
     | 
    
         
            +
                    error_key(:missing_api_key)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  class NoMatchingFixedSizeError < OneAndOneError
         
     | 
| 
      
 17 
     | 
    
         
            +
                    error_key(:no_matching_fixed_size)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  class NoMatchingApplianceError < OneAndOneError
         
     | 
| 
      
 21 
     | 
    
         
            +
                    error_key(:no_matching_appliance)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  class NoMatchingDataCenterError < OneAndOneError
         
     | 
| 
      
 25 
     | 
    
         
            +
                    error_key(:no_matching_datacenter)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  class NoMatchingPublicIPAddressError < OneAndOneError
         
     | 
| 
      
 29 
     | 
    
         
            +
                    error_key(:no_matching_public_ip)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  class PublicKeyError < OneAndOneError
         
     | 
| 
      
 33 
     | 
    
         
            +
                    error_key(:ssh_key_not_found)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  class RsyncError < OneAndOneError
         
     | 
| 
      
 37 
     | 
    
         
            +
                    error_key(:rsync)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  class UnsupportedApplianceError < OneAndOneError
         
     | 
| 
      
 41 
     | 
    
         
            +
                    error_key(:unsupported_appliance)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     |