Separate notebook nodes from dask nodes in terraform

Do not automatically create dask nodes that match notebook nodes. Instead dask nodes should be explicitly defined.
fixes #849
TODO before merge
Run terraform apply against each cluster. For most, that should be a noop.

This LGTM, but need to terraform apply to everything!

Cluster name: cloudbank
  Output of terraform plan
Note: Objects have changed outside of Terraform

Terraform detected the following changes made outside of Terraform since the last "terraform apply":

  # google_container_node_pool.core has been changed
  ~ resource "google_container_node_pool" "core" {
        id                          = "projects/cb-1003-1696/locations/us-central1-b/clusters/cb-cluster/nodePools/core-pool"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/cb-1003-1696/zones/us-central1-b/instanceGroups/gke-cb-cluster-core-pool-f7ab7d23-grp",
        ]
        name                        = "core-pool"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.notebook["user"] has been changed
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/cb-1003-1696/locations/us-central1-b/clusters/cb-cluster/nodePools/nb-user"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/cb-1003-1696/zones/us-central1-b/instanceGroups/gke-cb-cluster-nb-user-05ebb8d0-grp",
        ]
        name                        = "nb-user"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.dask_worker["worker"] has been changed
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/cb-1003-1696/locations/us-central1-b/clusters/cb-cluster/nodePools/dask-worker"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/cb-1003-1696/zones/us-central1-b/instanceGroups/gke-cb-cluster-dask-worker-2894ec13-grp",
        ]
        name                        = "dask-worker"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_cluster.cluster has been changed
  ~ resource "google_container_cluster" "cluster" {
        id                          = "projects/cb-1003-1696/locations/us-central1-b/clusters/cb-cluster"
      ~ master_version              = "1.19.13-gke.1900" -> "1.19.14-gke.1900"
        name                        = "cb-cluster"
        # (25 unchanged attributes hidden)

      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/cb-1003-1696/zones/us-central1-b/instanceGroups/gke-cb-cluster-core-pool-f7ab7d23-grp",
            ]
            name                        = "core-pool"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/cb-1003-1696/zones/us-central1-b/instanceGroups/gke-cb-cluster-dask-worker-2894ec13-grp",
            ]
            name                        = "dask-worker"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/cb-1003-1696/zones/us-central1-b/instanceGroups/gke-cb-cluster-nb-user-05ebb8d0-grp",
            ]
            name                        = "nb-user"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }

        # (14 unchanged blocks hidden)
    }

Unless you have made equivalent changes to your configuration, or ignored the relevant attributes using ignore_changes, the following plan may
include actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # google_container_node_pool.dask_worker["worker"] will be updated in-place
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/cb-1003-1696/locations/us-central1-b/clusters/cb-cluster/nodePools/dask-worker"
        name                        = "dask-worker"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # google_container_node_pool.notebook["user"] will be updated in-place
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/cb-1003-1696/locations/us-central1-b/clusters/cb-cluster/nodePools/nb-user"
        name                        = "nb-user"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

Plan: 0 to add, 2 to change, 0 to destroy.

Cluster name: meom-ige
  Output of terraform plan
Note: Objects have changed outside of Terraform

Terraform detected the following changes made outside of Terraform since the last "terraform apply":

  # google_project_iam_member.identify_project_binding has been changed
  ~ resource "google_project_iam_member" "identify_project_binding" {
      ~ etag    = "BwXGiOabDmI=" -> "BwXP+QCcElI="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_container_node_pool.core has been changed
  ~ resource "google_container_node_pool" "core" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/core-pool"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-core-pool-d987f2c6-grp",
        ]
        name                        = "core-pool"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_project_iam_member.cd_sa_roles["roles/artifactregistry.writer"] has been changed
  ~ resource "google_project_iam_member" "cd_sa_roles" {
      ~ etag    = "BwXGiOabDmI=" -> "BwXP+QCcElI="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_project_iam_member.cd_sa_roles["roles/container.admin"] has been changed
  ~ resource "google_project_iam_member" "cd_sa_roles" {
      ~ etag    = "BwXGiOabDmI=" -> "BwXP+QCcElI="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_container_cluster.cluster has been changed
  ~ resource "google_container_cluster" "cluster" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster"
      ~ master_version              = "1.19.13-gke.1900" -> "1.19.14-gke.1900"
        name                        = "meom-ige-cluster"
        # (25 unchanged attributes hidden)

      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-core-pool-d987f2c6-grp",
            ]
            name                        = "core-pool"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-dask-large-5103975d-grp",
            ]
            name                        = "dask-large"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-nb-medium-fc542ba4-grp",
            ]
            name                        = "nb-medium"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-dask-huge-f0c9fcd8-grp",
            ]
            name                        = "dask-huge"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-dask-medium-c97debc9-grp",
            ]
            name                        = "dask-medium"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-nb-very-large-b79ad0a7-grp",
            ]
            name                        = "nb-very-large"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-nb-large-52a70d65-grp",
            ]
            name                        = "nb-large"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-nb-huge-14f7c500-grp",
            ]
            name                        = "nb-huge"
          ~ node_count                  = 0 -> 1
            # (5 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-nb-small-52f9c02f-grp",
            ]
            name                        = "nb-small"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-dask-very-large-91594b39-grp",
            ]
            name                        = "dask-very-large"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-dask-small-7ffa49d9-grp",
            ]
            name                        = "dask-small"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }

      ~ workload_identity_config {
          + workload_pool = "meom-ige-cnrs.svc.id.goog"
        }
        # (13 unchanged blocks hidden)
    }
  # google_project_iam_member.cluster_sa_roles["roles/logging.logWriter"] has been changed
  ~ resource "google_project_iam_member" "cluster_sa_roles" {
      ~ etag    = "BwXGiOabDmI=" -> "BwXP+QCcElI="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_project_iam_member.cluster_sa_roles["roles/monitoring.metricWriter"] has been changed
  ~ resource "google_project_iam_member" "cluster_sa_roles" {
      ~ etag    = "BwXGiOabDmI=" -> "BwXP+QCcElI="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_project_iam_member.cluster_sa_roles["roles/monitoring.viewer"] has been changed
  ~ resource "google_project_iam_member" "cluster_sa_roles" {
      ~ etag    = "BwXGiOabDmI=" -> "BwXP+QCcElI="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_project_iam_member.cluster_sa_roles["roles/stackdriver.resourceMetadata.writer"] has been changed
  ~ resource "google_project_iam_member" "cluster_sa_roles" {
      ~ etag    = "BwXGiOabDmI=" -> "BwXP+QCcElI="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_project_iam_member.cluster_sa_roles["roles/artifactregistry.reader"] has been changed
  ~ resource "google_project_iam_member" "cluster_sa_roles" {
      ~ etag    = "BwXGiOabDmI=" -> "BwXP+QCcElI="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_container_node_pool.notebook["huge"] has been changed
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/nb-huge"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-nb-huge-14f7c500-grp",
        ]
        name                        = "nb-huge"
      ~ node_count                  = 0 -> 1
        # (7 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.notebook["large"] has been changed
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/nb-large"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-nb-large-52a70d65-grp",
        ]
        name                        = "nb-large"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.notebook["medium"] has been changed
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/nb-medium"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-nb-medium-fc542ba4-grp",
        ]
        name                        = "nb-medium"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.notebook["small"] has been changed
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/nb-small"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-nb-small-52f9c02f-grp",
        ]
        name                        = "nb-small"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.notebook["very-large"] has been changed
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/nb-very-large"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-nb-very-large-b79ad0a7-grp",
        ]
        name                        = "nb-very-large"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.dask_worker["large"] has been changed
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/dask-large"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-dask-large-5103975d-grp",
        ]
        name                        = "dask-large"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.dask_worker["medium"] has been changed
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/dask-medium"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-dask-medium-c97debc9-grp",
        ]
        name                        = "dask-medium"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.dask_worker["small"] has been changed
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/dask-small"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-dask-small-7ffa49d9-grp",
        ]
        name                        = "dask-small"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.dask_worker["very-large"] has been changed
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/dask-very-large"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-dask-very-large-91594b39-grp",
        ]
        name                        = "dask-very-large"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.dask_worker["huge"] has been changed
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/dask-huge"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/meom-ige-cnrs/zones/us-central1-b/instanceGroups/gke-meom-ige-cluster-dask-huge-f0c9fcd8-grp",
        ]
        name                        = "dask-huge"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

Unless you have made equivalent changes to your configuration, or ignored the relevant attributes using ignore_changes, the following plan may
include actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # google_container_node_pool.dask_worker["huge"] will be updated in-place
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/dask-huge"
        name                        = "dask-huge"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # google_container_node_pool.dask_worker["large"] will be updated in-place
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/dask-large"
        name                        = "dask-large"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # google_container_node_pool.dask_worker["medium"] will be updated in-place
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/dask-medium"
        name                        = "dask-medium"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # google_container_node_pool.dask_worker["small"] will be updated in-place
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/dask-small"
        name                        = "dask-small"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # google_container_node_pool.dask_worker["very-large"] will be updated in-place
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/dask-very-large"
        name                        = "dask-very-large"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # google_container_node_pool.notebook["huge"] will be updated in-place
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/nb-huge"
        name                        = "nb-huge"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # google_container_node_pool.notebook["large"] will be updated in-place
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/nb-large"
        name                        = "nb-large"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # google_container_node_pool.notebook["medium"] will be updated in-place
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/nb-medium"
        name                        = "nb-medium"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # google_container_node_pool.notebook["small"] will be updated in-place
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/nb-small"
        name                        = "nb-small"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # google_container_node_pool.notebook["very-large"] will be updated in-place
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/meom-ige-cnrs/locations/us-central1-b/clusters/meom-ige-cluster/nodePools/nb-very-large"
        name                        = "nb-very-large"
        # (9 unchanged attributes hidden)

      ~ node_config {
            tags              = []
            # (12 unchanged attributes hidden)

          ~ workload_metadata_config {
              + mode = "MODE_UNSPECIFIED"
            }
            # (1 unchanged block hidden)
        }

        # (3 unchanged blocks hidden)
    }

Plan: 0 to add, 10 to change, 0 to destroy.

Cluster name: pilot-hubs
  Output of terraform plan
Note: Objects have changed outside of Terraform

Terraform detected the following changes made outside of Terraform since the last "terraform apply":

  # google_container_node_pool.dask_worker["worker"] has been changed
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/two-eye-two-see/locations/us-central1-b/clusters/pilot-hubs-cluster/nodePools/dask-worker"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/two-eye-two-see/zones/us-central1-b/instanceGroups/gke-pilot-hubs-cluster-dask-worker-e1438a35-grp",
        ]
        name                        = "dask-worker"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.core has been changed
  ~ resource "google_container_node_pool" "core" {
        id                          = "projects/two-eye-two-see/locations/us-central1-b/clusters/pilot-hubs-cluster/nodePools/core-pool"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/two-eye-two-see/zones/us-central1-b/instanceGroups/gke-pilot-hubs-cluster-core-pool-d184c825-grp",
        ]
        name                        = "core-pool"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.notebook["user"] has been changed
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/two-eye-two-see/locations/us-central1-b/clusters/pilot-hubs-cluster/nodePools/nb-user"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/two-eye-two-see/zones/us-central1-b/instanceGroups/gke-pilot-hubs-cluster-nb-user-bd177a99-grp",
        ]
        name                        = "nb-user"
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_cluster.cluster has been changed
  ~ resource "google_container_cluster" "cluster" {
        id                          = "projects/two-eye-two-see/locations/us-central1-b/clusters/pilot-hubs-cluster"
      ~ master_version              = "1.19.13-gke.1900" -> "1.19.14-gke.1900"
        name                        = "pilot-hubs-cluster"
        # (25 unchanged attributes hidden)

      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/two-eye-two-see/zones/us-central1-b/instanceGroups/gke-pilot-hubs-cluster-core-pool-d184c825-grp",
            ]
            name                        = "core-pool"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/two-eye-two-see/zones/us-central1-b/instanceGroups/gke-pilot-hubs-cluster-nb-user-bd177a99-grp",
            ]
            name                        = "nb-user"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/two-eye-two-see/zones/us-central1-b/instanceGroups/gke-pilot-hubs-cluster-dask-worker-e1438a35-grp",
            ]
            name                        = "dask-worker"
            # (6 unchanged attributes hidden)

            # (4 unchanged blocks hidden)
        }
      - node_pool {
          - initial_node_count  = 5 -> null
          - instance_group_urls = [
              - "https://www.googleapis.com/compute/v1/projects/two-eye-two-see/zones/us-central1-b/instanceGroupManagers/gke-pilot-hubs-cluster-nb-paleo-6499e81d-grp",
            ] -> null
          - max_pods_per_node   = 0 -> null
          - name                = "nb-paleo" -> null
          - node_count          = 5 -> null
          - node_locations      = [
              - "us-central1-b",
            ] -> null
          - version             = "1.19.13-gke.1900" -> null

          - autoscaling {
              - max_node_count = 200 -> null
              - min_node_count = 5 -> null
            }

          - management {
              - auto_repair  = true -> null
              - auto_upgrade = false -> null
            }

          - node_config {
              - disk_size_gb      = 100 -> null
              - disk_type         = "pd-standard" -> null
              - guest_accelerator = [] -> null
              - image_type        = "COS_CONTAINERD" -> null
              - labels            = {
                  - "2i2c.org/community"           = "paleo"
                  - "hub.jupyter.org/node-purpose" = "user"
                  - "k8s.dask.org/node-purpose"    = "scheduler"
                } -> null
              - local_ssd_count   = 0 -> null
              - machine_type      = "n1-highmem-4" -> null
              - metadata          = {
                  - "disable-legacy-endpoints" = "true"
                } -> null
              - oauth_scopes      = [
                  - "https://www.googleapis.com/auth/cloud-platform",
                ] -> null
              - preemptible       = false -> null
              - service_account   =<EMAIL_ADDRESS>-> null
              - tags              = [] -> null
              - taint             = [
                  - {
                      - effect = "NO_SCHEDULE"
                      - key    = "hub.jupyter.org_dedicated"
                      - value  = "user"
                    },
                ] -> null

              - shielded_instance_config {
                  - enable_integrity_monitoring = true -> null
                  - enable_secure_boot          = false -> null
                }

              - workload_metadata_config {
                  - mode = "GKE_METADATA" -> null
                }
            }

          - upgrade_settings {
              - max_surge       = 1 -> null
              - max_unavailable = 0 -> null
            }
        }

        # (14 unchanged blocks hidden)
    }

Unless you have made equivalent changes to your configuration, or ignored the relevant attributes using ignore_changes, the following plan may
include actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

No changes. Your infrastructure matches the configuration.

Cluster name:
  Output of terraform plan
Note: Objects have changed outside of Terraform

Terraform detected the following changes made outside of Terraform since the last "terraform apply":

  # google_project_iam_member.cluster_sa_roles["roles/monitoring.viewer"] has been changed
  ~ resource "google_project_iam_member" "cluster_sa_roles" {
      ~ etag    = "BwXOTP3DmOA=" -> "BwXRiiAItgU="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_project_iam_member.cluster_sa_roles["roles/stackdriver.resourceMetadata.writer"] has been changed
  ~ resource "google_project_iam_member" "cluster_sa_roles" {
      ~ etag    = "BwXOTP3DmOA=" -> "BwXRiiAItgU="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_project_iam_member.cluster_sa_roles["roles/artifactregistry.reader"] has been changed
  ~ resource "google_project_iam_member" "cluster_sa_roles" {
      ~ etag    = "BwXOTP3DmOA=" -> "BwXRiiAItgU="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_project_iam_member.cluster_sa_roles["roles/logging.logWriter"] has been changed
  ~ resource "google_project_iam_member" "cluster_sa_roles" {
      ~ etag    = "BwXOTP3DmOA=" -> "BwXRiiAItgU="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_project_iam_member.cluster_sa_roles["roles/monitoring.metricWriter"] has been changed
  ~ resource "google_project_iam_member" "cluster_sa_roles" {
      ~ etag    = "BwXOTP3DmOA=" -> "BwXRiiAItgU="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_container_node_pool.notebook["large"] has been changed
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/pangeo-integration-te-3eea/locations/us-central1-b/clusters/pangeo-hubs-cluster/nodePools/nb-large"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-nb-large-7ec2a078-grp",
        ]
        name                        = "nb-large"
      ~ node_count                  = 0 -> 1
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.notebook["medium"] has been changed
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/pangeo-integration-te-3eea/locations/us-central1-b/clusters/pangeo-hubs-cluster/nodePools/nb-medium"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-nb-medium-04a21a74-grp",
        ]
        name                        = "nb-medium"
        # (9 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.notebook["small"] has been changed
  ~ resource "google_container_node_pool" "notebook" {
        id                          = "projects/pangeo-integration-te-3eea/locations/us-central1-b/clusters/pangeo-hubs-cluster/nodePools/nb-small"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-nb-small-ef9b4ca7-grp",
        ]
        name                        = "nb-small"
      ~ node_count                  = 1 -> 0
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_project_iam_member.identify_project_binding has been changed
  ~ resource "google_project_iam_member" "identify_project_binding" {
      ~ etag    = "BwXOTP3DmOA=" -> "BwXRiiAItgU="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_container_node_pool.core has been changed
  ~ resource "google_container_node_pool" "core" {
        id                          = "projects/pangeo-integration-te-3eea/locations/us-central1-b/clusters/pangeo-hubs-cluster/nodePools/core-pool"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-core-pool-b7fdb3c5-grp",
        ]
        name                        = "core-pool"
      ~ node_count                  = 2 -> 3
        # (8 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_cluster.cluster has been changed
  ~ resource "google_container_cluster" "cluster" {
        id                          = "projects/pangeo-integration-te-3eea/locations/us-central1-b/clusters/pangeo-hubs-cluster"
        name                        = "pangeo-hubs-cluster"
        # (27 unchanged attributes hidden)

      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-core-pool-b7fdb3c5-grp",
            ]
            name                        = "core-pool"
          ~ node_count                  = 2 -> 3
            # (5 unchanged attributes hidden)

            # (5 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-nb-medium-04a21a74-grp",
            ]
            name                        = "nb-medium"
            # (6 unchanged attributes hidden)

            # (5 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-nb-large-7ec2a078-grp",
            ]
            name                        = "nb-large"
          ~ node_count                  = 0 -> 1
            # (5 unchanged attributes hidden)

            # (5 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-nb-small-ef9b4ca7-grp",
            ]
            name                        = "nb-small"
          ~ node_count                  = 1 -> 0
            # (5 unchanged attributes hidden)

            # (5 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-dask-small-abfb145b-grp",
            ]
            name                        = "dask-small"
            # (6 unchanged attributes hidden)

            # (5 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-dask-large-8741828e-grp",
            ]
            name                        = "dask-large"
            # (6 unchanged attributes hidden)

            # (5 unchanged blocks hidden)
        }
      ~ node_pool {
          + managed_instance_group_urls = [
              + "https://www.googleapis.com/compute/beta/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-dask-medium-f0702139-grp",
            ]
            name                        = "dask-medium"
            # (6 unchanged attributes hidden)

            # (5 unchanged blocks hidden)
        }

      ~ workload_identity_config {
          + workload_pool = "pangeo-integration-te-3eea.svc.id.goog"
        }
        # (15 unchanged blocks hidden)
    }
  # google_project_iam_member.cd_sa_roles["roles/artifactregistry.writer"] has been changed
  ~ resource "google_project_iam_member" "cd_sa_roles" {
      ~ etag    = "BwXOTP3DmOA=" -> "BwXRiiAItgU="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_project_iam_member.cd_sa_roles["roles/container.admin"] has been changed
  ~ resource "google_project_iam_member" "cd_sa_roles" {
      ~ etag    = "BwXOTP3DmOA=" -> "BwXRiiAItgU="
        id      =<EMAIL_ADDRESS>        # (3 unchanged attributes hidden)
    }
  # google_container_node_pool.dask_worker["medium"] has been changed
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/pangeo-integration-te-3eea/locations/us-central1-b/clusters/pangeo-hubs-cluster/nodePools/dask-medium"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-dask-medium-f0702139-grp",
        ]
        name                        = "dask-medium"
        # (9 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.dask_worker["small"] has been changed
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/pangeo-integration-te-3eea/locations/us-central1-b/clusters/pangeo-hubs-cluster/nodePools/dask-small"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-dask-small-abfb145b-grp",
        ]
        name                        = "dask-small"
        # (9 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_container_node_pool.dask_worker["large"] has been changed
  ~ resource "google_container_node_pool" "dask_worker" {
        id                          = "projects/pangeo-integration-te-3eea/locations/us-central1-b/clusters/pangeo-hubs-cluster/nodePools/dask-large"
      + managed_instance_group_urls = [
          + "https://www.googleapis.com/compute/v1/projects/pangeo-integration-te-3eea/zones/us-central1-b/instanceGroups/gke-pangeo-hubs-cluster-dask-large-8741828e-grp",
        ]
        name                        = "dask-large"
        # (9 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }
  # google_compute_router.router[0] has been changed
  ~ resource "google_compute_router" "router" {
      + encrypted_interconnect_router = false
        id                            = "projects/pangeo-integration-te-3eea/regions/us-central1/routers/pangeo-hubs-router"
        name                          = "pangeo-hubs-router"
        # (5 unchanged attributes hidden)
    }

Unless you have made equivalent changes to your configuration, or ignored the relevant attributes using ignore_changes, the following plan may
include actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # google_container_cluster.cluster will be updated in-place
  ~ resource "google_container_cluster" "cluster" {
      ~ enable_shielded_nodes       = false -> true
        id                          = "projects/pangeo-integration-te-3eea/locations/us-central1-b/clusters/pangeo-hubs-cluster"
        name                        = "pangeo-hubs-cluster"
        # (26 unchanged attributes hidden)

        # (23 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

Cluster name: carbonplan-azure
  Output of terraform plan

Note: Objects have changed outside of Terraform

Terraform detected the following changes made outside of Terraform since the last "terraform apply":

  # azurerm_kubernetes_cluster_node_pool.dask_pool["large"] has been changed
  ~ resource "azurerm_kubernetes_cluster_node_pool" "dask_pool" {
      + availability_zones     = []
        id                     = "/subscriptions/c5e7a734-3dbf-4285-80e5-4c0afb1f65dc/resourcegroups/2i2c-carbonplan-cluster/providers/Microsoft.ContainerService/managedClusters/hub-cluster/agentPools/dasklarge"
        name                   = "dasklarge"
      + tags                   = {}
        # (23 unchanged attributes hidden)
    }
  # azurerm_kubernetes_cluster_node_pool.dask_pool["medium"] has been changed
  ~ resource "azurerm_kubernetes_cluster_node_pool" "dask_pool" {
      + availability_zones     = []
        id                     = "/subscriptions/c5e7a734-3dbf-4285-80e5-4c0afb1f65dc/resourcegroups/2i2c-carbonplan-cluster/providers/Microsoft.ContainerService/managedClusters/hub-cluster/agentPools/daskmedium"
        name                   = "daskmedium"
      + tags                   = {}
        # (23 unchanged attributes hidden)
    }
  # azurerm_kubernetes_cluster_node_pool.dask_pool["small"] has been changed
  ~ resource "azurerm_kubernetes_cluster_node_pool" "dask_pool" {
      + availability_zones     = []
        id                     = "/subscriptions/c5e7a734-3dbf-4285-80e5-4c0afb1f65dc/resourcegroups/2i2c-carbonplan-cluster/providers/Microsoft.ContainerService/managedClusters/hub-cluster/agentPools/dasksmall"
        name                   = "dasksmall"
      + tags                   = {}
        # (23 unchanged attributes hidden)
    }
  # azurerm_kubernetes_cluster_node_pool.dask_pool["vhuge"] has been changed
  ~ resource "azurerm_kubernetes_cluster_node_pool" "dask_pool" {
      + availability_zones     = []
        id                     = "/subscriptions/c5e7a734-3dbf-4285-80e5-4c0afb1f65dc/resourcegroups/2i2c-carbonplan-cluster/providers/Microsoft.ContainerService/managedClusters/hub-cluster/agentPools/daskvhuge"
        name                   = "daskvhuge"
      + tags                   = {}
        # (23 unchanged attributes hidden)
    }
  # azurerm_kubernetes_cluster_node_pool.dask_pool["vvhuge"] has been changed
  ~ resource "azurerm_kubernetes_cluster_node_pool" "dask_pool" {
      + availability_zones     = []
        id                     = "/subscriptions/c5e7a734-3dbf-4285-80e5-4c0afb1f65dc/resourcegroups/2i2c-carbonplan-cluster/providers/Microsoft.ContainerService/managedClusters/hub-cluster/agentPools/daskvvhuge"
        name                   = "daskvvhuge"
      + tags                   = {}
        # (23 unchanged attributes hidden)
    }
  # azurerm_kubernetes_cluster_node_pool.dask_pool["huge"] has been changed
  ~ resource "azurerm_kubernetes_cluster_node_pool" "dask_pool" {
      + availability_zones     = []
        id                     = "/subscriptions/c5e7a734-3dbf-4285-80e5-4c0afb1f65dc/resourcegroups/2i2c-carbonplan-cluster/providers/Microsoft.ContainerService/managedClusters/hub-cluster/agentPools/daskhuge"
        name                   = "daskhuge"
      + tags                   = {}
        # (23 unchanged attributes hidden)
    }

Unless you have made equivalent changes to your configuration, or ignored the relevant attributes using ignore_changes, the following plan may
include actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # azurerm_kubernetes_cluster.jupyterhub will be updated in-place
  ~ resource "azurerm_kubernetes_cluster" "jupyterhub" {
        id                                  = "/subscriptions/c5e7a734-3dbf-4285-80e5-4c0afb1f65dc/resourcegroups/2i2c-carbonplan-cluster/providers/Microsoft.ContainerService/managedClusters/hub-cluster"
        name                                = "hub-cluster"
        tags                                = {}
        # (17 unchanged attributes hidden)

      ~ default_node_pool {
            name                         = "core"
          ~ node_count                   = 2 -> 1
            tags                         = {}
            # (20 unchanged attributes hidden)
        }

        # (7 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.`
``

</details>

Just a note that I can't do a tf plan for JIL

@damianavila The blog helped me understand this phenomena https://log.martinatkins.me/2021/05/19/changes-outside-terraform/ I think the case we see most often is the second bullet point

The provider for a particular resource type exposes some attributes that change dynamically at runtime, independently of Terraform changes.

These things often include attributes such as tags, labels, etc and are safe to ignore. Running terrafrom apply -refresh-only against whatever config is on master before running terraform plan against your changes in your PR usually resolves this as the -refresh-only apply updates terraform's state to match the actual state.
The other times we see changes outside of terraform happens because we're deploying auto-scalable infrastructure. So when we first deploy a nodepool, it contains 0 nodes. When we come back to do an upgrade, maybe the cluster has been in use and that nodepool has scaled up to 1, or another value >0. This scenario will error out if you attempt the above plan. So instead I usually change terraforms config to match the number of nodes it expecting so this "changed outside of terraform" warning goes away, I just don't commit that config change.
Hope that helps!

Cluster name
Ran terraform apply?

Cloudbank
✅

meom-ige
✅

pilot-hubs
✅

pangeo-hubs
✅

Carbonplan-azure

I have applied this change to all the clusters that I have access to - @yuvipanda can you do JIL?
I'll merge this now.

I think the case we see most often is the second bullet point

Yep, I was expecting that to be the case... but to be frank, I do not like that 😉  !

These things often include attributes such as tags, labels, etc and are safe to ignore.

Yep, I would agree most of them are safe to ignore, but there are some changes that "feel" potentially problematic:
 ~ master_version              = "1.19.13-gke.1900" -> "1.19.14-gke.1900"

and itches me that I can not "control" those changes 😉  but I guess I need to make the peace with the fact we are relying on the provider's decisions in some cases...

The other times we see changes outside of terraform happens because we're deploying auto-scalable infrastructure.

Yep, that makes sense!

So instead I usually change terraforms config to match the number of nodes it expecting so this "changed outside of terraform" warning goes away, I just don't commit that config change.

Gotcha!
Thanks for the feedback, @sgibson91!


chore: Revert to a custom fork of mobile_scanner

Hi everyone,
We are forced to revert to the custom fork of mobile_scanner as there is a MAJOR issue on iOS.
Basically, it's the latest version of the lib minus the faulty commit
https://github.com/openfoodfacts/mobile_scanner/commits/custom_release

Codecov Report

Merging #4519 (0469730) into develop (ee9e20f) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff            @@
##           develop    #4519   +/-   ##
========================================
  Coverage    10.32%   10.32%
========================================
  Files          296      296
  Lines        15290    15290
========================================
  Hits          1579     1579
  Misses       13711    13711

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more

Thank you. Deploying in TestFlight now

Thank you. Deploying in TestFlight now


[feature]The dfget cli is ugly

Why you need it?

dfget version:workspace:/root/.small-dragonfly sign:15458-1565830210.799client:<IP_ADDRESS> connected to node:<IP_ADDRESS>:8004start download by dragonflydownload SUCCESS(0) cost:2.868s length:21976647 reason:0
--2019-08-15 08:50:14--  https://dl.google.com/go/go1.12.7.src.tar.gz
dfget version:workspace:/root/.small-dragonfly sign:15571-1565830214.708client:<IP_ADDRESS> connected to node:<IP_ADDRESS>:8003start download by dragonflydownload SUCCESS(0) cost:2.552s length:21976647 reason:0
--2019-08-15 08:50:18--  https://dl.google.com/go/go1.12.7.src.tar.gz
dfget version:workspace:/root/.small-dragonfly sign:15678-1565830218.353client:<IP_ADDRESS> connected to node:<IP_ADDRESS>:8004start download by dragonflydownload SUCCESS(0) cost:3.679s length:21976647 reason:0
--2019-08-15 08:50:23--  https://dl.google.com/go/go1.12.7.src.tar.gz
dfget version:workspace:/root/.small-dragonfly sign:15795-1565830223.225client:<IP_ADDRESS> connected to node:<IP_ADDRESS>:8004start download by dragonflydownload SUCCESS(0) cost:2.156s length:21976647 reason:0
--2019-08-15 08:50:26--  https://dl.google.com/go/go1.12.7.src.tar.gz
dfget version:workspace:/root/.small-dragonfly sign:15912-1565830226.292client:<IP_ADDRESS> connected to node:<IP_ADDRESS>:8004start download by dragonflydownload SUCCESS(0) cost:1.645s length:21976647 reason:0
--2019-08-15 08:50:29--  https://dl.google.com/go/go1.12.7.src.tar.gz
dfget version:workspace:/root/.small-dragonfly sign:16025-1565830229.005client:<IP_ADDRESS> connected to node:<IP_ADDRESS>:8004start download by dragonflydownload SUCCESS(0) cost:3.674s length:21976647 reason:0

The dfget cli is ugly,no pause ,i can't find the information i want clearly,
How it could be?

Other related information

Could you describe what information is missing and how you'd like it to be displayed, in a bit more detail?

I think it's indeed caused by missing line breaks. @yunfeiyangbuaa Would you like to perfect this?

Didn't realize that "no pause" means "no new lines"... In such case, this issue may be better categorized as a bug or an enhancement, rather than a feature @Starnop .

I think it's indeed caused by missing line breaks. @yunfeiyangbuaa Would you like to perfect this?

I will  do with it

Could you describe what information is missing and how you'd like it to be displayed, in a bit more detail?
dfget version nessary?,I only care about the download information instead of that.
SUCCESS(0)In fact ,suceess(0) make me confused,it look like my work is failed
I wan't to see cid.coat time.file dir.file size,how many download.is success? @inoc603

I want to see how many piece are downloading,and how many pieces is successful @Starnop @inoc603

I want to see how many piece are downloading,and how many pieces is successful @Starnop @inoc603

I don't think it's suitable to output the stdout. You can output to the log file with debug level.

Didn't realize that "no pause" means "no new lines"... In such case, this issue may be better categorized as a bug or an enhancement, rather than a feature @Starnop .

I totally agree with you.

Could you describe what information is missing and how you'd like it to be displayed, in a bit more detail?

dfget version nessary?,I only care about the download information instead of that.
SUCCESS(0)In fact ,suceess(0) make me confused,it look like my work is failed
I wan't to see cid.coat time.file dir.file size,how many have been downloaded.is success? @inoc603

Update SUCCESS(0) to SUCCESS is OK.


Clean install produces Expected(200..204) <=> Actual(400 Bad Request)

Clean CoreOS install produced the following errors during install, which may have contributed to the UI not working (per screenshot at end).
iws001 panamax # ./coreos install --stable
Installing Panamax...
Failed to stop update-engine-reboot-manager.service: Unit update-engine-reboot-manager.service not loaded.
Unit update-engine-reboot-manager.service does not exist, proceeding anyway.
Created symlink /etc/systemd/system/update-engine-reboot-manager.service → /dev/null.
Created symlink /etc/systemd/system/update-engine.service → /dev/null.
Failed to enable unit: Unit file etcd.service does not exist.
Failed to restart etcd.service: Unit etcd.service not found.

docker pull centurylink/panamax-api:latest
................
docker pull centurylink/panamax-ui:latest
...........
docker pull google/cadvisor:0.13.0
..
docker pull centurylink/redis:latest
.
docker pull centurylink/dray:latest
.Created symlink /etc/systemd/system/multi-user.target.wants/panamax-redis.service → /etc/systemd/system/panamax-redis.service.
Created symlink /etc/systemd/system/multi-user.target.wants/panamax-dray.service → /etc/systemd/system/panamax-dray.service.
Created symlink /etc/systemd/system/multi-user.target.wants/panamax-metrics.service → /etc/systemd/system/panamax-metrics.service.
Created symlink /etc/systemd/system/multi-user.target.wants/panamax-api.service → /etc/systemd/system/panamax-api.service.
Created symlink /etc/systemd/system/multi-user.target.wants/panamax-ui.service → /etc/systemd/system/panamax-ui.service.
Nov 28 03:49:36 iws001.example.com systemd[1]: Starting Panamax Redis...
Nov 28 03:49:36 iws001.example.com env[728]: time="2017-11-28T03:49:36.410503343Z" level=error msg="Handler for DELETE /v1.24/containers/PMX_DRAY_REDIS returned error: No such container: PMX_DRAY_REDIS"
Nov 28 03:49:36 iws001.example.com docker[1860]: Error response from daemon: No such container: PMX_DRAY_REDIS
Nov 28 03:49:36 iws001.example.com systemd[1]: Started Panamax Redis.
Nov 28 03:49:36 iws001.example.com systemd[1]: Starting Panamax Dray...
Nov 28 03:49:36 iws001.example.com env[728]: time="2017-11-28T03:49:36.484020467Z" level=error msg="Handler for DELETE /v1.24/containers/PMX_DRAY returned error: No such container: PMX_DRAY"
Nov 28 03:49:36 iws001.example.com docker[1871]: Error response from daemon: No such container: PMX_DRAY
Nov 28 03:49:36 iws001.example.com systemd[1]: Started Panamax Dray.
Nov 28 03:49:36 iws001.example.com systemd[1]: Starting Panamax Metrics...
Nov 28 03:49:36 iws001.example.com env[728]: time="2017-11-28T03:49:36.568467689Z" level=error msg="Handler for DELETE /v1.24/containers/PMX_CADVISOR returned error: No such container: PMX_CADVISOR"
Nov 28 03:49:36 iws001.example.com docker[1885]: Error response from daemon: No such container: PMX_CADVISOR
Nov 28 03:49:36 iws001.example.com systemd[1]: Started Panamax Metrics.
Nov 28 03:49:36 iws001.example.com systemd[1]: Starting Panamax API...
Nov 28 03:49:36 iws001.example.com env[728]: time="2017-11-28T03:49:36.702971035Z" level=error msg="Handler for DELETE /v1.24/containers/PMX_API returned error: No such container: PMX_API"
Nov 28 03:49:36 iws001.example.com docker[1897]: Error response from daemon: No such container: PMX_API
Nov 28 03:49:36 iws001.example.com systemd[1]: Started Panamax API.
Nov 28 03:49:36 iws001.example.com systemd[1]: Starting Panamax UI...
Nov 28 03:49:36 iws001.example.com env[728]: time="2017-11-28T03:49:36.811510317Z" level=error msg="Handler for DELETE /v1.24/containers/PMX_UI returned error: No such container: PMX_UI"
Nov 28 03:49:36 iws001.example.com docker[1916]: Error response from daemon: No such container: PMX_UI
Nov 28 03:49:36 iws001.example.com systemd[1]: Started Panamax UI.
Panamax install complete

Exactly the same here.
OS: CoreOS 1576.3.0 (beta)
coreos-2gb-ams3-01 panamax # ./coreos install --stable
Installing Panamax...
Failed to stop update-engine-reboot-manager.service: Unit update-engine-reboot-manager.service not loaded.
Unit update-engine-reboot-manager.service does not exist, proceeding anyway.
Created symlink /etc/systemd/system/update-engine-reboot-manager.service → /dev/null.
Created symlink /etc/systemd/system/update-engine.service → /dev/null.
Failed to enable unit: Unit file etcd.service does not exist.
Failed to restart etcd.service: Unit etcd.service not found.

docker pull centurylink/panamax-api:latest
.........
docker pull centurylink/panamax-ui:latest
.........
docker pull google/cadvisor:0.13.0
...
docker pull centurylink/redis:latest
..
docker pull centurylink/dray:latest
...Created symlink /etc/systemd/system/multi-user.target.wants/panamax-redis.service → /etc/systemd/system/panamax-redis.service.
Created symlink /etc/systemd/system/multi-user.target.wants/panamax-dray.service → /etc/systemd/system/panamax-dray.service.
Created symlink /etc/systemd/system/multi-user.target.wants/panamax-metrics.service → /etc/systemd/system/panamax-metrics.service.
Created symlink /etc/systemd/system/multi-user.target.wants/panamax-api.service → /etc/systemd/system/panamax-api.service.
Created symlink /etc/systemd/system/multi-user.target.wants/panamax-ui.service → /etc/systemd/system/panamax-ui.service.
Dec 04 08:51:18 panamax-coreos-2gb-ams3-01 docker[1905]: Error response from daemon: No such container: PMX_UI
Dec 04 08:51:18 panamax-coreos-2gb-ams3-01 systemd[1]: Started Panamax UI.
Panamax install complete


Update pulumi config

There are a few things going on here

I added the secret keys that the frontend and backend need to the pulumi config.
I upgraded to the latest version of pulumi. This required some changes to the config script (__main__.py), since there had been a major version upgrade to pulumi_azure_native since I wrote the script.
As a consequence of the upgrade (I think it's a consequence of that) pulumi is now creating the new kinds of "flexible" postgresql servers, which are cheaper, allow us to use the latest version of postgres (16), and don't have the problem where Azure is planning to deprecate the old-style "single server" postgres servers.
Also as a consequence of that, the part of the pulumi script that creates the dtdb database on that postgres server doesn't work anymore. I opened a Pulumi issue here: https://github.com/pulumi/pulumi-azure-native/issues/2916
I added some comments for how to work around that problem.

In some sense this is a regression, since the Pulumi deployment used to just work, and now one part of it fails, and you have create the database manually. However, given that we do some serious upgrading to newer versions for pulumi, postgres, and Azure postgres servers here, I think it might still be worth to merge this.
Closes #148 and #138

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (ddb9111) 86.86% compared to head (2d5898f) 86.86%.
 Consider uploading reports for the commit ffc4fea to get more accurate results

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #152   +/-   ##
=======================================
  Coverage   86.86%   86.86%
=======================================
  Files          69       69
  Lines        4720     4720
=======================================
  Hits         4100     4100
  Misses        620      620

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

@mhauru how can we review this? Can you guide us? Are there actual check we can do or maybe not?

I would say the test here is simply if the deployment works. Which it does, so I'm happy to approve based on that and the fact it looks sensible.


Runtime metadata construction

Some operations require their metadata struct to be constructed at runtime (we don't know the size of the metadata struct at compile time).
Concat is a good example, as there may be $0..n$ tensors being concatenated.
Therefore, we need some way of building the struct at runtime, whilst ensuring that we maintain the correct WGSL memory layout (play around here: https://webgpufundamentals.org/webgpu/lessons/resources/wgsl-offset-computer.html).
I'm currently thinking of the following:
use indexmap::IndexMap;
pub struct MetaMap(IndexMap<K, V, S = RandomState>)
where V: encase::ShaderSize

We can then convert this into a [u8] with members padded and offset correctly.
We would have needed to do this when we were JITting anyway.

Better solution: https://github.com/teoxoy/encase/pull/46
Doesn't support field rearranging, but works for now and we can revisit.

#137 solved, but isn't perfect. Thanks to @cwfitzgerald for the PR on encase.


Jest - cannot find an element

If the element is nested in the Carousel component, jest cannot find it.

Component
<Carousel
defaultIndex={initialCardItem}
data={nodes}
renderItem={renderItem}
width={Metrics.screenWidth}
onSnapToItem={c => handleSnap(c)}
mode="parallax"
loop={false}
modeConfig={{
parallaxScrollingScale: 0.9,
parallaxScrollingOffset: 50
}}
windowSize={3}
/>
"@testing-library/react-native": "^7.0.2"
Jest: ^26.6.3
React-native: 0.66.4
react-native-reanimated-carousel: ^2.3.5

What do you want to do whit this testID?

Are there any help with #177?

#339


New release for eo-strings-0.5.0

New release for eo-strings-0.5.0

PR-Codex overview
This PR focuses on updating the version of the org.eolang.txt package and its dependencies.
Detailed summary:

Updated the version of the org.eolang.txt package to 0.5.0.
Updated the version of the eo-strings dependency to 0.5.0.
Added a home attribute to the sprintf, sscanf, regex, and text objects.
Added a tests package to the org.eolang.txt package.
Made changes to the implementation of several methods in the text object.

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}

@Graur this PR can be closed because the library was already released to objectionary


Handle nullable enum types

Nullable primitive types were being mapped correctly, but other value
types like Enums were not.
Make nullable types map to their underlying type, and generate the
schema for nullable Enums to be the same as the underlying Enum as well.

Looks fine to me, @jnallard you touched this most recently

Looks fine to me too! I'll merge it in


chore: rename l2tol2msg package to interop

#126  👈
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @jakim929 and the rest of your teammates on  Graphite


update version info in docs and module,

Pull Request Test Coverage Report for Build 193

1 of 1 (100.0%)  changed or added relevant line in 1 file are covered.
14 unchanged lines in 3 files lost coverage.
Overall coverage decreased (-0.4%) to 47.164%

Files with Coverage Reduction
New Missed Lines
%

clifford/tools/g3c/cost_functions.py
1
66.2%

clifford/tools/g3c/object_clustering.py
1
73.96%

clifford/init.py
12
65.16%

Totals

Change from base Build 191:
-0.4%

Covered Lines:
1322

Relevant Lines:
2803

💛  - Coveralls


Help Content on Page, not External Doc

User Story:
As a user, I want the Help Doc content on the Help Page rather than the Google doc so that I don’t have to leave the website for help.
Acceptance Criteria:

Help Content should be viewable on our website
The admin content should be exclusive to admin
The admin has the option to view the external page if wanted (to print)
No more separate admin help page

All tests passing, no merge conflict found. Successfully implemented help page


ERROR: TCL interpreter returned an error: Yosys command produced an error

Hi, I have the following problem when I run your code.
init done
/home/z/OpenROAD-flow-scripts/flow/util/markDontUse.py -p 'x1p_ASAP7* xp_ASAP7* SDF* ICG*' -i /home/z/OpenROAD-flow-scripts/flow/platforms/asap7/lib/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib -o /home/z/OpenROAD-flow-scripts/flow/objects/asap7/aes/base/lib/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
/bin/sh: 1: /home/z/OpenROAD-flow-scripts/flow/util/markDontUse.py: not found
setup done
/usr/bin/time -f 'Elapsed time: %E[h:]min:sec. CPU time: user %U sys %S (%P). Peak memory: %MKB.' yosys -v 3 -c /home/z/OpenROAD-flow-scripts/flow/scripts/synth.tcl
ERROR: TCL interpreter returned an error: Yosys command produced an error
Command exited with non-zero status 1
run_synthesis done

The script file has been updated and renamed in latest OpenROAD repo.
Please see https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/pull/1813


RuntimeError: CUDA error: out of memory

I'm running an a6000 48gb gpu, any suggestions to get this to run?
ns-train splatfacto-w --data data/phototourism/trevi-fountain/
RuntimeError: CUDA error: out of memory
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

Hi! Can you try adding --data_name trevi? It should be able to run within 8G of GRAM.

Thank you for catching this. Readme is updated accordingly.

I also edited the line here from brandenburg-gate to trevi; https://github.com/KevinXu02/splatfacto-w/blob/c6aab6b6386fe66796a16df9d40d44a69a80b061/splatfactow/nerfw_dataparser.py#L51
Am I right in saying adding nerf-w-data-parser-config --data_name trevi will also set this for me?

You might need to change both line 51 and 53.

The command should bens-train splatfacto-w --data data/phototourism/trevi-fountain/ nerf-w-data-parser-config --data_name trevi

Im still getting the same error
I also tried adding this before running the command;
export TORCH_CUDA_ARCH_LIST="8.6"
export TORCH_ALLOW_TF32_CUBLAS_OVERRIDE=1

Heres a longer snippet of the error
[15:43:22] Caching / undistorting train images                                            splatfactow_datamanager.py:213
Printing profiling stats, from longest to shortest duration in seconds
Trainer.train_iteration: 22.4927
VanillaPipeline.get_train_loss_dict: 22.4919
Traceback (most recent call last):
  File "/home/infinite/miniconda3/envs/nerfstudio/bin/ns-train", line 8, in <module>
    sys.exit(entrypoint())
  File "/home/infinite/miniconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/scripts/train.py", line 262, in entrypoint
    main(
  File "/home/infinite/miniconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/scripts/train.py", line 247, in main
    launch(
  File "/home/infinite/miniconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/scripts/train.py", line 189, in launch
    main_func(local_rank=0, world_size=world_size, config=config)
  File "/home/infinite/miniconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/scripts/train.py", line 100, in train_loop
    trainer.train()
  File "/home/infinite/miniconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/engine/trainer.py", line 262, in train
    loss, loss_dict, metrics_dict = self.train_iteration(step)
  File "/home/infinite/miniconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/utils/profiler.py", line 111, in inner
    out = func(*args, **kwargs)
  File "/home/infinite/miniconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/engine/trainer.py", line 497, in train_iteration
    _, loss_dict, metrics_dict = self.pipeline.get_train_loss_dict(step=step)
  File "/home/infinite/miniconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/utils/profiler.py", line 111, in inner
    out = func(*args, **kwargs)
  File "/home/infinite/miniconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/pipelines/base_pipeline.py", line 299, in get_train_loss_dict
    ray_bundle, batch = self.datamanager.next_train(step)
  File "/mnt/d/wslworkspace/nerfstudio/splatfacto-w/splatfactow/splatfactow_datamanager.py", line 333, in next_train
    data = deepcopy(self.cached_train[image_idx])
  File "/home/infinite/miniconda3/envs/nerfstudio/lib/python3.8/functools.py", line 967, in __get__
    val = self.func(instance)
  File "/mnt/d/wslworkspace/nerfstudio/splatfacto-w/splatfactow/splatfactow_datamanager.py", line 162, in cached_train
    return self._load_images("train", cache_images_device=self.config.cache_images)
  File "/mnt/d/wslworkspace/nerfstudio/splatfacto-w/splatfactow/splatfactow_datamanager.py", line 235, in _load_images
    cache["image"] = cache["image"].pin_memory()
RuntimeError: CUDA error: out of memory
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

Could you please try remove the pin_memery in this line?
cache["image"] = cache["image"].pin_memory()

its now training thankyou!
Should I be able to change the appearance embedded as it trains? it doesn't seem to switch instantly but looks like it is gradually changing.

Yes, you should be able to. But you need like 15k iters to let it converge a bit.

And finally, if my images are captured from a static multicamera rig and I am changing the lighting captured, I presume the camera will be overlapping on top of each other as they are the same camera in the same position, will I be able to select them?

@KevinXu02 My test actually worked, but I cant visualise the different camera index in viser as the camera overlap for selection. I see you added a to-do list for rendering and export, do you think the index selection could be added to viser?

Technically yes. But this might be not ideal as nerfstudio has lots of methods and that textbox would only work for splatw. The overlapping is indeed tricky and currently the only way I can think of to fix this is hacking the code.

ok thanks for the info! amazing work!


word_tokenize doesn't treat backtick as a starting quote

word_tokenize fails to treat backtick as a starting quote, resulting in the ` being attached to the following word, e.g.
>>> from nltk import word_tokenize
>>> text = "(usually followed by `to') having the necessary means or skill or know-how or authority to do something"
>>> word_tokenize(text)
['(', 'usually', 'followed', 'by', '`to', "'", ')', 'having', 'the', 'necessary', 'means', 'or', 'skill', 'or', 'know-how', 'or', 'authority', 'to', 'do', 'something']

Note: the token "`to" token.

The backtick is most probably an artifact of the old corpora following the PTB style of open quotations so they should be treated separately from the extended opening quotes we've added to the word_tokenize() at https://github.com/nltk/nltk/blob/develop/nltk/tokenize/init.py#L105
Instead of jamming the backtick into the group of open quotations, I suggest splitting it with an OR to treat it a little differently, i.e. re.compile(u'([«“‘„]|[]+)', re.U)`
import re
from nltk.tokenize.treebank import TreebankWordTokenizer
_treebank_word_tokenizer = TreebankWordTokenizer()

improved_open_quote_regex = re.compile(u'([«“‘„]|[`]+)', re.U)
improved_close_quote_regex = re.compile(u'([»”’]+)', re.U)
improved_punct_regex = re.compile(r'([^\.])(\.)([\]\)}>"\'' u'»”’ ' r']*)\s*$', re.U)
_treebank_word_tokenizer.STARTING_QUOTES.insert(0, (improved_open_quote_regex, r' \1 '))
_treebank_word_tokenizer.ENDING_QUOTES.insert(0, (improved_close_quote_regex, r' \1 '))
_treebank_word_tokenizer.PUNCTUATION.insert(0, (improved_punct_regex, r'\1 \2 \3 '))

text = "(usually followed by `to') having the necessary means or skill or know-how or authority to do something"
print(_treebank_word_tokenizer.tokenize(text))
print()

text = "(usually followed by ``to”) having the necessary means or skill or know-how or authority to do something"
print(_treebank_word_tokenizer.tokenize(text))

[out]:
['(', 'usually', 'followed', 'by', '`', 'to', "'", ')', 'having', 'the', 'necessary', 'means', 'or', 'skill', 'or', 'know-how', 'or', 'authority', 'to', 'do', 'something']

['(', 'usually', 'followed', 'by', '``', 'to', '”', ')', 'having', 'the', 'necessary', 'means', 'or', 'skill', 'or', 'know-how', 'or', 'authority', 'to', 'do', 'something']


Compiling at i686 machine

Hello! I've got kinda situation over here:
#> uname -a
Linux ... 4.9.6-1-ARCH ... x86_64 GNU/Linux
#> git clone ... && mkdir build && cd build
#> cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32 ../
#> make -j8
...
[ 39%] Building CXX object 3rdparty/angle/CMakeFiles/shader_translator.dir/src/compiler/translator/VersionGLSL.cpp.o
[ 39%] Linking CXX static library libshader_translator.a
[ 39%] Built target shader_translator
make: *** [Makefile:128: all] Error 2

Is it possible to cross compile the i686 version under x86_64 host machine? Or maybe Im doing something wrong. Let these things clear please! Any necessary data about my machine may be given immediately.

Hi.
Since you used make -j8, there were multiple compilation processes in parallel, and one of them failed. But there are no errors in lines you provided. Error was in the text before. Most likely there is error: text which you can search for in the whole output.
There are no strict x86-64 dependencies in the code, it should also compile in 32-bit mode. But since it uses Glib, it's tricky. Glib have architecture-dependent header files, so when you're compiling 32-bit code on a 64-bit machine, 64-bit version of glibconfig.h is included, which then fails on a static assertion.
I believe, there is a way to make all this work, by tweaking paths for pkg-config, for example. But the easiest way is to build in a 32-bit chroot.

Thank you very much! I'll do it that way.


Is PEX 1.x officially dead?

There's virtually no activity on the forums anymore.  I think it's about 1-2 posts a week now.

I wish. People still post on github and on IRC about 1.x issues, so it seems to be alive in some capacity.

Where can I download 2.x? I can't find it

I noticed CurseForge dropped to 2.4 points per day and I was getting 1-2 posts a week on the Bukkit forums.


WIP: feat: make signs significant for byte offsets

I do NOT consider this ready to merge because documentation doesn't teach about signs and the new distinction that now exists between byte COUNTS, where a positive integer is the goal (like before), and byte OFFSETS, where sign and relativity are now significant. I'm not sure what the best approach to teaching about this would be, and wanted to file this PR in this incomplete state to get feedback and thoughts.
What these changes allow is for relative and, in particular, negative byte offsets to be significant and useful in the context of seeking backwards from a seekable source like a file. For instance, if one wishes to view the last block of a file to view a footer (not uncommon in custom binary formats), it's now possible to do:
$ hexyl --skip=-1block

...instead of whatever gymnastics users may have done with other commands to calculate the backwards offset as a positive forward offset manually. N.B. that this, unfortunately, will fail:
$ hexyl --skip -1block

...because clap interprets -1block as a separate, unrecognized flag.

This looks great - thank you very much (again)!

I'm not sure what the best approach to teaching about this would be

If a command-line option is harder to understand, I am a fan of (potentially longer) descriptive --help texts that show a few examples. It's often easier to adapt an example to your own use case as compared to interpreting a formal specification.

it's now possible to do:
$ hexyl --skip=-1block

:tada:

...because clap interprets -1block as a separate, unrecognized flag.

Maybe this would help: https://docs.rs/clap/2.33.1/clap/enum.ArgSettings.html#variant.AllowLeadingHyphen ?

I added a commit that uses allow_hyphen_values for --skip and --display-offset, but I'm blanching at the diagnostics regression that happens here:
$ cargo run -- --skip --block-size 2
    Finished dev [unoptimized + debuginfo] target(s) in 0.05s
     Running `target\debug\hexyl.exe --skip --block-size 2`
Error: The system cannot find the file specified. (os error 2)
error: process didn't exit successfully: `target\debug\hexyl.exe --skip --block-size 2` (exit code: 1)

...as opposed to the more helpful text before:
$ cargo run -- --skip --block-size 2
   Compiling hexyl v0.8.0 (C:\Users\K0RYU\workspace\hexyl)
    Finished dev [unoptimized + debuginfo] target(s) in 1.40s
     Running `target\debug\hexyl.exe --skip --block-size 2`
error: The argument '--skip <N>' requires a value but none was supplied

USAGE:
    hexyl.exe --block-size <SIZE> --border <STYLE> --color <WHEN> --skip <N>

For more information try --help
error: process didn't exit successfully: `target\debug\hexyl.exe --skip --block-size 2` (exit code: 1)

Since these changes are forwards-compatible anyway, maybe it'd be best to defer thinking about allow_hyphen_values until somebody complains and provides a better case than I can here?

I've also added some (teeny) docs indicated where negative values are allowed. There's not a lot of complexity in thinking about just those -- positive relative offsets aren't really exposed anywhere (yet), but they will be when and if range notation is accepted in the form I understand it (i.e., --range 1block:+2block).

I added a commit that uses allow_hyphen_values for --skip and --display-offset, but I'm blanching at the diagnostics regression that happens here:

Due to allow_hyphen_values being activated globally, clap interprets --block-size as the VALUE for the --skip option:
--skip --block-size 2

This leaves 2 as the positional argument, causing hexyl to try and open the file 2.
This sort of behavior is probably why clap has an "allow negative numbers" option in addition. Maybe we should just go with the --option=… style (in the documentation - which we do already) and disable "allow_hyphen_values" again?

Yeah, I'm very much in favor of deferring this parsing problem for later, since whatever solution if viable should in my mind be backwards-compatible and have no regressions. It's a lot easier to simply document the behavior that very easy to work around right now.

Ok, so let's remove .allow_hyphen_values(true) for now... or did I misinterpret your answer? :smile:

@sharkdp: You interpreted correctly, sorry, I just haven't made this a priority yet what with starting a new job. I should be able to fix this in the next few days, though.

There is absolutely no hurry (and never will be). Thank you for the updates.

I've removed the commit enabling allow_hyphen_values and rebased into a single commit atop master. I think this is good to go!

Looks like CI is failing for x86_64-pc-windows-gnu because the target isn't installed? Seems unrelated to what is being changed here.

Looks like CI is failing for x86_64-pc-windows-gnu because the target isn't installed?

This has happened several times and I'm not entirely sure why. I fixed it for now by switching (back) to *-msvc instead of *-gnu.

Thank you for the updates!


Cgm/nov 225446 adding callback tests plus cosmetic fixes

just as we talked: tests for the callback in automatic context selection + modification so the callback must return the full window_handle name

Coverage decreased (-0.4%) to 88.534% when pulling 717c72d8d1ef1bda036f4568cdf53e387f89ffda on cgarmor:cgm/NOV-225446_adding_callback_tests_plus_cosmetic_fixes into c01db72a0335295b90227293f78cf57f0deba017 on Telefonica:manage_multiple_webviews_in_mobile_devices.

Coverage decreased (-0.4%) to 88.534% when pulling 717c72d8d1ef1bda036f4568cdf53e387f89ffda on cgarmor:cgm/NOV-225446_adding_callback_tests_plus_cosmetic_fixes into c01db72a0335295b90227293f78cf57f0deba017 on Telefonica:manage_multiple_webviews_in_mobile_devices.

Update doc-string of Group class with context, window_handle as you have done in PageElement class

Update doc-string of Group class with context, window_handle as you have done in PageElement class


cluster is working, but filling logs with confd errors

After upgrading my 1.1.1 staging cluster to 1.2.0, my cluster seems to be in a working state with all units on active/running. However, I noticed that some units are filling my logs with confd errors.
deis-router:
[INFO] - 2015/01/14 11:02:46 [notice] 154#0: signal process started
[INFO] - 2015/01/14 11:02:51 [notice] 164#0: signal process started
[WARNING] - 501: All the given peers are not reachable (Tried to connect to each peer twice and failed) [0]
2015-01-14T11:03:20Z 01e304387886 confd[44]: ERROR 501: All the given peers are not reachable (Tried to connect to each peer twice and failed) [0]
2015-01-14T11:03:21Z 01e304387886 confd[44]: ERROR 501: All the given peers are not reachable (Tried to connect to each peer twice and failed) [0]
[INFO] - 2015/01/14 11:03:31 [notice] 174#0: signal process started
[INFO] - 2015/01/14 11:03:37 [notice] 184#0: signal process started
2015-01-14T11:03:45Z 01e304387886 confd[44]: ERROR 501: All the given peers are not reachable (Tried to connect to each peer twice and failed) [0]
2015-01-14T11:03:45Z 01e304387886 confd[44]: ERROR 501: All the given peers are not reachable (Tried to connect to each peer twice and failed) [0]
2015-01-14T11:03:45Z 01e304387886 confd[44]: ERROR 501: All the given peers are not reachable (Tried to connect to each peer twice and failed) [0]

deis-builder:
2015-01-14T11:05:28Z a4d63487fc6c confd[146]: ERROR Config check failed: exit status 1
2015-01-14T11:05:28Z a4d63487fc6c confd[146]: ERROR Config check failed: exit status 1
2015-01-14T11:05:28Z a4d63487fc6c confd[146]: ERROR Config check failed: exit status 1
[32094c8a] -job pull(qnsolutions/appspark-web-base, v22) = OK (0)
2015-01-14T11:05:44Z a4d63487fc6c confd[146]: ERROR Config check failed: exit status 1
2015-01-14T11:05:44Z a4d63487fc6c confd[146]: ERROR Config check failed: exit status 1
2015-01-14T11:05:44Z a4d63487fc6c confd[146]: ERROR Config check failed: exit status 1
[32094c8a] +job allocate_interface(b7b25be9d28996a2b29d00845ebff0c9011520bf4e9fd8c867c7ec6b94e577d5)
[32094c8a] -job allocate_interface(b7b25be9d28996a2b29d00845ebff0c9011520bf4e9fd8c867c7ec6b94e577d5) = OK (0)
[32094c8a] +job log(start, b7b25be9d28996a2b29d00845ebff0c9011520bf4e9fd8c867c7ec6b94e577d5, 30421519a995)
[32094c8a] -job log(start, b7b25be9d28996a2b29d00845ebff0c9011520bf4e9fd8c867c7ec6b94e577d5, 30421519a995) = OK (0)
2015-01-14T11:06:09Z a4d63487fc6c confd[146]: ERROR Config check failed: exit status 1
2015-01-14T11:06:09Z a4d63487fc6c confd[146]: ERROR Config check failed: exit status 1
2015-01-14T11:06:09Z a4d63487fc6c confd[146]: ERROR Config check failed: exit status 1

deis-controller:
2015-01-14T11:07:51Z fd5ae229b1e9 confd[93]: ERROR Config check failed: exit status 1
2015-01-14T11:08:07Z fd5ae229b1e9 confd[93]: ERROR Config check failed: exit status 1
2015-01-14T11:08:14Z fd5ae229b1e9 confd[93]: ERROR 501: All the given peers are not reachable (Tried to connect to each peer twice and failed) [0]
Error:  501: All the given peers are not reachable (Tried to connect to each peer twice and failed) [0]
Error:  501: All the given peers are not reachable (Tried to connect to each peer twice and failed) [0]
2015-01-14T11:08:19Z fd5ae229b1e9 confd[93]: ERROR Config check failed: exit status 1
2015-01-14T11:08:24Z fd5ae229b1e9 confd[93]: ERROR Config check failed: exit status 1
2015-01-14T11:08:39Z fd5ae229b1e9 confd[93]: ERROR Config check failed: exit status 1
2015-01-14T11:08:59Z fd5ae229b1e9 confd[93]: ERROR Config check failed: exit status 1

/opt/bin/deis-debug-logs:
$ /opt/bin/deis-debug-logs
--- VERSIONS ---
CoreOS 509.1.0
Deis v1.0.2
etcd version 0.4.6
fleet version 0.8.3

--- SYSTEM STATUS ---

(freezes here)

seems like your etcd cluster could be in a broken state. Typically those errors start to pop up if etcd is unresponsive. Could you check etcd on all 3 nodes for me?

@bacongobbler You may be right here. I found journalctl to be rather unresponsive, as it took like up to a minute to deliver logs when I used it a week ago, and now it still didn't respond after around 5 minutes.
I don't know how to verify etcd's state without using journalctl other than calling the HTTP api:
$ curl http://<IP_ADDRESS>:4001/v2/machines
http://<IP_ADDRESS>:4001, http://<IP_ADDRESS>:4001

$ curl http://<IP_ADDRESS>:4001/v2/machines
http://<IP_ADDRESS>:4001, http://<IP_ADDRESS>:4001

$ curl http://<IP_ADDRESS>:4001/v2/machines
http://<IP_ADDRESS>:4001, http://<IP_ADDRESS>:4001, http://<IP_ADDRESS>:4001

Looking at that, something indeed seems to be broken. Any idea how to fix this without re-provisioning the cluster?

According to https://github.com/coreos/etcd/issues/863#issuecomment-60523183 you may be in an unrecoverable state if you brought a majority of the machines down. I'd take a look at that issue and see if there's something that may be useful.

@jannispl Did you end up recovering from this?

@carmstrong I ended up reprovisioning my cluster from scratch, and it's all up and working now. The most annoying problem with this issue was that I was relatively unable to gather logs from journalctl, as it seemed to lock up itself.
I'm hoping to see etcd recover from more kinds of node failures in the future.

Sounds good. Considering that we can't really nail down this issue (the confd error check could be a multitude of etcd/fleet or confd issues), and considering that we have http://docs.deis.io/en/latest/troubleshooting_deis/#all-the-given-peers-are-not-reachable I'm going to go ahead and close this. @jannispl please re-open if you find something interesting which we can track and figure out a reproducible test case. :)


nerdctl: 0.7.1 -> 0.7.2

Motivation for this change

nerdctl moved to containerd org
XDG_RUNTIME_DIRS no longer needed for --version or completion

Things done

[X] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[X] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[X] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[X] Ensured that relevant documentation is up to date
[X] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 117186 run on x86_64-linux 1

1 package built:

nerdctl


Problems with Airplay / DLNA / Home Assistant players again

What version of Music Assistant has the issue?
2.0.0b103
What version of the Home Assistant Integration have you got installed?
2024.2.2
Have you tried everything in the Troubleshooting FAQ and reviewed the Open and Closed Issues and Discussions to resolve this yourself?

[X] Yes

The problem
After updating to the latest version, Home Assistant players are no longer recognized and can no longer be added or deleted from the drop-down menu.

Airplay devices are not loaded and dozens of entities are created by DLNA players.

How to reproduce
Reinstall and restart Add On and reboot the whole system
Music Providers
Youtube Music
Player Providers
Airplay, DLNA, Chromecast
Relevant log output
2024-02-22 09:51:20.786 INFO (MainThread) [music_assistant] Starting Music Assistant Server (30e8bc3248134bed99c7c76a2585661e) version 2.0.0b103 - uvloop: False
2024-02-22 09:51:20.801 INFO (MainThread) [music_assistant.cache] Initializing cache controller...
2024-02-22 09:51:20.858 INFO (MainThread) [music_assistant.webserver] Starting server on  <IP_ADDRESS>:8095 - base url: http://<IP_ADDRESS>:8095
2024-02-22 09:51:20.961 INFO (MainThread) [music_assistant.music] Using a sync interval of 180 minutes.
2024-02-22 09:51:22.488 INFO (MainThread) [music_assistant.streams] Detected ffmpeg version 5.1.4 with libsoxr support
2024-02-22 09:51:22.488 INFO (MainThread) [music_assistant.streams] Starting server on  <IP_ADDRESS>:8096 - base url: http://<IP_ADDRESS>:8096
2024-02-22 09:51:25.099 INFO (MainThread) [music_assistant] Loaded music provider URL
2024-02-22 09:51:25.106 INFO (MainThread) [music_assistant] Loaded metadata provider TheAudioDB Metadata provider
2024-02-22 09:51:25.107 INFO (MainThread) [music_assistant] Loaded player provider Universal Group Player
2024-02-22 09:51:25.108 INFO (MainThread) [music_assistant] Loaded metadata provider fanart.tv Metadata provider
2024-02-22 09:51:25.109 INFO (MainThread) [music_assistant] Loaded metadata provider MusicBrainz Metadata provider
2024-02-22 09:51:25.111 INFO (MainThread) [music_assistant] Loaded player provider UPnP/DLNA Player provider
2024-02-22 09:51:25.112 INFO (MainThread) [music_assistant] Loaded player provider Chromecast
2024-02-22 09:51:25.114 INFO (MainThread) [music_assistant] Loaded player provider SONOS
2024-02-22 09:51:25.380 INFO (MainThread) [music_assistant.music] Sync task for URL completed
2024-02-22 09:51:25.531 INFO (MainThread) [music_assistant] Loaded music provider RadioBrowser
2024-02-22 09:51:25.532 INFO (MainThread) [music_assistant.music] Sync task for RadioBrowser completed
2024-02-22 09:51:25.782 INFO (MainThread) [music_assistant] Loaded player provider Airplay
2024-02-22 09:51:26.636 INFO (MainThread) [music_assistant] Loaded music provider YouTube Music
2024-02-22 09:51:26.869 ERROR (MainThread) [music_assistant] Error loading provider(instance) Home Assistant
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/hass_client/client.py", line 270, in connect
self._client = await self._http_session.ws_connect(ws_url, heartbeat=55)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 848, in _ws_connect
raise WSServerHandshakeError(
aiohttp.client_exceptions.WSServerHandshakeError: 502, message='Invalid response status', url=URL('ws://supervisor/core/api/websocket')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/music_assistant/server/server.py", line 505, in load_provider
await self.load_provider(prov_conf)
File "/usr/local/lib/python3.11/site-packages/music_assistant/server/server.py", line 430, in load_provider
provider = await prov_mod.setup(self, prov_manifest, conf)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/music_assistant/server/providers/hass/init.py", line 50, in setup
await prov.handle_async_init()
File "/usr/local/lib/python3.11/site-packages/music_assistant/server/providers/hass/init.py", line 162, in handle_async_init
await self.hass.connect()
File "/usr/local/lib/python3.11/site-packages/hass_client/client.py", line 283, in connect
raise CannotConnect(err) from err
hass_client.exceptions.CannotConnect: 502, message='Invalid response status', url=URL('ws://supervisor/core/api/websocket')
2024-02-22 09:51:27.193 INFO (MainThread) [music_assistant.players] Player registered: uuid:33b9881d338af8971993893c76ee8e66/HiFi-System
2024-02-22 09:51:28.290 INFO (MainThread) [music_assistant.music] Sync task for YouTube Music completed
2024-02-22 09:51:55.133 ERROR (MainThread) [music_assistant] Error loading provider(instance) Home Assistant MediaPlayers
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/music_assistant/server/server.py", line 505, in load_provider
await self.load_provider(prov_conf)
File "/usr/local/lib/python3.11/site-packages/music_assistant/server/server.py", line 424, in load_provider
raise SetupFailedError(msg)
music_assistant.common.models.errors.SetupFailedError: Provider hass_players depends on hass which is not available.
2024-02-22 09:51:56.292 INFO (MainThread) [music_assistant.players] Player registered: apb827ebf25c84/HiFi-System
2024-02-22 10:01:15.985 ERROR (MainThread) [music_assistant.webserver] [548253415760] Error handling message: CommandMessage(message_id=16, command='config/providers/save', args={'provider_domain': 'hass_players', 'values': {'players': 'media_player.hifi_system_4', 'log_level': 'GLOBAL', 'enabled': True, 'name': 'Home Assistant MediaPlayers'}, 'instance_id': 'hass_players--Pb3UM62m'})
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/music_assistant/server/controllers/webserver.py", line 374, in _run_handler
result = await result
^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/music_assistant/server/controllers/config.py", line 259, in save_provider_config
config = await self._update_provider_config(instance_id, values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/music_assistant/server/controllers/config.py", line 691, in _update_provider_config
changed_keys = config.update(values)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/music_assistant/common/models/config_entries.py", line 227, in update
parsed_val = self.values[key].parse_value(new_val)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/music_assistant/common/models/config_entries.py", line 142, in parse_value
raise ValueError(msg)
ValueError: players has unexpected type: <class 'str'>
Additional information
No response
What version of Home Assistant Core are your running
2024.2.2
What type of installation are you running?
Home Assistant OS
On what type of hardware are you running?
Raspberry Pi

Our troubleshooting page says

If after an update something isnt working …. If it is an integration problem then trying removing it from HA settings and HACS then restart HA then reinstall.

Have you tried that?

@OzGav I have run through the procedure once, but now I have the problem again that I cannot authenticate the HA plugin because the URL is not available.

Airplay and DLNA/UPNP seem to be working again for the time being. I'll do further tests.

@Smarthome-Creator on HAOS there is no URL needed, just press save

@marcelveldt , thanks for the tip. Everything seems to be working again for now.


Download help

Everytime I try to download I get virus flag saying it can't download because it cannot be scanned by virus protector I used the registry editor to turn off download virus check and also turned off browser security settings and still the same issue. Has anyone experienced the same thing?

Not an RDP Wrapper issue.
Try disable antivirus and try download again.