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
<[email protected]>
+
+- 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://[email protected]@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 ++++++