Packages
ex_aws
0.3.0
2.7.0
2.6.1
2.6.0
2.5.11
2.5.10
2.5.9
2.5.8
2.5.7
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.9
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.1
1.0.0-beta3
1.0.0-beta2
1.0.0-beta1
1.0.0-beta0
0.5.0
0.4.19
0.4.18
0.4.17
0.4.15
0.4.14
0.4.13
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.2.0
0.1.2
0.1.1
0.1.0
0.0.5
0.0.4
0.0.3
AWS client for Elixir. Currently supports Dynamo, DynamoStreams, EC2, Firehose, Kinesis, KMS, Lambda, RRDS, Route53, S3, SES, SNS, SQS, STS and others.
Current section
Files
Jump to
Current section
Files
lib/ex_aws/config.ex
defmodule ExAws.Config do
@moduledoc false
# Generates the configuration for a client.
# It starts with the defaults for a given environment
# and then merges in the common config from the ex_aws config root,
# and then finally any config specified for the particular service
@common_config [:http_client, :json_codec, :access_key_id, :secret_access_key, :debug_requests]
def build(client, opts \\ []) do
config = client
|> ExAws.Config.get
|> Map.merge(Enum.into(opts, %{}))
%{client | config: config}
|> retrieve_runtime_config
end
def get(%{__struct__: client_module, service: service}) do
config_root = client_module.config_root
unless config_root, do: raise "A valid configuration root is required in your #{service} client"
config = config_root |> Keyword.get(service, [])
common = ExAws.Config.Defaults.defaults
|> Keyword.merge(config_root)
|> Keyword.take(@common_config)
ExAws.Config.Defaults.defaults
|> Keyword.get(service, [])
|> Keyword.merge(common)
|> Keyword.merge(config)
|> Enum.into(%{})
end
def retrieve_runtime_config(%{config: config} = client) do
new_config = config
|> Enum.reduce(%{}, fn {k, v}, config ->
Map.put(config, k, retrieve_runtime_value(k, v, client))
end)
%{client | config: new_config}
end
def retrieve_runtime_value(_, {:system, env_key}, _) do
System.get_env(env_key)
end
def retrieve_runtime_value(k, :instance_role, client) do
client
|> ExAws.Config.AuthCache.get
|> Map.get(k)
end
def retrieve_runtime_value(key, values, client) when is_list(values) do
values
|> Stream.map(&retrieve_runtime_value(key, &1, client))
|> Enum.find(&(&1))
end
def retrieve_runtime_value(_, value, _), do: value
end