class Cyoi::Cli::AutoDetection::AutoDetectionFog
Public Instance Methods
Displays a prompt for known IaaS that are configured within .fog config file if found.
If no ~/.fog file found or user chooses “Alternate credentials” then no changes are made to settings.
For example:
-
AWS (default)
-
AWS (bosh)
-
Alternate credentials
Choose infrastructure: 1
If .fog config only contains one provider, do not prompt.
fog config file looks like: :default:
:aws_access_key_id: PERSONAL_ACCESS_KEY :aws_secret_access_key: PERSONAL_SECRET
:bosh:
:aws_access_key_id: SPECIAL_IAM_ACCESS_KEY :aws_secret_access_key: SPECIAL_IAM_SECRET_KEY
Convert this into: { “AWS (default)” => {:aws_access_key_id => …}, “AWS (bosh)” => {…} }
Then display options to user to choose.
Currently detects following fog providers:
-
AWS
-
OpenStack
If “Alternate credentials” is selected, then user is prompted for fog credentials:
-
provider?
-
access keys?
-
API URI or region?
Sets (unless 'Alternate credentials' is chosen)
-
settings.provider.name
-
settings.provider.credentials
For AWS, the latter has keys:
{:aws_access_key_id, :aws_secret_access_key}
For OpenStack, the latter has keys:
{:openstack_username, :openstack_api_key, :openstack_tenant :openstack_auth_url, :openstack_region }
# File lib/cyoi/cli/auto_detection/auto_detection_fog.rb, line 52 def auto_detection_choices fog_choices = {} # Prepare menu options: # each provider/profile name gets a menu choice option fog_config.inject({}) do |iaas_options, fog_profile| profile_name, profile = fog_profile if profile[:aws_access_key_id] fog_choices["AWS (#{profile_name})"] = { "name" => "aws", "provider" => "AWS", "aws_access_key_id" => profile[:aws_access_key_id], "aws_secret_access_key" => profile[:aws_secret_access_key] } end if profile[:openstack_username] choice = { "name" => "openstack", "provider" => "OpenStack", "openstack_username" => profile[:openstack_username], "openstack_api_key" => profile[:openstack_api_key], "openstack_tenant" => profile[:openstack_tenant], "openstack_auth_url" => profile[:openstack_auth_url], } choice["openstack_region"] = profile[:openstack_region] if profile[:openstack_region] fog_choices["OpenStack (#{profile_name})"] = choice end if profile[:vsphere_username] fog_choices["vSphere (#{profile_name})"] = { "name" => "vsphere", "provider" => "vSphere", "vsphere_username" => profile[:vsphere_username], "vsphere_password" => profile[:vsphere_password], "vsphere_server" => profile[:vsphere_server], "vsphere_expected_pubkey_hash" => profile[:vsphere_expected_pubkey_hash] } end end fog_choices end
# File lib/cyoi/cli/auto_detection/auto_detection_fog.rb, line 92 def fog_config @fog_config ||= begin if File.exists?(File.expand_path(fog_config_path)) puts "Auto-detected infrastructure API credentials at #{fog_config_path} (override with $FOG)" YAML.load_file(File.expand_path(fog_config_path)) else {} end end end
# File lib/cyoi/cli/auto_detection/auto_detection_fog.rb, line 103 def fog_config_path ENV['FOG'] || "~/.fog" end