Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package google-osconfig-agent for 
openSUSE:Factory checked in at 2021-07-20 15:39:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/google-osconfig-agent (Old)
 and      /work/SRC/openSUSE:Factory/.google-osconfig-agent.new.2632 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "google-osconfig-agent"

Tue Jul 20 15:39:28 2021 rev:6 rq:907174 version:20210712.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/google-osconfig-agent/google-osconfig-agent.changes  
    2021-06-23 17:38:49.168519990 +0200
+++ 
/work/SRC/openSUSE:Factory/.google-osconfig-agent.new.2632/google-osconfig-agent.changes
    2021-07-20 15:40:11.857551096 +0200
@@ -1,0 +2,15 @@
+Mon Jul 19 16:11:38 UTC 2021 - John Paul Adrian Glaubitz 
<adrian.glaub...@suse.com>
+
+- Update to version 20210712.1
+  * Skip getting patch info when no patches are found. (#369)
+- from version 20210712.00
+  * Add Terraform scripts for multi-project deployments (#367)
+- from version 20210709.00
+  * Add examples/Terraform directory. (#366)
+- from version 20210707.00
+  * Fix bug in printing packages to update,
+    return error for zypper patch (#365)
+- from version 20210629.00
+  * Add CloudOps examples for CentOS (#364)
+
+-------------------------------------------------------------------

Old:
----
  osconfig-20210621.00.tar.gz

New:
----
  osconfig-20210712.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ google-osconfig-agent.spec ++++++
--- /var/tmp/diff_new_pack.OkJrSE/_old  2021-07-20 15:40:12.441552141 +0200
+++ /var/tmp/diff_new_pack.OkJrSE/_new  2021-07-20 15:40:12.445552148 +0200
@@ -24,7 +24,7 @@
 %global import_path     %{provider_prefix}
 
 Name:           google-osconfig-agent
-Version:        20210621.00
+Version:        20210712.1
 Release:        0
 Summary:        Google Cloud Guest Agent
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.OkJrSE/_old  2021-07-20 15:40:12.489552227 +0200
+++ /var/tmp/diff_new_pack.OkJrSE/_new  2021-07-20 15:40:12.493552234 +0200
@@ -3,8 +3,8 @@
     <param name="url">https://github.com/GoogleCloudPlatform/osconfig</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="versionformat">20210621.00</param>
-    <param name="revision">20210621.00</param>
+    <param name="versionformat">20210712.1</param>
+    <param name="revision">20210712.1</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="recompress" mode="disabled">
@@ -15,6 +15,6 @@
     <param name="basename">osconfig</param>
   </service>
   <service name="go_modules" mode="disabled">
-    <param name="archive">osconfig-20210621.00.tar.gz</param>
+    <param name="archive">osconfig-20210712.1.tar.gz</param>
   </service>
 </services>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.OkJrSE/_old  2021-07-20 15:40:12.513552270 +0200
+++ /var/tmp/diff_new_pack.OkJrSE/_new  2021-07-20 15:40:12.513552270 +0200
@@ -1,4 +1,4 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/GoogleCloudPlatform/osconfig</param>
-              <param 
name="changesrevision">77b0fedf1e0dc2c996bb93c81ad294197813e1f6</param></service></servicedata>
\ No newline at end of file
+              <param 
name="changesrevision">9cf21c39c01ebaa5b15df309101620b0863176f7</param></service></servicedata>
\ No newline at end of file

++++++ osconfig-20210621.00.tar.gz -> osconfig-20210712.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/OSPolicyAssignments/console/cloudops-centos7.yaml
 
new/osconfig-20210712.1/examples/OSPolicyAssignments/console/cloudops-centos7.yaml
--- 
old/osconfig-20210621.00/examples/OSPolicyAssignments/console/cloudops-centos7.yaml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/OSPolicyAssignments/console/cloudops-centos7.yaml
  2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,41 @@
+id: cloudops-policy
+mode: ENFORCEMENT
+resourceGroups:
+- os_filter:
+    os_short_name: centos
+    os_version: '7'
+  resources:
+  - id: add-repo
+    repository:
+      yum:
+        id: google-cloud-ops-agent
+        display_name: Google Cloud Ops Agent Repository
+        base_url: 
https://packages.cloud.google.com/yum/repos/google-cloud-ops-agent-el7-x86_64-all
+        gpg_keys:
+        - https://packages.cloud.google.com/yum/doc/yum-key.gpg
+        - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
+  - id: install-pkg
+    pkg:
+      desiredState: INSTALLED
+      yum:
+        name: google-cloud-ops-agent
+  - id: exec-script
+    exec:
+      validate:
+        script: |-
+          if [[ $(rpm --query --queryformat '%{VERSION}
+          ' google-cloud-ops-agent) == '1.0.2' ]]; then exit 100; else exit 
101; fi
+        interpreter: SHELL
+      enforce:
+        script: sudo yum remove -y google-cloud-ops-agent || true; sudo yum 
install
+          -y 'google-cloud-ops-agent-1.0.2*' && exit 100
+        interpreter: SHELL
+  - id: ensure-agent-running
+    exec:
+      validate:
+        script: if (ps aux | grep 'opt[/].*google-cloud-ops-agent.*bin/'); 
then exit
+          100; else exit 101; fi
+        interpreter: SHELL
+      enforce:
+        script: sudo systemctl start google-cloud-ops-agent.target && exit 100
+        interpreter: SHELL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20210621.00/examples/Terraform/README.md 
new/osconfig-20210712.1/examples/Terraform/README.md
--- old/osconfig-20210621.00/examples/Terraform/README.md       1970-01-01 
01:00:00.000000000 +0100
+++ new/osconfig-20210712.1/examples/Terraform/README.md        2021-07-12 
22:47:16.000000000 +0200
@@ -0,0 +1,6 @@
+# Terraform Examples
+
+This directory contains examples illustrating the use of Terraform for creating
+OSConfig related resources.
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/README.md 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/README.md
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/README.md 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/README.md  
    2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,110 @@
+# Prototype to deploy OSConfig Guest Policies in Multiple GCP Projects
+
+This guide describes how to use [Terraform](https://www.terraform.io/) to 
deploy an OSConfig Guest Policy in multiple GCP Projects.
+
+It proceeds through the following stages:
+
+*  Determine the list of GCP Projects
+*  For each one of them
+   *  Create OSConfig Guest Policies that will execute a basic command (as an 
illustrative example)
+
+# How to use
+
+From the [Cloud Shell](https://cloud.google.com/shell)
+
+## Clone the repository
+
+Clone the Git repository with the command
+
+```
+git clone 
ssh://usern...@gmail.com@source.developers.google.com:2022/p/scip-deployment-manager-dev/r/terraform-multi-project-osconfig-guest-policy
+```
+
+change directory, into the repository
+
+```
+cd terraform-multi-project-osconfig-guest-policy
+```
+
+## Configure Authorization
+
+A service account ought to be authorized to perform operations in Google Cloud
+infrastructure.
+
+### Create Custom IAM Roles
+
+In order to assign all the necessary permissions to the service account,
+[create an IAM custom 
+role](https://cloud.google.com/sdk/gcloud/reference/beta/iam/roles/create)
+using the following commands in the script:
+
+```
+preparation_scripts/create_terraform_custom_role.sh
+enable_services_in_admin_project.sh
+```
+
+Where the `TerraformDeployer.yaml` file in this repository already specifies 
all the permissions needed.
+
+### Create Service Account and assign Custom IAM Role
+
+Use the commands in the script:
+
+```
+preparation_scripts/create_terraform_service_account.sh
+```
+
+in order to:
+
+*  Create a dedicated service account
+*  Assign to it the Custom IAM Role
+*  Download the service account key
+
+which follows the GCP documentation for
+
+*  [Creating service 
accounts](https://cloud.google.com/sdk/gcloud/reference/iam/service-accounts/create).
+*  [Binding IAM 
policies](https://cloud.google.com/sdk/gcloud/reference/projects/add-iam-policy-binding).
+*  [Creating service account 
keys](https://cloud.google.com/sdk/gcloud/reference/iam/service-accounts/keys/create).
+
+
+### Enable required services
+
+Use the command in the script
+
+```
+preparation_scripts/enable_services_in_admin_project.sh
+```
+
+to enable the API services required for this tutorial.
+
+
+### Set up environment variables
+
+As a helper example, use the file
+
+```
+preparation_scripts/setup_env.sh
+```
+
+Edit the file to introduce the appropriate values in the environment variables.
+
+Then use the command
+
+```
+source preparation_scripts/setup_env.sh
+```
+
+### Create Resources in order
+
+You can now proceed to create the cloud resouces by using the following 
modules in order:
+
+```
+create_projects
+enable_projects_for_vmmanager
+create_guest_policies
+create_patch_deployments
+create_vm_instances
+```
+
+Note that the last one `create_vm_instance` could be done either before or 
after `create_guest_policies` and `create_path_deployments`.
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/auth/README.md
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/auth/README.md
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/auth/README.md
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/auth/README.md
 2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,10 @@
+This directory is a placeholder for authorization-related files.
+
+For example, the Service Account key file.
+
+
+Use the files below to create IAM Custom Roles:
+
+* TerraformDeployer.yaml:   for creating Folders, Projects and VMs
+* VM_Manager_Deployer.yaml: for creating OS Config Guest Policies and Patch 
Deployments
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/auth/TerraformDeployer.yaml
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/auth/TerraformDeployer.yaml
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/auth/TerraformDeployer.yaml
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/auth/TerraformDeployer.yaml
    2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,33 @@
+title: Terraform Deployer can create GCP resources
+description: Custom Role for service account that deploys Terraform plans.
+stage: ALPHA
+includedPermissions:
+- compute.addresses.create
+- compute.addresses.delete
+- compute.addresses.get
+- compute.addresses.use
+- compute.disks.create
+- compute.firewalls.create
+- compute.firewalls.delete
+- compute.firewalls.get
+- compute.instanceTemplates.create
+- compute.instanceTemplates.delete
+- compute.instanceTemplates.get
+- compute.instanceTemplates.useReadOnly
+- compute.instances.create
+- compute.instances.delete
+- compute.instances.get
+- compute.instances.setLabels
+- compute.instances.setMetadata
+- compute.instances.setServiceAccount
+- compute.networks.get
+- compute.networks.updatePolicy
+- compute.subnetworks.use
+- compute.subnetworks.useExternalIp
+- compute.zones.get
+- compute.zones.list
+- billing.resourceAssociations.create
+- resourcemanager.organizations.get
+- resourcemanager.folders.create
+- resourcemanager.projects.create
+- resourcemanager.projects.createBillingAssignment
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/auth/VM_Manager_Deployer.yaml
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/auth/VM_Manager_Deployer.yaml
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/auth/VM_Manager_Deployer.yaml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/auth/VM_Manager_Deployer.yaml
  2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,8 @@
+title: VM Manager Deployer
+description: Custom Role for creating  Guest Policies and Patch Jobs
+stage: ALPHA
+includedPermissions:
+- osconfig.guestPolicies.update
+- resourcemanager.organizations.get
+- resourcemanager.projects.create
+- resourcemanager.projects.createBillingAssignment
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/README.md
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/README.md
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/README.md
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/README.md
        2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,48 @@
+# OSConfig Guest Policies
+
+This module is used to create an OSConfig Guest Policy that will trigger
+an installation in the VM instances belonging to this project.
+
+# Usage
+
+## Configure the Variables
+
+*  Define the folder name in the environment variable: `TF_VAR_folder_name`.
+*  Define the organization ID in the environment variable: 
`TF_VAR_organization_id`.
+
+For example:
+
+```
+export TF_VAR_folder_name="production-department-x-folder"
+export TF_VAR_organization_id="0123456789"
+```
+
+## Launching the Module
+
+Use the standard commands
+
+```
+terraform init
+```
+
+```
+terraform validate
+```
+
+```
+terraform plan -out=plan.out
+```
+
+Inspect the output, and if you are satisfied, run
+
+```
+terraform apply plan.out
+```
+
+## Destroying the Resources
+
+Once you no longer have use for the OSConfig Guest Policies, you can destroy 
them with the command
+
+```
+terraform destroy
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/guest_policy_bash_script.txt
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/guest_policy_bash_script.txt
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/guest_policy_bash_script.txt
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/guest_policy_bash_script.txt
     2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,13 @@
+date >> /tmp/osconfig-terraform-multi-project-test.txt
+echo "Execution PASSED!" >> date >> 
/tmp/osconfig-terraform-multi-project-test.txt
+
+INSTANCE_NAME=$(curl 
http://metadata.google.internal/computeMetadata/v1/instance/name -H 
Metadata-Flavor:Google)
+INSTANCE_ZONE=$(curl 
http://metadata.google.internal/computeMetadata/v1/instance/zone -H 
Metadata-Flavor:Google | cut -d'/' -f4)
+
+echo "INSTANCE_NAME=${INSTANCE_NAME}" >> 
/tmp/osconfig-terraform-multi-project-test.txt
+echo "INSTANCE_ZONE=${INSTANCE_ZONE}" >> 
/tmp/osconfig-terraform-multi-project-test.txt
+
+gcloud compute instances add-metadata \
+  "${INSTANCE_NAME}" \
+  --zone="${INSTANCE_ZONE}" \
+  --metadata='osconfig-terraform-multi-project-test=PASSED'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/main.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/main.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/main.tf
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/main.tf
  2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,61 @@
+locals {
+  guest_policy_linux = file("${path.module}/guest_policy_bash_script.txt")
+}
+
+data "google_active_folder" "terraform_osconfig" {
+  display_name = var.folder_name
+  parent       = "organizations/${var.organization_id}"
+}
+
+locals {
+  folder_id = split("/",data.google_active_folder.terraform_osconfig.id)[1]
+}
+
+data "google_projects" "in_folder" {
+  filter = "parent.id:${local.folder_id}"
+}
+
+data "google_project" "listed_in_folder" {
+  count = length(data.google_projects.in_folder.projects)
+
+  project_id = data.google_projects.in_folder.projects[count.index].project_id
+}
+
+locals {
+  projects = compact(data.google_project.listed_in_folder.*.number)
+}
+
+resource "google_os_config_guest_policies" "guest_policies" {
+  provider = google-beta
+
+  count = length(data.google_projects.in_folder.projects)
+
+  guest_policy_id = "tf-test-guest-policy"
+  description     = "Test OSConfig Guest Policy in Linux VM instances."
+
+  project = data.google_projects.in_folder.projects[count.index].project_id
+
+  assignment {
+    group_labels {
+      labels = var.labels
+    }
+    os_types {
+      os_short_name = "DEBIAN"
+      os_version    = "9*"
+    }
+    os_types {
+      os_short_name = "UBUNTU"
+    }
+  }
+
+  recipes {
+    name          = "tf-test-recipe-linux"
+    desired_state = "INSTALLED"
+    install_steps {
+      script_run {
+        interpreter = "SHELL"
+        script      = local.guest_policy_linux
+      }
+    }
+  }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/outputs.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/outputs.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/outputs.tf
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/outputs.tf
       2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,14 @@
+output "folder_id" {
+  description = "ID of the folder containing projects of interest."
+  value       = local.folder_id
+}
+
+output "google_projects" {
+  description = "List of projects inside a given folder"
+  value       = local.projects
+}
+
+output "guest_policies_self_links" {
+  description = "List of self-links for OSConfig Guest Policies."
+  value       = google_os_config_guest_policies.guest_policies
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/terraform.example.tfvars
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/terraform.example.tfvars
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/terraform.example.tfvars
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/terraform.example.tfvars
 2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,3 @@
+labels = {
+  key = "value"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/terraform.tfvars
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/terraform.tfvars
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/terraform.tfvars
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/terraform.tfvars
 2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,3 @@
+labels = {
+  pizza_topping = "pepperoni"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/variables.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/variables.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/variables.tf
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/variables.tf
     2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,14 @@
+variable "organization_id" {
+  description = "Cloud Organization where to create Projects."
+  type        = string
+}
+
+variable "folder_name" {
+  description = "Folder from where to list projects."
+  type        = string
+}
+
+variable "labels" {
+  description = "Labels, provided as a map"
+  type        = map(string)
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/versions.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/versions.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_guest_policies/versions.tf
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_guest_policies/versions.tf
      2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,12 @@
+terraform {
+  required_version = ">=0.13.0"
+  required_providers {
+    google  = ">= 3.43, <4.0"
+    archive = "~> 1.0"
+    random  = "~> 2.0"
+    null    = "~> 2.1"
+  }
+  provider_meta "google" {
+    module_name = 
"blueprints/terraform/terraform-google-vm:compute_instance/v6.1.0"
+  }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/README.md
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/README.md
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/README.md
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/README.md
     2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,49 @@
+# OSConfig Patch Deployments
+
+This module is used to create an OSConfig Patch Deployment that will trigger
+the application of a patch in VMs on multiple projects.
+
+# Usage
+
+## Configure the Variables
+
+*  Define the folder name in the environment variable: `TF_VAR_folder_name`.
+*  Define the organization ID in the environment variable: 
`TF_VAR_organization_id`.
+
+For example:
+
+```
+export TF_VAR_folder_name="production-department-x-folder"
+export TF_VAR_organization_id="0123456789"
+```
+
+
+## Launching the Module
+
+Use the standard commands
+
+```
+terraform init
+```
+
+```
+terraform validate
+```
+
+```
+terraform plan -out=plan.out
+```
+
+Inspect the output, and if you are satisfied, run
+
+```
+terraform apply plan.out
+```
+
+## Destroying the Resources
+
+Once you no longer have use for the OSConfig Patch Deployments, you can 
destroy them with the command
+
+```
+terraform destroy
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/main.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/main.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/main.tf
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/main.tf
       2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,41 @@
+data "google_active_folder" "terraform_osconfig" {
+  display_name = var.folder_name
+  parent       = "organizations/${var.organization_id}"
+}
+
+locals {
+  folder_id = split("/",data.google_active_folder.terraform_osconfig.id)[1]
+}
+
+data "google_projects" "in_folder" {
+  filter = "parent.id:${local.folder_id}"
+}
+
+data "google_project" "list_in_folder" {
+  count = length(data.google_projects.in_folder.projects)
+
+  project_id = data.google_projects.in_folder.projects[count.index].project_id
+}
+
+locals {
+  projects = compact(data.google_project.list_in_folder.*.number)
+}
+
+resource "google_os_config_patch_deployment" "patch_deployments" {
+  patch_deployment_id = "patch-deploy-inst"
+
+  count = length(data.google_projects.in_folder.projects)
+
+  project = data.google_projects.in_folder.projects[count.index].project_id
+
+  instance_filter {
+    group_labels {
+      labels = var.labels
+      }
+    }
+
+  one_time_schedule {
+    # Execute 2 minutes from now
+    execute_time = timeadd(timestamp(), var.patch_deployment_execute_time)
+  }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/outputs.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/outputs.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/outputs.tf
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/outputs.tf
    2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,14 @@
+output "folder_id" {
+  description = "ID of the folder containing projects of interest."
+  value       = local.folder_id
+}
+
+output "google_projects" {
+  description = "List of projects inside a given folder"
+  value       = local.projects
+}
+
+output "patch_deployments_self_links" {
+  description = "List of self-links for OSConfig Patch Deployments."
+  value       = google_os_config_patch_deployment.patch_deployments
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/terraform.example.tfvars
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/terraform.example.tfvars
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/terraform.example.tfvars
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/terraform.example.tfvars
      2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,3 @@
+labels = {
+  key = "value"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/terraform.tfvars
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/terraform.tfvars
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/terraform.tfvars
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/terraform.tfvars
      2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,3 @@
+labels = {
+  pizza_topping = "pepperoni"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/variables.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/variables.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/variables.tf
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/variables.tf
  2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,19 @@
+variable "organization_id" {
+  description = "Cloud Organization where to create Projects."
+  type        = string
+}
+
+variable "folder_name" {
+  description = "Folder from where to list projects."
+  type        = string
+}
+
+variable "labels" {
+  description = "Labels, provided as a map"
+  type        = map(string)
+}
+
+variable "patch_deployment_execute_time" {
+  description = "Time to wait before deploying the patch jobs."
+  type        = string
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/versions.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/versions.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_patch_deployments/versions.tf
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_patch_deployments/versions.tf
   2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,12 @@
+terraform {
+  required_version = ">=0.13.0"
+  required_providers {
+    google  = ">= 3.43, <4.0"
+    archive = "~> 1.0"
+    random  = "~> 2.0"
+    null    = "~> 2.1"
+  }
+  provider_meta "google" {
+    module_name = 
"blueprints/terraform/terraform-google-vm:compute_instance/v6.1.0"
+  }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_projects/README.md
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_projects/README.md
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_projects/README.md
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_projects/README.md
      2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,45 @@
+# Create GCP Project in a Folder
+
+This module is used to create a set of GCP projects in a Folder.
+
+# Usage
+
+## Configure the Variables
+
+The variables required by this module are defined in the `variables.tf` file.
+
+You can provide the specific values desired for your case by defining the 
environment variables
+
+*   `TF_VAR_organization_id`
+*   `TF_VAR_folder_name`
+*   `TF_VAR_billing_account`
+
+## Launching the Module
+
+Use the standard commands
+
+```
+terraform init
+```
+
+```
+terraform validate
+```
+
+```
+terraform plan -out=plan.out
+```
+
+Inspect the output, and if you are satisfied, run
+
+```
+terraform apply plan.out
+```
+
+## Destroying the Resources
+
+Once you no longer have use for the projects, you can destroy them with the 
command
+
+```
+terraform destroy
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_projects/main.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_projects/main.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_projects/main.tf
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_projects/main.tf
        2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,16 @@
+resource "google_folder" "tf_osconfig_folder" {
+  display_name = var.folder_name
+  parent       = "organizations/${var.organization_id}"
+}
+
+module "project-tf" {
+  source = "terraform-google-modules/project-factory/google"
+
+  count = 3
+
+  name              = "tf-osconfig-test-${count.index}"
+  random_project_id = "true"
+  org_id            = var.organization_id
+  billing_account   = var.billing_account
+  folder_id         = google_folder.tf_osconfig_folder.id
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_projects/outputs.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_projects/outputs.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_projects/outputs.tf
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_projects/outputs.tf
     2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,10 @@
+output "folder" {
+  description = "The ID of the new folder"
+  value       = google_folder.tf_osconfig_folder.id
+}
+
+output "projects_self_links" {
+  description = "List of self-links to created projects"
+  value       = ["${module.project-tf.*}"]
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_projects/variables.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_projects/variables.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_projects/variables.tf
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_projects/variables.tf
   2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,14 @@
+variable "organization_id" {
+  description = "Cloud Organization where to create Projects."
+  type        = string
+}
+
+variable "folder_name" {
+  description = "New folder in which to create Projects."
+  type        = string
+}
+
+variable "billing_account" {
+  description = "Billing Account to which charge the Projects."
+  type        = string
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_projects/versions.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_projects/versions.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_projects/versions.tf
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_projects/versions.tf
    2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,12 @@
+terraform {
+  required_version = ">=0.13.0"
+  required_providers {
+    google  = ">= 3.43, <4.0"
+    archive = "~> 1.0"
+    random  = "~> 2.0"
+    null    = "~> 2.1"
+  }
+  provider_meta "google" {
+    module_name = 
"blueprints/terraform/terraform-google-vm:compute_instance/v6.1.0"
+  }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/README.md
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/README.md
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/README.md
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/README.md
  2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,48 @@
+# VM Instances
+
+This module is used to create multple VM instances for the purpose of testing
+the execution of the OSConfig Guest Policy.
+
+# Usage
+
+## Configure the Variables
+
+*  Define the folder name in the environment variable: `TF_VAR_folder_name`.
+*  Define the organization ID in the environment variable: 
`TF_VAR_organization_id`.
+
+For example:
+
+```
+export TF_VAR_folder_name="production-department-x-folder"
+export TF_VAR_organization_id="0123456789"
+```
+
+## Launching the Module
+
+Use the standard commands
+
+```
+terraform init
+```
+
+```
+terraform validate
+```
+
+```
+terraform plan -out=plan.out
+```
+
+Inspect the output, and if you are satisfied, run
+
+```
+terraform apply plan.out
+```
+
+## Destroying the Resources
+
+Once you no longer have use for the VM instances, you can destroy them with 
the command
+
+```
+terraform destroy
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/main.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/main.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/main.tf
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/main.tf
    2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,143 @@
+data "google_active_folder" "terraform_osconfig" {
+  display_name = var.folder_name
+  parent       = "organizations/${var.organization_id}"
+}
+
+locals {
+  folder_id = split("/",data.google_active_folder.terraform_osconfig.id)[1]
+}
+
+data "google_projects" "in_folder" {
+  filter = "parent.id:${local.folder_id}"
+}
+
+data "google_project" "list_in_folder" {
+  count = length(data.google_projects.in_folder.projects)
+
+  project_id = data.google_projects.in_folder.projects[count.index].project_id
+}
+
+locals {
+  projects = compact(data.google_project.list_in_folder.*.number)
+}
+
+
+locals {
+  scopes = [
+    #
+    #  Required by OS Config
+    #
+    "https://www.googleapis.com/auth/cloud-platform";,
+    #
+    # Default scopes
+    #   
https://cloud.google.com/sdk/gcloud/reference/alpha/compute/instances/set-scopes#--scopes
+    "https://www.googleapis.com/auth/devstorage.read_only";,
+    "https://www.googleapis.com/auth/logging.write";,
+    "https://www.googleapis.com/auth/monitoring.write";,
+    "https://www.googleapis.com/auth/pubsub";,
+    "https://www.googleapis.com/auth/service.management.readonly";,
+    "https://www.googleapis.com/auth/servicecontrol";,
+    "https://www.googleapis.com/auth/trace.append";,
+  ]
+}
+
+
+resource "google_compute_network" "vpc_network" {
+  name    = "vpc-network"
+  count   = length(data.google_projects.in_folder.projects)
+  project = data.google_projects.in_folder.projects[count.index].project_id
+}
+
+resource "google_compute_firewall" "default" {
+  name    = "ssh-firewall-rule"
+  count   = length(data.google_projects.in_folder.projects)
+  project = data.google_projects.in_folder.projects[count.index].project_id
+  network = google_compute_network.vpc_network[count.index].name
+  allow {
+    protocol = "tcp"
+    ports    = ["22"]
+  }
+}
+
+resource "google_compute_address" "external_ip" {
+  name    = "external-ip"
+  region  = "us-central1"
+  count   = length(data.google_projects.in_folder.projects)
+  project = data.google_projects.in_folder.projects[count.index].project_id
+}
+
+resource "google_service_account" "default" {
+  account_id   = "tf-osconfig-vm"
+  display_name = "TF OSConfig VM Service Account"
+  count        = length(data.google_projects.in_folder.projects)
+  project      = 
data.google_projects.in_folder.projects[count.index].project_id
+}
+
+#
+#  The following roles are needed for the service account to be able to write 
instance metadata.
+#
+resource "google_project_iam_binding" "log_writer" {
+  count   = length(data.google_projects.in_folder.projects)
+  project = data.google_projects.in_folder.projects[count.index].project_id
+  role    = "roles/logging.logWriter"
+  members = [
+    "serviceAccount:${google_service_account.default[count.index].email}"
+  ]
+}
+
+resource "google_project_iam_binding" "compute_viewer" {
+  count   = length(data.google_projects.in_folder.projects)
+  project = data.google_projects.in_folder.projects[count.index].project_id
+  role    = "roles/compute.viewer"
+  members = [
+    "serviceAccount:${google_service_account.default[count.index].email}"
+  ]
+}
+
+resource "google_project_iam_binding" "compute_instance_admin_v1" {
+  count   = length(data.google_projects.in_folder.projects)
+  project = data.google_projects.in_folder.projects[count.index].project_id
+  role    = "roles/compute.instanceAdmin.v1"
+  members = [
+    "serviceAccount:${google_service_account.default[count.index].email}"
+  ]
+}
+
+resource "google_project_iam_binding" "iam_service_account_user" {
+  count   = length(data.google_projects.in_folder.projects)
+  project = data.google_projects.in_folder.projects[count.index].project_id
+  role    = "roles/iam.serviceAccountUser"
+  members = [
+    "serviceAccount:${google_service_account.default[count.index].email}"
+  ]
+}
+
+resource "google_compute_instance" "default" {
+  name = "tf-osconfig-vm"
+
+  count = length(data.google_projects.in_folder.projects)
+
+  project = data.google_projects.in_folder.projects[count.index].project_id
+
+  machine_type = "n1-standard-1"
+  zone         = "us-central1-a"
+
+  boot_disk {
+    initialize_params {
+      image = "debian-cloud/debian-9"
+    }
+  }
+
+  network_interface {
+    network = google_compute_network.vpc_network[count.index].name
+    access_config {
+      nat_ip = google_compute_address.external_ip[count.index].address
+    }
+  }
+
+  service_account {
+    email  = google_service_account.default[count.index].email
+    scopes = local.scopes
+  }
+  labels = var.labels
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/outputs.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/outputs.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/outputs.tf
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/outputs.tf
 2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,20 @@
+output "folder_id" {
+  description = "ID of the folder containing projects of interest."
+  value       = local.folder_id
+}
+
+output "google_projects" {
+  description = "List of projects inside a given folder"
+  value       = local.projects
+}
+
+output "google_compute_instance_self_links" {
+  description = "List of self-links for VM instances."
+  value       = google_compute_instance.default
+  sensitive   = true
+}
+
+output "google_compute_instance_ip" {
+  description = "External IP addresses of VM instances."
+  value       = google_compute_address.external_ip
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/terraform.example.tfvars
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/terraform.example.tfvars
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/terraform.example.tfvars
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/terraform.example.tfvars
   2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,3 @@
+labels = {
+  key = "value"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/terraform.tfvars
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/terraform.tfvars
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/terraform.tfvars
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/terraform.tfvars
   2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,3 @@
+labels = {
+  pizza_topping = "pepperoni"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/variables.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/variables.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/variables.tf
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/variables.tf
       2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,14 @@
+variable "organization_id" {
+  description = "Cloud Organization where to create Projects."
+  type        = string
+}
+
+variable "folder_name" {
+  description = "Folder from where to list projects."
+  type        = string
+}
+
+variable "labels" {
+  type        = map(string)
+  description = "Labels, provided as a map"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/versions.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/versions.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/create_vm_instances/versions.tf
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/create_vm_instances/versions.tf
        2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,9 @@
+terraform {
+  required_version = ">=0.13.0"
+  required_providers {
+    google = ">= 3.43, <4.0"
+  }
+  provider_meta "google" {
+    module_name = 
"blueprints/terraform/terraform-google-vm:compute_instance/v6.1.0"
+  }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/README.md
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/README.md
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/README.md
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/README.md
        2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,50 @@
+#  Enable Projects to use VMManager
+
+This module is used to enable projects to use the VMManager functionalities.
+
+This includes
+
+*   Enabling required APIs
+*   Defining METADATA at project level
+
+# Usage
+
+## Configure the Variables
+
+Define the folder name in the environment variable: `TF_VAR_folder_name`.
+
+For example:
+
+```
+export TF_VAR_folder_name="production-department-x-folder"
+```
+
+## Launching the Module
+
+Use the standard commands
+
+```
+terraform init
+```
+
+```
+terraform validate
+```
+
+```
+terraform plan -out=plan.out
+```
+
+Inspect the output, and if you are satisfied, run
+
+```
+terraform apply plan.out
+```
+
+## Destroying the Resources
+
+The resources created by this module can be destroyed with the command:
+
+```
+terraform destroy
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/main.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/main.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/main.tf
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/main.tf
  2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,84 @@
+data "google_active_folder" "terraform_osconfig" {
+  display_name = var.folder_name
+  parent       = "organizations/${var.organization_id}"
+}
+
+locals {
+  folder_id = split("/",data.google_active_folder.terraform_osconfig.id)[1]
+}
+
+data "google_projects" "in_folder" {
+  filter = "parent.id:${local.folder_id}"
+}
+
+data "google_project" "listed_in_folder" {
+  count = length(data.google_projects.in_folder.projects)
+
+  project_id = data.google_projects.in_folder.projects[count.index].project_id
+}
+
+locals {
+  projects  = compact(data.google_project.listed_in_folder.*.number)
+}
+
+module "project-services" {
+  source  = 
"terraform-google-modules/project-factory/google//modules/project_services"
+
+  count = length(data.google_projects.in_folder.projects)
+
+  project_id = data.google_projects.in_folder.projects[count.index].project_id
+
+  enable_apis = true
+  activate_apis = [
+    "iam.googleapis.com",
+    "logging.googleapis.com",
+    "osconfig.googleapis.com",
+    "containeranalysis.googleapis.com",
+  ]
+}
+
+
+resource "google_project_service" "compute_api" {
+  count = length(data.google_projects.in_folder.projects)
+
+  project = data.google_projects.in_folder.projects[count.index].project_id
+
+  service = "compute.googleapis.com"
+  # Wait for some time after the API has been enabled before continuing, as the
+  # call returns before the API has actually finished initializing.
+  provisioner "local-exec" {
+    command ="sleep 60"
+  }
+}
+
+
+resource "google_compute_project_metadata_item" "osconfig_enable_meta" {
+  count = length(data.google_projects.in_folder.projects)
+
+  project = data.google_projects.in_folder.projects[count.index].project_id
+
+  key     = "enable-osconfig"
+  value   = "TRUE"
+  depends_on = [ google_project_service.compute_api ]
+}
+
+resource "google_compute_project_metadata_item" "osconfig_log_level_meta" {
+  count = length(data.google_projects.in_folder.projects)
+
+  project = data.google_projects.in_folder.projects[count.index].project_id
+
+  key     = "osconfig-log-level"
+  value   = "debug"
+  depends_on = [ google_project_service.compute_api ]
+}
+
+resource "google_compute_project_metadata_item" "enable_guest_attributes_meta" 
{
+  count = length(data.google_projects.in_folder.projects)
+
+  project = data.google_projects.in_folder.projects[count.index].project_id
+
+  key     = "enable-guest-attributes"
+  value   = "TRUE"
+  depends_on = [ google_project_service.compute_api ]
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/outputs.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/outputs.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/outputs.tf
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/outputs.tf
       2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,14 @@
+output "google_projects" {
+  description = "List of projects inside a given folder"
+  value       = local.projects
+}
+
+output "folder_name" {
+  description = "Folder Name"
+  value       = data.google_active_folder.terraform_osconfig.display_name
+}
+
+output "folder_id" {
+  description = "Folder ID"
+  value       = local.folder_id
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/variables.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/variables.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/variables.tf
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/variables.tf
     2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,9 @@
+variable "organization_id" {
+  description = "Cloud Organization from where to list Projects."
+  type        = string
+}
+
+variable "folder_name" {
+  description = "Folder from where to list projects."
+  type        = string
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/versions.tf
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/versions.tf
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/versions.tf
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/enable_projects_for_vmmanager/versions.tf
      2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,12 @@
+terraform {
+  required_version = ">=0.13.0"
+  required_providers {
+    google  = ">= 3.43, <4.0"
+    archive = "~> 1.0"
+    random  = "~> 2.0"
+    null    = "~> 2.1"
+  }
+  provider_meta "google" {
+    module_name = 
"blueprints/terraform/terraform-google-vm:compute_instance/v6.1.0"
+  }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/preparation_scripts/create_terraform_custom_role.sh
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/preparation_scripts/create_terraform_custom_role.sh
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/preparation_scripts/create_terraform_custom_role.sh
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/preparation_scripts/create_terraform_custom_role.sh
    2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,10 @@
+#!/bin/bash
+#
+#   Create IAM Custom role to use Terraform to create infrastructure
+#   such as Folders, Projects, VM instances, networks and firewalls.
+#
+
+gcloud iam roles create TerraformDeployer5 \
+--organization=${TF_VAR_organization_id} \
+--file=../auth/TerraformDeployer.yaml
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/preparation_scripts/create_terraform_service_account.sh
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/preparation_scripts/create_terraform_service_account.sh
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/preparation_scripts/create_terraform_service_account.sh
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/preparation_scripts/create_terraform_service_account.sh
        2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,31 @@
+#!/bin/bash
+#
+#   Create a service account dedicated to managing infrastructure
+#   via Terraform commands.
+#
+#
+
+
+SERVICE_ACCOUNT_NAME="terraform-infra"
+
+gcloud iam service-accounts create "${SERVICE_ACCOUNT_NAME}"
+
+
+#
+#  Grant the IAM Custom Role for Terraform to the service account
+#
+gcloud organizations add-iam-policy-binding ${TF_VAR_organization_id} \
+--member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${TF_ADMIN_PROJECT}.iam.gserviceaccount.com"
 \
+--role=organizations/${TF_VAR_organization_id}/roles/TerraformDeployer5
+
+
+#
+#  Create and download keys from the service account
+#
+gcloud iam service-accounts keys create \
+../auth/terraform_deployer.json \
+--key-file-type=json \
+--iam-account=${SERVICE_ACCOUNT_NAME}@${TF_ADMIN_PROJECT}.iam.gserviceaccount.com
+
+
+export GOOGLE_APPLICATION_CREDENTIALS=../auth/terraform_deployer.json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/preparation_scripts/enable_services_in_admin_project.sh
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/preparation_scripts/enable_services_in_admin_project.sh
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/preparation_scripts/enable_services_in_admin_project.sh
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/preparation_scripts/enable_services_in_admin_project.sh
        2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,13 @@
+#!/bin/bash
+#
+#  APIs to enable in the admin project
+#
+
+gcloud config set project "${TF_ADMIN_PROJECT}"
+
+gcloud services enable cloudbilling.googleapis.com
+gcloud services enable cloudresourcemanager.googleapis.com
+gcloud services enable compute.googleapis.com
+gcloud services enable iam.googleapis.com
+gcloud services enable serviceusage.googleapis.com
+gcloud services enable sourcerepo.googleapis.com
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/preparation_scripts/setup_env.sh
 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/preparation_scripts/setup_env.sh
--- 
old/osconfig-20210621.00/examples/Terraform/multi-project-deployments/preparation_scripts/setup_env.sh
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/osconfig-20210712.1/examples/Terraform/multi-project-deployments/preparation_scripts/setup_env.sh
       2021-07-12 22:47:16.000000000 +0200
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+export TF_VAR_organization_id=""
+export TF_VAR_folder_name=""
+export TF_VAR_billing_account=""
+export TF_VAR_patch_deployment_execute_time=""
+export TF_ADMIN_PROJECT="terraform-admin-${USER}"
+export GOOGLE_APPLICATION_CREDENTIALS="${HOME}/service_account_key.json"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20210621.00/ospatch/apt_upgrade.go 
new/osconfig-20210712.1/ospatch/apt_upgrade.go
--- old/osconfig-20210621.00/ospatch/apt_upgrade.go     2021-06-21 
19:19:54.000000000 +0200
+++ new/osconfig-20210712.1/ospatch/apt_upgrade.go      2021-07-12 
22:47:16.000000000 +0200
@@ -92,7 +92,7 @@
                pkgNames = append(pkgNames, pkg.Name)
        }
 
-       msg := fmt.Sprintf("%d packages: %v", len(pkgNames), fPkgs)
+       msg := fmt.Sprintf("%d packages: %q", len(pkgNames), fPkgs)
        if aptOpts.dryrun {
                clog.Infof(ctx, "Running in dryrun mode, not updating %s", msg)
                return nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20210621.00/ospatch/googet_update.go 
new/osconfig-20210712.1/ospatch/googet_update.go
--- old/osconfig-20210621.00/ospatch/googet_update.go   2021-06-21 
19:19:54.000000000 +0200
+++ new/osconfig-20210712.1/ospatch/googet_update.go    2021-07-12 
22:47:16.000000000 +0200
@@ -79,7 +79,7 @@
                pkgNames = append(pkgNames, pkg.Name)
        }
 
-       msg := fmt.Sprintf("%d packages: %v", len(pkgNames), fPkgs)
+       msg := fmt.Sprintf("%d packages: %q", len(pkgNames), fPkgs)
        if googetOpts.dryrun {
                clog.Infof(ctx, "Running in dryrun mode, not updating %s", msg)
                return nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20210621.00/ospatch/yum_update.go 
new/osconfig-20210712.1/ospatch/yum_update.go
--- old/osconfig-20210621.00/ospatch/yum_update.go      2021-06-21 
19:19:54.000000000 +0200
+++ new/osconfig-20210712.1/ospatch/yum_update.go       2021-07-12 
22:47:16.000000000 +0200
@@ -111,7 +111,7 @@
                pkgNames = append(pkgNames, pkg.Name)
        }
 
-       msg := fmt.Sprintf("%d packages: %v", len(pkgNames), fPkgs)
+       msg := fmt.Sprintf("%d packages: %q", len(pkgNames), fPkgs)
        if yumOpts.dryrun {
                clog.Infof(ctx, "Running in dryrun mode, not updating %s", msg)
                return nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20210621.00/ospatch/zypper_patch.go 
new/osconfig-20210712.1/ospatch/zypper_patch.go
--- old/osconfig-20210621.00/ospatch/zypper_patch.go    2021-06-21 
19:19:54.000000000 +0200
+++ new/osconfig-20210712.1/ospatch/zypper_patch.go     2021-07-12 
22:47:16.000000000 +0200
@@ -130,11 +130,11 @@
        if zOpts.withUpdate {
                pkgUpdates, err = packages.ZypperUpdates(ctx)
                if err != nil {
-                       return nil
+                       return err
                }
                pkgToPatchesMap, err = packages.ZypperPackagesInPatch(ctx, 
patches)
                if err != nil {
-                       return nil
+                       return err
                }
        }
 
@@ -159,7 +159,7 @@
        if len(fpkgs) == 0 {
                clog.Infof(ctx, "No non-patch packages to update.")
        } else {
-               msg := fmt.Sprintf("%d patches: %v", len(fpkgs), fpkgs)
+               msg := fmt.Sprintf("%d patches: %q", len(fpkgs), fpkgs)
                if zOpts.dryrun {
                        clog.Infof(ctx, "Running in dryrun mode, not Updating 
%s", msg)
                } else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20210621.00/packages/packages.go 
new/osconfig-20210712.1/packages/packages.go
--- old/osconfig-20210621.00/packages/packages.go       2021-06-21 
19:19:54.000000000 +0200
+++ new/osconfig-20210712.1/packages/packages.go        2021-07-12 
22:47:16.000000000 +0200
@@ -81,6 +81,10 @@
        Name, Arch, Version string
 }
 
+func (i *PkgInfo) String() string {
+       return fmt.Sprintf("%s %s %s", i.Name, i.Arch, i.Version)
+}
+
 // ZypperPatch describes a Zypper patch.
 type ZypperPatch struct {
        Name, Category, Severity, Summary string
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20210621.00/packages/zypper.go 
new/osconfig-20210712.1/packages/zypper.go
--- old/osconfig-20210621.00/packages/zypper.go 2021-06-21 19:19:54.000000000 
+0200
+++ new/osconfig-20210712.1/packages/zypper.go  2021-07-12 22:47:16.000000000 
+0200
@@ -381,6 +381,9 @@
 
 // ZypperPackagesInPatch returns the list of patches, a package upgrade 
belongs to
 func ZypperPackagesInPatch(ctx context.Context, patches []*ZypperPatch) 
(map[string][]string, error) {
+       if len(patches) == 0 {
+               return make(map[string][]string), nil
+       }
        var patchNames []string
        for _, patch := range patches {
                patchNames = append(patchNames, patch.Name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20210621.00/packages/zypper_test.go 
new/osconfig-20210712.1/packages/zypper_test.go
--- old/osconfig-20210621.00/packages/zypper_test.go    2021-06-21 
19:19:54.000000000 +0200
+++ new/osconfig-20210712.1/packages/zypper_test.go     2021-07-12 
22:47:16.000000000 +0200
@@ -317,5 +317,14 @@
                        }
                }
        }
+}
 
+func TestZypperPackagesInPatch(t *testing.T) {
+       ppMap, err := ZypperPackagesInPatch(testCtx, nil)
+       if err != nil {
+               t.Errorf("Unexpected error: %v", err)
+       }
+       if len(ppMap) > 0 {
+               t.Errorf("Unexpected result: expected no mappings, got = 
[%+v]", ppMap)
+       }
 }

++++++ vendor.tar.gz ++++++

Reply via email to