Class: Dependabot::Terraform::RegistryClient
- Inherits:
-
Object
- Object
- Dependabot::Terraform::RegistryClient
- Defined in:
- lib/dependabot/terraform/registry_client.rb
Overview
Terraform::RegistryClient is a basic API client to interact with a terraform registry: www.terraform.io/docs/registry/api.html
Constant Summary collapse
- PUBLIC_HOSTNAME =
"registry.terraform.io"
Instance Method Summary collapse
-
#all_module_versions(identifier:) ⇒ Array<Dependabot::Terraform::Version>
Fetch all the versions of a module, and return a Version representation of them.
-
#all_provider_versions(identifier:) ⇒ Array<Dependabot::Terraform::Version>
Fetch all the versions of a provider, and return a Version representation of them.
-
#initialize(hostname: PUBLIC_HOSTNAME, credentials: []) ⇒ RegistryClient
constructor
A new instance of RegistryClient.
-
#source(dependency:) ⇒ Object
Fetch the “source” for a module or provider.
Constructor Details
#initialize(hostname: PUBLIC_HOSTNAME, credentials: []) ⇒ RegistryClient
Returns a new instance of RegistryClient.
14 15 16 17 18 19 |
# File 'lib/dependabot/terraform/registry_client.rb', line 14 def initialize(hostname: PUBLIC_HOSTNAME, credentials: []) @hostname = hostname @tokens = credentials.each_with_object({}) do |item, memo| memo[item["host"]] = item["token"] if item["type"] == "terraform_registry" end end |
Instance Method Details
#all_module_versions(identifier:) ⇒ Array<Dependabot::Terraform::Version>
Fetch all the versions of a module, and return a Version representation of them.
“hashicorp/consul/aws”
43 44 45 46 47 48 49 |
# File 'lib/dependabot/terraform/registry_client.rb', line 43 def all_module_versions(identifier:) response = get(endpoint: "modules/#{identifier}/versions") JSON.parse(response). fetch("modules").first.fetch("versions"). map { |release| version_class.new(release.fetch("version")) } end |
#all_provider_versions(identifier:) ⇒ Array<Dependabot::Terraform::Version>
Fetch all the versions of a provider, and return a Version representation of them.
“hashicorp/aws”
28 29 30 31 32 33 34 |
# File 'lib/dependabot/terraform/registry_client.rb', line 28 def all_provider_versions(identifier:) response = get(endpoint: "providers/#{identifier}/versions") JSON.parse(response). fetch("versions"). map { |release| version_class.new(release.fetch("version")) } end |
#source(dependency:) ⇒ Object
Fetch the “source” for a module or provider. We use the API to fetch the source for a dependency, this typically points to a source code repository, and then instantiate a Dependabot::Source object that we can use to fetch Metadata about a specific version of the dependency.
we’re attempting to find
60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/dependabot/terraform/registry_client.rb', line 60 def source(dependency:) type = dependency.requirements.first[:source][:type] endpoint = if type == "registry" "modules/#{dependency.name}/#{dependency.version}" elsif type == "provider" "providers/#{dependency.name}/#{dependency.version}" else raise "Invalid source type" end response = get(endpoint: endpoint) source_url = JSON.parse(response).fetch("source") Source.from_url(source_url) if source_url end |