Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package opentofu for openSUSE:Factory checked in at 2026-02-13 12:49:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/opentofu (Old) and /work/SRC/openSUSE:Factory/.opentofu.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "opentofu" Fri Feb 13 12:49:48 2026 rev:44 rq:1332799 version:1.11.5 Changes: -------- --- /work/SRC/openSUSE:Factory/opentofu/opentofu.changes 2026-01-27 16:11:57.729169153 +0100 +++ /work/SRC/openSUSE:Factory/.opentofu.new.1977/opentofu.changes 2026-02-13 12:49:55.278284053 +0100 @@ -1,0 +2,12 @@ +Fri Feb 13 06:19:31 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 1.11.5: + * BUG FIXES: + - Add universe_domain option in the gcs backend to support + sovereign GCP services (#3758) + - The azurerm backend's MSI authentication method will now + respect the provided client ID (#3586) + - Using a network mirror for the providers source does not + print debug logs without being asked for (#3736) + +------------------------------------------------------------------- Old: ---- opentofu-1.11.4.obscpio New: ---- opentofu-1.11.5.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ opentofu.spec ++++++ --- /var/tmp/diff_new_pack.IBsP0d/_old 2026-02-13 12:49:57.906394122 +0100 +++ /var/tmp/diff_new_pack.IBsP0d/_new 2026-02-13 12:49:57.910394289 +0100 @@ -19,7 +19,7 @@ %define executable_name tofu Name: opentofu -Version: 1.11.4 +Version: 1.11.5 Release: 0 Summary: Declaratively manage your cloud infrastructure License: MPL-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.IBsP0d/_old 2026-02-13 12:49:57.950395965 +0100 +++ /var/tmp/diff_new_pack.IBsP0d/_new 2026-02-13 12:49:57.954396132 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/opentofu/opentofu/</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.11.4</param> + <param name="revision">v1.11.5</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.IBsP0d/_old 2026-02-13 12:49:57.982397306 +0100 +++ /var/tmp/diff_new_pack.IBsP0d/_new 2026-02-13 12:49:57.986397473 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/opentofu/opentofu/</param> - <param name="changesrevision">2a9b7ac61409f7f22bde65c192c5814eb4b75cdf</param></service></servicedata> + <param name="changesrevision">67fe9db49b7dafd46470cf9ac7f437aaa95f5c40</param></service></servicedata> (No newline at EOF) ++++++ opentofu-1.11.4.obscpio -> opentofu-1.11.5.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/CHANGELOG.md new/opentofu-1.11.5/CHANGELOG.md --- old/opentofu-1.11.4/CHANGELOG.md 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/CHANGELOG.md 2026-02-12 15:14:04.000000000 +0100 @@ -1,6 +1,13 @@ The v1.11.x release series is supported until **August 1 2026**. +## 1.11.6 (Unreleased) -## 1.11.5 (Unreleased) +## 1.11.5 + +BUG FIXES: + +* Add `universe_domain` option in the `gcs` backend to support sovereign GCP services ([#3758](https://github.com/opentofu/opentofu/issues/3758)) +* The `azurerm` backend's MSI authentication method will now respect the provided client ID ([#3586](https://github.com/opentofu/opentofu/issues/3586)) +* Using a network mirror for the providers source does not print debug logs without being asked for ([#3736](https://github.com/opentofu/opentofu/issues/3736)) ## 1.11.4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/internal/backend/remote-state/azure/README.md new/opentofu-1.11.5/internal/backend/remote-state/azure/README.md --- old/opentofu-1.11.4/internal/backend/remote-state/azure/README.md 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/internal/backend/remote-state/azure/README.md 2026-02-12 15:14:04.000000000 +0100 @@ -114,6 +114,14 @@ $ ./azure.test -test.v -test.run "TestAcc.*ManagedServiceIdentity" ``` +Sometimes may you want to test something against the full `tofu` binary (as happened in [this issue](https://github.com/opentofu/opentofu/issues/3586)). From the root of this `opentofu` repository, you can run: + +```bash +$ GOOS=linux GOARCH=amd64 make build +``` + +You can then `scp` the resulting binary and run `./tofu init`, `./tofu apply`, etc., on the server. + ### Running AKS Workload Identity Test We strongly recommend using the workspace in the `meta-test` folder to set up the AKS Kubernetes cluster and associated authorizations. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/internal/backend/remote-state/azure/auth/msi_auth.go new/opentofu-1.11.5/internal/backend/remote-state/azure/auth/msi_auth.go --- old/opentofu-1.11.4/internal/backend/remote-state/azure/auth/msi_auth.go 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/internal/backend/remote-state/azure/auth/msi_auth.go 2026-02-12 15:14:04.000000000 +0100 @@ -40,9 +40,14 @@ func (cred *managedIdentityAuth) Construct(ctx context.Context, config *Config) (azcore.TokenCredential, error) { client := httpclient.New(ctx) + var id azidentity.ManagedIDKind + if config.ClientID != "" { + id = azidentity.ClientID(config.ClientID) + } c, err := azidentity.NewManagedIdentityCredential( &azidentity.ManagedIdentityCredentialOptions{ ClientOptions: clientOptions(client, config.CloudConfig), + ID: id, }, ) endpoint := reconcileMSIEndpoint(config.Endpoint) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/internal/backend/remote-state/gcs/backend.go new/opentofu-1.11.5/internal/backend/remote-state/gcs/backend.go --- old/opentofu-1.11.4/internal/backend/remote-state/gcs/backend.go 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/internal/backend/remote-state/gcs/backend.go 2026-02-12 15:14:04.000000000 +0100 @@ -119,6 +119,13 @@ "GOOGLE_STORAGE_CUSTOM_ENDPOINT", }, nil), }, + "universe_domain": { + Type: schema.TypeString, + Optional: true, + DefaultFunc: schema.MultiEnvDefaultFunc([]string{ + "GOOGLE_BACKEND_UNIVERSE_DOMAIN", + }, nil), + }, }, } @@ -212,6 +219,11 @@ endpoint := option.WithEndpoint(storageEndpoint.(string)) opts = append(opts, endpoint) } + // Custom universe domain for sovereign cloud authentication + if universeDomain, ok := data.GetOk("universe_domain"); ok { + domain := option.WithUniverseDomain(universeDomain.(string)) + opts = append(opts, domain) + } client, err := storage.NewClient(ctx, opts...) if err != nil { return fmt.Errorf("storage.NewClient() failed: %w", err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/internal/backend/remote-state/gcs/backend_test.go new/opentofu-1.11.5/internal/backend/remote-state/gcs/backend_test.go --- old/opentofu-1.11.4/internal/backend/remote-state/gcs/backend_test.go 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/internal/backend/remote-state/gcs/backend_test.go 2026-02-12 15:14:04.000000000 +0100 @@ -47,6 +47,22 @@ var keyRingLocation = os.Getenv("GOOGLE_REGION") +// TestBackendConfig checks that the fields provided in the config works well with the schema configured +// in the backend. +func TestBackendConfig(t *testing.T) { + expectedBucketName := bucketName(t) + config := map[string]interface{}{ + "bucket": expectedBucketName, + "access_token": "dummy token", + "storage_custom_endpoint": "https://storage.s3nsapis.fr/storage/v1/", + "universe_domain": "s3nsapis.fr", + } + + // This is meant only to parse the configuration and ensure that the configuration given matches the schema configured + // in the backend + _ = backend.TestBackendConfig(t, New(encryption.StateEncryptionDisabled()), backend.TestWrapConfig(config)).(*Backend) +} + func TestStateFile(t *testing.T) { t.Parallel() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/internal/backend/remote-state/pg/README.md new/opentofu-1.11.5/internal/backend/remote-state/pg/README.md --- old/opentofu-1.11.4/internal/backend/remote-state/pg/README.md 1970-01-01 01:00:00.000000000 +0100 +++ new/opentofu-1.11.5/internal/backend/remote-state/pg/README.md 2026-02-12 15:14:04.000000000 +0100 @@ -0,0 +1,7 @@ +Run the integration tests: +```shell +container_id=$(docker run --rm --name opentofu-psql -p 5432:5432 -e POSTGRES_PASSWORD=tofu -d postgres) +TF_ACC=1 TF_PG_TEST=1 DATABASE_URL="postgresql://postgres:tofu@localhost:5432/postgres?sslmode=disable" \ + go test github.com/opentofu/opentofu/internal/backend/remote-state/pg +docker rm ${container_id} -f +``` \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/internal/backend/remote-state/pg/backend.go new/opentofu-1.11.5/internal/backend/remote-state/pg/backend.go --- old/opentofu-1.11.4/internal/backend/remote-state/pg/backend.go 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/internal/backend/remote-state/pg/backend.go 2026-02-12 15:14:04.000000000 +0100 @@ -9,15 +9,21 @@ "context" "database/sql" "fmt" - "github.com/lib/pq" "os" "strconv" + "github.com/lib/pq" + "github.com/opentofu/opentofu/internal/backend" "github.com/opentofu/opentofu/internal/encryption" "github.com/opentofu/opentofu/internal/legacy/helper/schema" ) +const ( + sequenceName = "global_states_id_seq" + publicSchema = "public" +) + func defaultBoolFunc(k string, dv bool) schema.SchemaDefaultFunc { return func() (interface{}, error) { if v := os.Getenv(k); v != "" { @@ -143,16 +149,18 @@ } if !skipTableCreation { - query = "CREATE SEQUENCE IF NOT EXISTS public.global_states_id_seq AS bigint" + query = fmt.Sprintf("CREATE SEQUENCE IF NOT EXISTS %s.%s AS bigint", publicSchema, sequenceName) if _, err = db.Exec(query); err != nil { return err } + // The `public` schema is required for the sequence because the pg_advisory_lock is a global locking + // relying on the uniqueness of the ids of the states across the db instance. query = fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s.%s ( - id bigint NOT NULL DEFAULT nextval('public.global_states_id_seq') PRIMARY KEY, + id bigint NOT NULL DEFAULT nextval('%s.%s') PRIMARY KEY, name text UNIQUE, data text - )`, pq.QuoteIdentifier(b.schemaName), pq.QuoteIdentifier(b.tableName)) + )`, pq.QuoteIdentifier(b.schemaName), pq.QuoteIdentifier(b.tableName), publicSchema, sequenceName) if _, err = db.Exec(query); err != nil { return err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/internal/backend/remote-state/pg/backend_test.go new/opentofu-1.11.5/internal/backend/remote-state/pg/backend_test.go --- old/opentofu-1.11.4/internal/backend/remote-state/pg/backend_test.go 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/internal/backend/remote-state/pg/backend_test.go 2026-02-12 15:14:04.000000000 +0100 @@ -66,6 +66,8 @@ Name string EnvVars map[string]string Config map[string]interface{} + Setup func(db *sql.DB) error + Teardown func(t *testing.T, db *sql.DB) ExpectConfigurationError string ExpectConnectionError string }{ @@ -102,6 +104,46 @@ }, }, { + Name: "valid-config-creates-only-index", + Setup: func(db *sql.DB) error { + schemaName := fmt.Sprintf("terraform_%s", t.Name()) + tableName := fmt.Sprintf("terraform_table_%s", t.Name()) + query := fmt.Sprintf(`CREATE SCHEMA IF NOT EXISTS %s`, pq.QuoteIdentifier(schemaName)) + if _, err := db.Exec(query); err != nil { + return fmt.Errorf("failed to create schema during setup: %w", err) + } + query = fmt.Sprintf("CREATE SEQUENCE IF NOT EXISTS %s.%s AS bigint", publicSchema, sequenceName) + if _, err := db.Exec(query); err != nil { + return fmt.Errorf("failed to create sequence during setup: %w", err) + } + + quotedSchema := pq.QuoteIdentifier(schemaName) + query = fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s.%s ( + id bigint NOT NULL DEFAULT nextval('%s.%s') PRIMARY KEY, + -- compared with the backend implementation, we skip the UNIQUE constraint from here on + -- purpose to test the separate unique index creation. + name text, + data text + )`, quotedSchema, pq.QuoteIdentifier(tableName), publicSchema, sequenceName) + + if _, err := db.Exec(query); err != nil { + return fmt.Errorf("failed to create table during setup: %w", err) + } + return nil + }, + Teardown: func(t *testing.T, db *sql.DB) { + dropSchema(t, db, fmt.Sprintf("terraform_%s", t.Name())) + }, + Config: map[string]interface{}{ + "conn_str": connStr, + "schema_name": fmt.Sprintf("terraform_%s", t.Name()), + "index_name": fmt.Sprintf("terraform_%s", t.Name()), + "table_name": fmt.Sprintf("terraform_table_%s", t.Name()), + "skip_schema_creation": true, + "skip_table_creation": true, + }, + }, + { Name: "missing-conn_str-defaults-to-localhost", EnvVars: map[string]string{ "PGSSLMODE": "disable", @@ -213,9 +255,22 @@ } else if diags.HasErrors() { t.Fatal(diags.ErrWithWarnings()) } - obj = newObj + dbCleaner, err := sql.Open("postgres", connStr) + if err != nil { + t.Fatal(err) + } + + if tc.Setup != nil { + if tc.Teardown == nil { + t.Fatalf("invalid configuration of the test. A teardown is required when a setup is configured") + } + defer tc.Teardown(t, dbCleaner) + if err := tc.Setup(dbCleaner); err != nil { + t.Fatalf("failed to run setup for test: %s", err) + } + } confDiags := b.Configure(t.Context(), obj) if tc.ExpectConnectionError != "" { err := confDiags.InConfigBody(config, "").ErrWithWarnings() @@ -235,60 +290,62 @@ t.Fatal("Backend could not be configured") } + validateQueryCount := func(query string, expectedCount int, queryArgs ...any) error { + var count int + if err = b.db.QueryRow(query, queryArgs...).Scan(&count); err != nil { + t.Fatal(err) + } + + if count != expectedCount { + return fmt.Errorf("expected to have %d entries but got %d", expectedCount, count) + } + return nil + } schemaName := b.Config().Get("schema_name").(string) tableName := b.Config().Get("table_name").(string) indexName := b.Config().Get("index_name").(string) skipSchemaCreation := b.Config().Get("skip_schema_creation").(bool) skipTableCreation := b.Config().Get("skip_table_creation").(bool) skipIndexCreation := b.Config().Get("skip_index_creation").(bool) - - dbCleaner, err := sql.Open("postgres", connStr) - if err != nil { - t.Fatal(err) - } defer dropSchema(t, dbCleaner, schemaName) // Make sure everything has been created - if skipSchemaCreation { + if !skipSchemaCreation { // Make sure schema exists - var count int query := `select count(*) from information_schema.schemata where schema_name=$1` - if err = b.db.QueryRow(query, schemaName).Scan(&count); err != nil { - t.Fatal(err) - } - - if count != 1 { - t.Fatalf("The schema has not been created (%d)", count) + if err := validateQueryCount(query, 1, schemaName); err != nil { + t.Fatalf("The schema %q has not been created: %s", schemaName, err) } } - if skipTableCreation { - // Make sure that the index exists - var count int - - query := `select count(*) from pg_catalog.pg_tables where schemaname=$1 and tablename=$2;` - err = b.db.QueryRow(query, schemaName, tableName).Scan(&count) - if err != nil { - t.Fatal(err) + var implicitIndexCreated bool + if !skipTableCreation { + // Make sure that the sequence exists + seqQuery := `select count(*) from pg_catalog.pg_sequences where schemaname=$1 and sequencename=$2;` + if err := validateQueryCount(seqQuery, 1, "public", sequenceName); err != nil { + t.Fatalf("The sequence %q has not been created in schema %q: %s", sequenceName, schemaName, err) } - - if count != 1 { - t.Fatalf("The table has not been created (%d)", count) + // Make sure that the table exists + tableQuery := `select count(*) from pg_catalog.pg_tables where schemaname=$1 and tablename=$2;` + if err := validateQueryCount(tableQuery, 1, schemaName, tableName); err != nil { + t.Fatalf("The table %q has not been created in schema %q: %s", tableName, schemaName, err) } - } - - if skipIndexCreation { - // Make sure that the index exists - var count int - - query := `select count(*) from pg_indexes where schemaname=$1 and tablename=$2 and indexname=$3;` - err = b.db.QueryRow(query, schemaName, tableName, indexName+"_name_key").Scan(&count) - if err != nil { - t.Fatal(err) + // If the table has been created, it creates automatically a unique index on the name field + // composed from the table name and the automatically added suffix "_<field>_key". + // In this case it needs to be "<table_name>_name_key. + fullIndexName := fmt.Sprintf("%s_name_key", tableName) + indexQuery := `select count(*) from pg_indexes where schemaname=$1 and tablename=$2 and indexname=$3;` + if err := validateQueryCount(indexQuery, 1, schemaName, tableName, fullIndexName); err != nil { + t.Fatalf("The index %q has not been created for table %s.%s: %s", indexName, schemaName, tableName, err) } + implicitIndexCreated = true + } - if count != 1 { - t.Fatalf("The index has not been created (%d)", count) + if !skipIndexCreation && !implicitIndexCreated { + // Make sure that the index on the name column exists + indexQuery := `select count(*) from pg_indexes where schemaname=$1 and tablename=$2 and indexname=$3;` + if err := validateQueryCount(indexQuery, 1, schemaName, tableName, indexName); err != nil { + t.Fatalf("The index %q has not been created for table %s.%s: %s", indexName, schemaName, tableName, err) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/internal/httpclient/registry_client.go new/opentofu-1.11.5/internal/httpclient/registry_client.go --- old/opentofu-1.11.4/internal/httpclient/registry_client.go 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/internal/httpclient/registry_client.go 2026-02-12 15:14:04.000000000 +0100 @@ -12,6 +12,7 @@ "time" "github.com/hashicorp/go-retryablehttp" + "github.com/opentofu/opentofu/internal/logging" ) // NewForRegistryRequests is a variant of [New] that deals with some additional @@ -49,6 +50,7 @@ retryableClient.RetryMax = retryCount retryableClient.RequestLogHook = registryRequestLogHook retryableClient.ErrorHandler = registryMaxRetryErrorHandler + retryableClient.Logger = logging.HCLogger() return retryableClient } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/version/VERSION new/opentofu-1.11.5/version/VERSION --- old/opentofu-1.11.4/version/VERSION 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/version/VERSION 2026-02-12 15:14:04.000000000 +0100 @@ -1 +1 @@ -1.11.4 +1.11.5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/website/docs/cli/commands/output.mdx new/opentofu-1.11.5/website/docs/cli/commands/output.mdx --- old/opentofu-1.11.4/website/docs/cli/commands/output.mdx 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/website/docs/cli/commands/output.mdx 2026-02-12 15:14:04.000000000 +0100 @@ -52,6 +52,7 @@ root module of the configuration, using definitions from a ["tfvars" file](../../language/values/variables.mdx#variable-definitions-tfvars-files). Use this option multiple times to include values from more than one file. +* `-show-sensitive` - If specified, sensitive values will be displayed. There are several other ways to set values for input variables in the root module, aside from the `-var` and `-var-file` options. Refer to diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/website/docs/cli/commands/show.mdx new/opentofu-1.11.5/website/docs/cli/commands/show.mdx --- old/opentofu-1.11.4/website/docs/cli/commands/show.mdx 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/website/docs/cli/commands/show.mdx 2026-02-12 15:14:04.000000000 +0100 @@ -43,6 +43,7 @@ - `-var` and `-var-file`: Specifies values for any input variables used in module source addresses or backend settings in the current configuration. +- `-show-sensitive`: If specified, sensitive values will be displayed. Unless using the `-module=DIR` option, this command relies on schema information from provider plugins to fully understand the provider-specific data structures diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/website/docs/cli/commands/state/show.mdx new/opentofu-1.11.5/website/docs/cli/commands/state/show.mdx --- old/opentofu-1.11.4/website/docs/cli/commands/state/show.mdx 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/website/docs/cli/commands/state/show.mdx 2026-02-12 15:14:04.000000000 +0100 @@ -46,6 +46,8 @@ ["tfvars" file](../../../language/values/variables.mdx#variable-definitions-tfvars-files). Use this option multiple times to include values from more than one file. +* `-show-sensitive` - If specified, sensitive values will be displayed. + There are several other ways to set values for input variables in the root module, aside from the `-var` and `-var-file` options. Refer to [Assigning Values to Root Module Variables](../../../language/values/variables.mdx#assigning-values-to-root-module-variables) for more information. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/website/docs/language/settings/backends/gcs.mdx new/opentofu-1.11.5/website/docs/language/settings/backends/gcs.mdx --- old/opentofu-1.11.4/website/docs/language/settings/backends/gcs.mdx 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/website/docs/language/settings/backends/gcs.mdx 2026-02-12 15:14:04.000000000 +0100 @@ -137,3 +137,4 @@ For more information, including IAM requirements, see [Customer-managed Encryption Keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys). - `storage_custom_endpoint` / `GOOGLE_BACKEND_STORAGE_CUSTOM_ENDPOINT` / `GOOGLE_STORAGE_CUSTOM_ENDPOINT` - (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (`/storage/v1/b`, [see here](https://cloud.google.com/storage/docs/json_api/v1/buckets/get#http-request)). You can either use [a DNS name automatically made by the Service Directory](https://cloud.google.com/vpc/docs/configure-private-service-connect-apis#configure-p-dns) or a [custom DNS name](https://cloud.google.com/vpc/docs/configure-private-service-connect-apis#configure-dns-default) made by you. For example, if you create an endpoint called `xyz` and want to use the automatically-created DNS name, you should set the field value as `https://storage-xyz.p.googleapis.com/storage/v1/b`. For help creating a Private Service Connect endpoint using OpenTofu, [see this guide](https://cloud.google.com/vpc/docs/configure-private- service-connect-apis#terraform_1). +- `universe_domain` / `GOOGLE_BACKEND_UNIVERSE_DOMAIN` / `GOOGLE_CLOUD_UNIVERSE_DOMAIN` - (Optional) The domain of the Private Service Connect endpoint. Most of the times, the value provided here is the root domain of the value configured in `storage_custom_endpoint`. This instructs the GCP sdk to allow requests to a sovereign cloud with credentials that are already generated for that cloud universe. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opentofu-1.11.4/website/docs/language/settings/backends/pg.mdx new/opentofu-1.11.5/website/docs/language/settings/backends/pg.mdx --- old/opentofu-1.11.4/website/docs/language/settings/backends/pg.mdx 2026-01-21 16:57:28.000000000 +0100 +++ new/opentofu-1.11.5/website/docs/language/settings/backends/pg.mdx 2026-02-12 15:14:04.000000000 +0100 @@ -95,7 +95,7 @@ The following configuration options or environment variables are supported: - `conn_str` - Postgres connection string; a `postgres://` URL. The `PG_CONN_STR` and [standard `libpq`](https://www.postgresql.org/docs/current/libpq-envars.html) environment variables can also be used to indicate how to connect to the PostgreSQL database. -- `schema_name` - Name of the automatically-managed Postgres schema, default to `terraform_remote_state`. Can also be set using the `PG_SCHEMA_NAME` environment variable. +- `schema_name` - Name of the automatically-managed Postgres schema, default to `terraform_remote_state`. Can also be set using the `PG_SCHEMA_NAME` environment variable. The `public` schema will still be used for the sequence that creates state IDs. See the [locking section](#locking-approach) for more details. - `skip_schema_creation` - If set to `true`, the Postgres schema must already exist. Can also be set using the `PG_SKIP_SCHEMA_CREATION` environment variable. OpenTofu won't try to create the schema, this is useful when it has already been created by a database administrator. - `table_name` - Name of the automatically-managed Postgres table, default to `states`. Can also be set using the `PG_TABLE_NAME` environment variable. - `skip_table_creation` - If set to `true`, the Postgres table must already exist. Can also be set using the `PG_SKIP_TABLE_CREATION` environment variable. OpenTofu won't try to create the table, this is useful when it has already been created by a database administrator. @@ -119,3 +119,14 @@ - a serial integer `id`, used as the key for advisory locks - the workspace `name` key as _text_ with a unique index - the OpenTofu state `data` as _text_ + +### Locking approach + +The locking uses [Postgres advisory locks](https://www.postgresql.org/docs/9.5/explicit-locking.html#ADVISORY-LOCKS) which +is a global per database locking mechanism. +To be able to lock correctly different configurations that use the same database, the [postgres sequence](https://www.postgresql.org/docs/current/sql-createsequence.html) +used to generate the state IDs is stored in the `public` schema and will be used by all the configurations that use +that database instance for the locking needs. + +Therefore, ensure that the postgres user has access to the schema for that particular configuration and to the `public` schema too. + ++++++ opentofu.obsinfo ++++++ --- /var/tmp/diff_new_pack.IBsP0d/_old 2026-02-13 12:50:04.022650279 +0100 +++ /var/tmp/diff_new_pack.IBsP0d/_new 2026-02-13 12:50:04.030650614 +0100 @@ -1,5 +1,5 @@ name: opentofu -version: 1.11.4 -mtime: 1769011048 -commit: 2a9b7ac61409f7f22bde65c192c5814eb4b75cdf +version: 1.11.5 +mtime: 1770905644 +commit: 67fe9db49b7dafd46470cf9ac7f437aaa95f5c40 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/opentofu/vendor.tar.gz /work/SRC/openSUSE:Factory/.opentofu.new.1977/vendor.tar.gz differ: char 31, line 1
