Closed vrathore18 closed 3 years ago
@vrathore18 thanks for the issue but this sounds more like a support case than an issue. I encourage you to work with MongoDB Atlas support so they can look at your actual deployment and help to determine what might be happening. They may also ask for more Terraform logs, details as this is not a lot of information to go on. fyi @nikhil-mongo
@themantissa : I don't think this is a MongoDB issue but a MongoDB provider issue. I was working fine 15 days ago. @nikhil-mongo : Any suggestions? Our whole deployment is failing because of this issue.
@vrathore18 we'd like to help but without anything pointing either way we can't do much. Have you opened a ticket with MongoDB Atlas support - that will give us the best path forward so we can see at least that side. Furthermore as the issue template states logs are vital to see what is going on with Terraform, without them we can't do much. @nikhil-mongo is going to tell you the same thing though he's in support so may be one of the engineers who help you in a support ticket.
@vrathore18 I agree with @themantissa on the point that this indeed is a support thing and not the provider issue. Terraform traverses all the files and changes until certain restrictions have been applied to ignore the changes. I will also request to raise the support case with us and share the below details:
export TF_LOG=DEBUG
export TF_LOG_PATH=debug.log
terraform apply
debug.log
file generated.We may need more details and sessions to figure this out but for start these details will be required.
Thanks
@themantissa @nikhil-mongo : I tried to reach out to Atlas support with this issue but there are asking to buy a premium support plan to look into this issue.
Hello my 2 cents here, As @nikhil-mongo, @themantissa this is more a support scenario.
However with the info you gave us. I tried to reproduce it. But it went okay. I was reading our provider code but we didn't change that resource since 2020. One thing I noticed we have a refresh state function. without enough information what I could think might be the issue could be a sync delay for the status.
But that depends on the way you associated the resources. Terraform creates a resource graph. As @nikhil-mongo said it transverse all the resources. Until the configuration matches the API state , once that is done. then there is no diff. (no more need to do an apply).
➜ online-archives git:(INTMDB-18-leofigy) ✗ terraform apply -var-file=auto.tfvars
Terraform will perform the following actions:
# mongodbatlas_custom_db_role.readWriteRole-test will be created
+ resource "mongodbatlas_custom_db_role" "readWriteRole-test" {
+ id = (known after apply)
+ project_id = <CENSORED>
+ role_name = "angel-readWriteRole-test"
+ actions {
+ action = "LIST_COLLECTIONS"
+ resources {
+ database_name = "SampleDB"
}
}
+ actions {
+ action = "FIND"
+ resources {
+ collection_name = "debug_api_request"
+ database_name = "SampleDB"
}
+ resources {
+ collection_name = "event-store"
+ database_name = "SampleDB"
}
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
mongodbatlas_custom_db_role.readWriteRole-test: Creating...
mongodbatlas_custom_db_role.readWriteRole-test: Creation complete after 3s [id=cHJvamVjdF9pZA==:NWNmNWE0NWE5Y2NmNjQwMGU2MDk4MWI2-cm9sZV9uYW1l:YW5nZWwtcmVhZFdyaXRlUm9sZS10ZXN0]
➜ online-archives git:(INTMDB-18-leofigy) ✗ terraform plan -var-file=auto.tfvars
mongodbatlas_custom_db_role.readWriteRole-test: Refreshing state...
No changes. Infrastructure is up-to-date.
@leofigy Thanks you for replaying and I understand what you are saying even when I am trying run single tf file its working. I am have about 12 .tf files and terraform is even applying that changes but in Atlas mongo not all 12 role are getting updated. 2-3 always left unchanged. I have share the screenshot here as well, please have a look.
So issue here is even when terraform applying the change same changes is not getting updated on Atlas mongo. And the big issue here is we are not even getting any error, if the API is failing to update then at least we should get some error messages
@vrathore18 I'd like to be able to assist more but without support engagement for this there's not a lot we can do beyond what we've been able to comment on here thus far. Also the screenshot doesn't really give us much info, configs and logs give much more info - though I can't promise we'll be able assist without having support engaged on both sides. Terraform is included with Atlas support so if you do not have that it definitely presents a challenge. It would help to know why you are running multiple tfs? If it works with one is there any reason you could stick to one if that works?
@themantissa This is my 1 tf file to create a custom role. Similary we have 12 roles. If we put all in one file it would be a mess. so to have a proper segregation we slit the files one per role.
The reason I am not pasting here the terraform apply logs is one its very long and second it contains very sensitive information. If it is really nessessory, I'll remove all the sensitive info manually and share on weekend. I have gone through the logs, I can see terraform detected the changes, I can see it applying the changes. The only part I can't understand is how to validate ifatlaas mongo's API is applying that changes.
auth.tf
resource "mongodbatlas_custom_db_role" "readWriteRole-auth" {
project_id = var.project_id
role_name = format("%s-readWriteRole-auth", var.name)
actions {
action = "LIST_COLLECTIONS"
resources {
database_name = format("sd-%s", var.name)
}
}
actions {
action = "FIND"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
actions {
action = "CHANGE_STREAM"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
actions {
action = "LIST_INDEXES"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
actions {
action = "COLL_STATS"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
actions {
action = "CREATE_COLLECTION"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
actions {
action = "CREATE_INDEX"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
actions {
action = "INSERT"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
actions {
action = "UPDATE"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
actions {
action = "REMOVE"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
actions {
action = "COLL_MOD"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
actions {
action = "DROP_INDEX"
resources {
collection_name = "event"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "event_api_request"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sectors"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-sizes"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-sides"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "country"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "languages"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-categories"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "contact-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "job-roles"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "jur"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "company-types"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "social-networks"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "section-tags"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "users"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "role"
database_name = format("sd-%s", var.name)
}
resources {
collection_name = "com-conf"
database_name = format("sd-%s", var.name)
}
}
}
Hi @themantissa just thinking load, what I think could be the issue. This seems more a bulk request (it has several collections associated to the actions of the role. At the end they get validated in the API). having 12 custom_db roles with that size. They could take more time than the expected. Of course the API will not fail, because the request can be in pending state, another plan/apply (refresh) will refresh the request.
But for this specific issue is out of my scope. We will need a support request, to actually track in the API what's going on. (more like a profiling)
@leofigy : This is exactly whats happening random roles is not getting updated. When I re-apply 1-2 times more then only all roles updates. But I have two concern here:
Agree @leofigy that this is out of our scope. @vrathore18 without support engagement to see what's happening we cannot answer your questions as we don't have access to the information to do so.
terraform:0.13.7 provider "mongodbatlas" { public_key = var.atlasmongo_publickey private_key = var.atlasmongo_privatekey version = "0.9.1" }
Issue: Terraform is not detecting/applying mongodb changes.
Summary: I created .tf files to provide restricted access to all our microservices. we run MongoDB-related changes before deploying the branches but for the last 10-15 days we started facing an issue that when we run terraform apply it detects changes for 40-50% of the files. We have to run
terraform apply
3-4 times to make all the changes in atlas MongoDB.Sample .tf file