m1-terraform-provider-helper
m1-terraform-provider-helper copied to clipboard
Error: Failed to install provider
Receiving the error Error: Failed to install provider
when installing hashicorp/template in a repo which uses aws provider. Below is the exact error.
│ Error: Failed to install provider
│
│ Error while installing hashicorp/template v2.2.0: the local package for
│ registry.terraform.io/hashicorp/template 2.2.0 doesn't match any of the
│ checksums previously recorded in the dependency lock file (this might be
│ because the available checksums are for packages targeting different
│ platforms)
Following is the command that I used.
m1-terraform-provider-helper install hashicorp/template -v v2.2.0
Expected Behavior
When using the command the build generated should match the checksum in the lock file.
Actual Behavior
The generated build is not matching the checksum in lock file
Steps to Reproduce (including precondition)
- Run
m1-terraform-provider-helper install hashicorp/template -v v2.2.0
- Run
terraform init
- The error is generated at the end of above command
Screenshot on This Problem (if possible)
Output after running terraform init
Your Environment
- OS: MacOS Monterey 12.2.1
- m1-terraform-provider-helper version: Latest, installed yesterday
Please try to delete the terraform.lock.hcl
file and run terraform init
again. My guess is, that you run a terraform init
without local providers first, which downloaded providers and created the lockfile. Now when switching to local providers, of course the checksum is different, because we compile the providers ourselves.
In addition, could you post the outputs of m1-terraform-provider-helper status
and m1-terraform-provider-helper list
here?
Hi @Junkern ,
Thanks for the response.
Below is the output after deleting .terraform.lock.hcl
and running terraform init
.
Below is the output after running m1-terraform-provider-helper status
and m1-terraform-provider-helper list
This is interesting. The second screenshot states that m1-terraform-provider-helper
is active and that you have hashicorp/template
installed.
However, in the first screenshot it (successfully) downloads hashicorp/aws
and fails at hashicorp/template
( due to no darwin_arm64
image available). It apparently is not using the local providers, because it is downloading providers.
So, apparently terraform
does not know about the plugin dir. Can you check what is inside $HOME/.terraform.d/plugins
? Also, do you have $HOME/.terraformrc
file and paste the contents here?
@Junkern
There is no .terraformrc
file in home directory.
Below is the what is inside .terraform.d
directory.
The tree looks okay except the part after darwin_arm_64
. There should be a single executable inside darwin_arm_64
with the name terraform-provider-template_2.2.0_x5
. From the looks of your tree, there are two folders below the darwin_arm64
.
For me it looks like this:
plugins/registry.terraform.io/hashicorp/template
├── 2.1.2
│ └── darwin_arm64
│ └── terraform-provider-template_2.1.2_x5
└── 2.2.0
└── darwin_arm64
└── terraform-provider-template_2.2.0_x5
Could you run m1-terraform-provider-helper install hashicorp/template -v v2.2.0
again and paste the output of the log?
@Junkern
Below is the log after running m1-terraform-provider-helper install hashicorp/template -v v2.2.0
.
xxxx ~ % m1-terraform-provider-helper install hashicorp/template -v v2.2.0
Repo: https://github.com/hashicorp/terraform-provider-template
GitRepo: https://github.com/hashicorp/terraform-provider-template
HEAD is now at 920304d v2.2.0
2022/02/14 20:03:05 version: v2.2.0
==> Checking that code complies with gofmt requirements...
go install
Cancel
2022/02/14 20:03:07 Move from /Users/xx/go/bin/ to /Users/xx/.terraform.d/plugins/registry.terraform.io/hashicorp/template/2.2.0/darwin_arm64/_2.2.0_x5
2022/02/14 20:03:07 rename /Users/xx/go/bin/ /Users/xx/.terraform.d/plugins/registry.terraform.io/hashicorp/template/2.2.0/darwin_arm64/_2.2.0_x5: file exists
Okay, thanks. That was very helpful! I will provide a fix in a few hours!
@nishant-ci Should be fixed with version 0.5.1
. Thanks for reporting!
@Junkern
Thanks a lot it worked. Had to do some minor changes to lock file for it to work with terraform cloud but its fine.
I have never worked with terraform cloud, so I would be interested in those changes. Are those changes something m1-terraform-provider-helper
should do out of the box? Or with a flag?
@Junkern
So the thing is after doing terraform init
in darwin_arm64
. A new lock file is generated containing the hash for new provider package(darwin_arm64) that does not contain all the hashes for all the OSes and the OS in terraform cloud uses linux so its terraform init
failed when I pushed. A fix can be that we run terraform providers lock
but it wont work for darwin_arm64
since the provider that we installed with helper is not available for this platform.
So I went to a previous commit and copied the hashes for previous provider installation of linux(before mac I was using Ubuntu) and pasted them in current lock file. Those hashes start with zh
. This I did for only hashicorp/template
.
I think it can be done by this plugin. When it is ran from terraform project folder. We can add a flag where we want to use the hashes from previous installation. So when the provider is installed the old lock file is copied to a temp file and then deleted from current folder because only then the terraform init
will work and once it is successful we can create a merged version of new lock file and old lock file for that provider.
Hope you understand. Let me know if you need any help.
Hmmm, interesting. Thanks for the explanation! This could make for a good addition to the tool, but I will have to think things through first.
@nishant-ci I just released v0.7.0
which has a m1-terraform-provider-helper lockfile upgrade
command to add the hashes of the local providers to the lockfile.
Does that help with your problem?
I'm having similar issue when using m1-terraform-provider-helper install hashicorp/google
The output error is error: Malformed version:
I couldnot find the terraform.lock.hcl
file to delet, since terraform init never worked for me!
Please supply the -v
flag to supply a value
As shown in the README
m1-terraform-provider-helper activate # (In case you have not activated the helper)
m1-terraform-provider-helper install hashicorp/vault -v v2.10.0 # Install and compile
Closing, as the initial problem was fixed.
Might have a similar issue, no executable seems to be generated. Also the provider is not created in go/bin
m1-terraform-provider-helper install opsgenie/opsgenie -v v0.6.11
Getting provider data from terraform registry
Getting source code...
Compiling...
2022/09/19 15:54:57 rename /.../go/bin/terraform-provider-opsgenie /.../.terraform.d/plugins/registry.terraform.io/opsgenie/opsgenie/0.6.11/darwin_arm64/terraform-provider-opsgenie_0.6.11_x5: no such file or directory
m1-terraform-provider-helper list
opsgenie/opsgenie -> 0.6.11
m1-terraform-provider-helper status
Status: Active
Local providers are used
terraform init
│ Error: Failed to install provider
│
│ Error while installing opsgenie/opsgenie v0.6.11: provider binary not
│ found: could not find executable file starting with
│ terraform-provider-opsgenie
This is probably because the opsgenie
provider is using goreleaser
in their make build
and that places the files somewhere unexpected. @GustavJaner could you open a seperate issue for that?