terraform-provider-mysql icon indicating copy to clipboard operation
terraform-provider-mysql copied to clipboard

Root object was present, but now absent. on mysql_grant

Open williamohara opened this issue 6 months ago • 3 comments

Provider version

Run terraform -v

Terraform v1.9.4
on linux_amd64
+ provider registry.terraform.io/hashicorp/azuread v2.33.0
+ provider registry.terraform.io/hashicorp/azurerm v3.48.0
+ provider registry.terraform.io/hashicorp/helm v2.14.0
+ provider registry.terraform.io/hashicorp/kubernetes v2.18.1
+ provider registry.terraform.io/hashicorp/time v0.9.1
+ provider registry.terraform.io/petoju/mysql v3.0.63

You can find the latest version mentioned here: https://registry.terraform.io/providers/petoju/mysql/latest

MySQL version and settings

Azure Flexible MySQL configured in terraform as below. (Notice the SQL mode configs)

resource "azurerm_mysql_flexible_server" "subscripify_mysql_serv" {
  name                         = var.db_server_name
  administrator_login          = data.azurerm_key_vault_secret.dbUnSecret.value
  administrator_password       = data.azurerm_key_vault_secret.dbPwSecret.value
  resource_group_name          = azurerm_resource_group.repo_rg.name
  location                     = azurerm_resource_group.repo_rg.location
  backup_retention_days        = 7
  geo_redundant_backup_enabled = false
  sku_name = "B_Standard_B1ms"
  
  version = "8.0.21"
  zone    = "1"

  storage {
    auto_grow_enabled = true
    io_scaling_enabled = true
    size_gb           = 20
  }
  timeouts {}
}


resource "azurerm_mysql_flexible_server_configuration" "sql_mode" {
  name                = "sql_mode"
  resource_group_name = azurerm_resource_group.repo_rg.name
  server_name         = azurerm_mysql_flexible_server.subscripify_mysql_serv.name
  value               = "ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES"

}

Terraform Configuration Files

See above for server config- all one needs to do is change the variable names and set to their azure account.


terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "3.48.0"
    }
    
    time = {
      source = "hashicorp/time"
      version = "0.9.1"
    }

    mysql = {
      source = "petoju/mysql"
      version = "3.0.63"
    }

    kubernetes = {
      source = "hashicorp/kubernetes"
      version = "2.18.1"
    }

    azuread = {
      source = "hashicorp/azuread"
      version = "2.33.0"
    }
  }
  required_version = ">= 0.14.9"
  backend "azurerm" {
  }
}

#connects to the Database server to run user setup
provider "mysql" {
  endpoint = "${data.azurerm_mysql_flexible_server.subscripify_mysql_serv.fqdn}:3306"
  # username = "${data.azurerm_mysql_flexible_server.subscripify_mysql_serv.administrator_login}@${data.azurerm_mysql_flexible_server.subscripify_mysql_serv.name}"
  username = "${data.azurerm_key_vault_secret.db_admin_username.value}"
  password = "${data.azurerm_key_vault_secret.db_admin_password.value}"
  tls      = true
}

provider "azuread" {
  # Configuration options
}
provider "azurerm" {
  features {}
}

provider "time" {

}
//sets up tenant user in db
resource "mysql_user" "tennat_db_user" {
  user               = replace("${var.tenant_name}_db_user","-","_")
  host               = "%"
  plaintext_password = var.SUBSCRIPIFY_DB_FIRST_TENANT_PW
}
resource "azurerm_mysql_flexible_database" "kratosdb" {
  name           = replace("${var.tenant_short_name}_user_db","-","_")
  resource_group_name = var.core_infra_resource_group_name
  server_name = data.azurerm_mysql_flexible_server.subscripify_mysql_serv.name
  charset = "latin1"
  collation = "latin1_swedish_ci"
}

resource "mysql_grant" "developer" {
  grant = true
  user     = mysql_user.tennat_db_user.user
  host     = mysql_user.tennat_db_user.host
  database = "${var.tenant_short_name}\\_%"
  privileges    = ["ALL"]

}

resource "mysql_grant" "create_user_t0_lord" {
  grant = true
  user     = mysql_user.tennat_db_user.user
  host     = mysql_user.tennat_db_user.host
  database = "*"
  privileges    = ["CREATE USER"]

}

Debug Output

creds cleaned... https://gist.github.com/williamohara/924b7c3a58f809beeaf790b9e6f5d0b2

Panic Output

None

Expected Behavior

No error - grants given to user

Actual Behavior

Error: Provider produced inconsistent result after apply
│ 
│ When applying changes to mysql_grant.developer, provider
│ "provider[\"registry.terraform.io/petoju/mysql\"]" produced an unexpected
│ new value: Root object was present, but now absent.
│ 
│ This is a bug in the provider, which should be reported in the provider's
│ own issue tracker.

Steps to Reproduce

Please list the steps required to reproduce the issue, for example:

  1. terraform apply

Important Factoids

Are there anything atypical about your accounts that we should know? For example: Running in EC2 Classic? Custom version of OpenStack? Tight ACLs? I am using terragurnt

References

I don't think so

williamohara avatar Aug 07 '24 22:08 williamohara