chef-metal-fog 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/chef_metal_fog/fog_driver.rb +52 -11
- data/lib/chef_metal_fog/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f700b696e9287fbc6a14e028b27879efb1841828
|
4
|
+
data.tar.gz: eded4c9ec79313327158939eeeff70d09ef73e1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 043b903bcc06d9337d2fc0910007e43a480d6ab7b70f2eb03f98a08f8825cc57235d937b8ecde0a0d48cc4cced0157b94d8f4858eb976b6286ee1e642baca204
|
7
|
+
data.tar.gz: d0f843d5bcdeeec31bc9beeb7ff033ac3befca843ba395a6a82423af7013f0dc7c01b0ecf0e4822542d0772dff294065259541b11f5526fc756dd4dedb1e9369
|
@@ -418,7 +418,7 @@ module ChefMetalFog
|
|
418
418
|
|
419
419
|
def bootstrap_options_for(action_handler, machine_spec, machine_options)
|
420
420
|
bootstrap_options = symbolize_keys(machine_options[:bootstrap_options] || {})
|
421
|
-
if !bootstrap_options[:key_name]
|
421
|
+
if (provider == 'DigitalOcean' || provider == 'AWS') && !bootstrap_options[:key_name]
|
422
422
|
bootstrap_options[:key_name] = overwrite_default_key_willy_nilly(action_handler)
|
423
423
|
end
|
424
424
|
tags = {
|
@@ -445,7 +445,11 @@ module ChefMetalFog
|
|
445
445
|
bootstrap_options[:region_name] ||= 'San Francisco 1'
|
446
446
|
bootstrap_options[:region_id] = compute.regions.select { |region| region.name == bootstrap_options[:region_name] }.first.id
|
447
447
|
end
|
448
|
-
|
448
|
+
found_key = compute.ssh_keys.select { |k| k.name == bootstrap_options[:key_name] }.first
|
449
|
+
if !found_key
|
450
|
+
raise "Could not find key named '#{bootstrap_options[:key_name]}' on #{driver_url}"
|
451
|
+
end
|
452
|
+
bootstrap_options[:ssh_key_ids] ||= [ found_key.id ]
|
449
453
|
|
450
454
|
# You don't get to specify name yourself
|
451
455
|
bootstrap_options[:name] = machine_spec.name
|
@@ -484,7 +488,7 @@ module ChefMetalFog
|
|
484
488
|
end
|
485
489
|
end
|
486
490
|
|
487
|
-
def ssh_options_for(machine_spec, server)
|
491
|
+
def ssh_options_for(machine_spec, machine_options, server)
|
488
492
|
result = {
|
489
493
|
# TODO create a user known hosts file
|
490
494
|
# :user_known_hosts_file => vagrant_ssh_config['UserKnownHostsFile'],
|
@@ -492,13 +496,15 @@ module ChefMetalFog
|
|
492
496
|
:auth_methods => [ 'publickey' ],
|
493
497
|
:keys_only => true,
|
494
498
|
:host_key_alias => "#{server.id}.#{provider}"
|
495
|
-
}
|
499
|
+
}.merge(machine_options[:ssh_options] || {})
|
496
500
|
if server.respond_to?(:private_key) && server.private_key
|
497
501
|
result[:key_data] = [ server.private_key ]
|
498
502
|
elsif server.respond_to?(:key_name)
|
499
503
|
result[:key_data] = [ get_private_key(server.key_name) ]
|
500
504
|
elsif machine_spec.location['key_name']
|
501
505
|
result[:key_data] = [ get_private_key(machine_spec.location['key_name']) ]
|
506
|
+
elsif machine_options[:bootstrap_options][:key_name]
|
507
|
+
result[:key_data] = [ get_private_key(machine_options[:bootstrap_options][:key_name]) ]
|
502
508
|
else
|
503
509
|
# TODO make a way to suggest other keys to try ...
|
504
510
|
raise "No key found to connect to #{machine_spec.name}!"
|
@@ -507,7 +513,7 @@ module ChefMetalFog
|
|
507
513
|
end
|
508
514
|
|
509
515
|
def create_ssh_transport(machine_spec, machine_options, server)
|
510
|
-
ssh_options = ssh_options_for(machine_spec, server)
|
516
|
+
ssh_options = ssh_options_for(machine_spec, machine_options, server)
|
511
517
|
# If we're on AWS, the default is to use ubuntu, not root
|
512
518
|
if provider == 'AWS'
|
513
519
|
username = machine_spec.location['ssh_username'] || 'ubuntu'
|
@@ -547,7 +553,11 @@ module ChefMetalFog
|
|
547
553
|
new_compute_options = {}
|
548
554
|
new_compute_options[:provider] = provider
|
549
555
|
new_config = { :driver_options => { :compute_options => new_compute_options }}
|
550
|
-
|
556
|
+
new_defaults = {
|
557
|
+
:driver_options => { :compute_options => {} },
|
558
|
+
:machine_options => { :bootstrap_options => {} }
|
559
|
+
}
|
560
|
+
result = Cheffish::MergedConfig.new(new_config, config, new_defaults)
|
551
561
|
|
552
562
|
# Get data from the identifier in the URL
|
553
563
|
if id && id != ''
|
@@ -593,8 +603,7 @@ module ChefMetalFog
|
|
593
603
|
new_compute_options[:aws_access_key_id] = aws_profile[:aws_access_key_id]
|
594
604
|
new_compute_options[:aws_secret_access_key] = aws_profile[:aws_secret_access_key]
|
595
605
|
new_compute_options[:aws_session_token] = aws_profile[:aws_security_token]
|
596
|
-
|
597
|
-
new_compute_options[:region] ||= aws_profile[:region] if aws_profile.has_key?(:region) && !compute_options.has_key?(:region)
|
606
|
+
new_defaults[:driver_options][:compute_options][:region] = aws_profile[:region]
|
598
607
|
when 'OpenStack'
|
599
608
|
# TODO it is supposed to be unnecessary to load credentials from fog this way;
|
600
609
|
# why are we doing it?
|
@@ -614,6 +623,38 @@ module ChefMetalFog
|
|
614
623
|
new_compute_options[:rackspace_region] ||= credential[:rackspace_region]
|
615
624
|
new_compute_options[:rackspace_endpoint] ||= credential[:rackspace_endpoint]
|
616
625
|
new_compute_options[:rackspace_compute_url] ||= credential[:rackspace_compute_url]
|
626
|
+
when 'DigitalOcean'
|
627
|
+
# This uses ~/.tugboat, generated by "tugboat authorize" - see https://github.com/pearkes/tugboat
|
628
|
+
tugboat_file = File.expand_path('~/.tugboat')
|
629
|
+
if File.exist?(tugboat_file)
|
630
|
+
tugboat_data = YAML.load(IO.read(tugboat_file))
|
631
|
+
new_compute_options.merge!(
|
632
|
+
:digitalocean_client_id => tugboat_data['authentication']['client_key'],
|
633
|
+
:digitalocean_api_key => tugboat_data['authentication']['api_key']
|
634
|
+
)
|
635
|
+
new_defaults[:machine_options].merge!(
|
636
|
+
#:ssh_username => tugboat_data['ssh']['ssh_user'],
|
637
|
+
:ssh_options => {
|
638
|
+
:port => tugboat_data['ssh']['ssh_port'],
|
639
|
+
# TODO we ignore ssh_key_path in favor of ssh_key / key_name stuff
|
640
|
+
#:key_data => [ IO.read(tugboat_data['ssh']['ssh_key_path']) ] # TODO use paths, not data?
|
641
|
+
}
|
642
|
+
)
|
643
|
+
|
644
|
+
# TODO verify that the key_name exists and matches the ssh key path
|
645
|
+
|
646
|
+
new_defaults[:machine_options][:bootstrap_options].merge!(
|
647
|
+
:region_id => tugboat_data['defaults']['region'].to_i,
|
648
|
+
:image_id => tugboat_data['defaults']['image'].to_i,
|
649
|
+
:size_id => tugboat_data['defaults']['region'].to_i,
|
650
|
+
:private_networking => tugboat_data['defaults']['private_networking'] == 'true',
|
651
|
+
:backups_enabled => tugboat_data['defaults']['backups_enabled'] == 'true',
|
652
|
+
)
|
653
|
+
ssh_key = tugboat_data['defaults']['ssh_key']
|
654
|
+
if ssh_key && ssh_key.size > 0
|
655
|
+
new_defaults[:machine_options][:bootstrap_options][:key_name] = ssh_key
|
656
|
+
end
|
657
|
+
end
|
617
658
|
end
|
618
659
|
|
619
660
|
id = case provider
|
@@ -622,11 +663,11 @@ module ChefMetalFog
|
|
622
663
|
new_config[:driver_options][:aws_account_info] = account_info
|
623
664
|
"#{account_info[:aws_account_id]}:#{result[:driver_options][:compute_options][:region]}"
|
624
665
|
when 'DigitalOcean'
|
625
|
-
|
666
|
+
result[:driver_options][:compute_options][:digitalocean_client_id]
|
626
667
|
when 'OpenStack'
|
627
|
-
|
668
|
+
result[:driver_options][:compute_options][:openstack_auth_url]
|
628
669
|
when 'Rackspace'
|
629
|
-
|
670
|
+
result[:driver_options][:compute_options][:rackspace_auth_url]
|
630
671
|
when 'CloudStack'
|
631
672
|
host = result[:driver_options][:compute_options][:cloudstack_host]
|
632
673
|
path = result[:driver_options][:compute_options][:cloudstack_path] || '/client/api'
|