Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package google-guest-agent for 
openSUSE:Factory checked in at 2022-10-11 18:03:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/google-guest-agent (Old)
 and      /work/SRC/openSUSE:Factory/.google-guest-agent.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "google-guest-agent"

Tue Oct 11 18:03:01 2022 rev:16 rq:1009583 version:20220927.00

Changes:
--------
--- /work/SRC/openSUSE:Factory/google-guest-agent/google-guest-agent.changes    
2022-09-17 20:10:50.637244094 +0200
+++ 
/work/SRC/openSUSE:Factory/.google-guest-agent.new.2275/google-guest-agent.changes
  2022-10-11 18:05:30.506080794 +0200
@@ -1,0 +2,6 @@
+Mon Oct 10 12:57:39 UTC 2022 - John Paul Adrian Glaubitz 
<adrian.glaub...@suse.com>
+
+- Update to version 20220927.00
+  * Workload certificate refresh (#182)
+
+-------------------------------------------------------------------

Old:
----
  guest-agent-20220824.00.tar.gz

New:
----
  guest-agent-20220927.00.tar.gz

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

Other differences:
------------------
++++++ google-guest-agent.spec ++++++
--- /var/tmp/diff_new_pack.7SjVr5/_old  2022-10-11 18:05:31.762082824 +0200
+++ /var/tmp/diff_new_pack.7SjVr5/_new  2022-10-11 18:05:31.778082850 +0200
@@ -24,7 +24,7 @@
 %global import_path     %{provider_prefix}
 
 Name:           google-guest-agent
-Version:        20220824.00
+Version:        20220927.00
 Release:        0
 Summary:        Google Cloud Guest Agent
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.7SjVr5/_old  2022-10-11 18:05:31.834082941 +0200
+++ /var/tmp/diff_new_pack.7SjVr5/_new  2022-10-11 18:05:31.838082947 +0200
@@ -3,8 +3,8 @@
     <param 
name="url">https://github.com/GoogleCloudPlatform/guest-agent/</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="versionformat">20220824.00</param>
-    <param name="revision">20220824.00</param>
+    <param name="versionformat">20220927.00</param>
+    <param name="revision">20220927.00</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="recompress" mode="disabled">
@@ -15,7 +15,7 @@
     <param name="basename">guest-agent</param>
   </service>
   <service name="go_modules" mode="disabled">
-    <param name="archive">guest-agent-20220824.00.tar.gz</param>
+    <param name="archive">guest-agent-20220927.00.tar.gz</param>
   </service>
 </services>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.7SjVr5/_old  2022-10-11 18:05:31.862082986 +0200
+++ /var/tmp/diff_new_pack.7SjVr5/_new  2022-10-11 18:05:31.870082999 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/GoogleCloudPlatform/guest-agent/</param>
-              <param 
name="changesrevision">1bdde681dd3b700159392eb87efbef5c1bb5515c</param></service></servicedata>
+              <param 
name="changesrevision">1036d38c4ea039b6cd9683c5c9c235c59d08b102</param></service></servicedata>
 (No newline at EOF)
 

++++++ guest-agent-20220824.00.tar.gz -> guest-agent-20220927.00.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/guest-agent-20220824.00/gce-workload-cert-refresh.service 
new/guest-agent-20220927.00/gce-workload-cert-refresh.service
--- old/guest-agent-20220824.00/gce-workload-cert-refresh.service       
1970-01-01 01:00:00.000000000 +0100
+++ new/guest-agent-20220927.00/gce-workload-cert-refresh.service       
2022-09-27 23:29:08.000000000 +0200
@@ -0,0 +1,8 @@
+[Unit]
+Description=GCE Workload Certificate refresh
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/gce_workload_cert_refresh
+
+# No [Install] section - this is controlled by gce-workload-cert.timer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/guest-agent-20220824.00/gce-workload-cert-refresh.timer 
new/guest-agent-20220927.00/gce-workload-cert-refresh.timer
--- old/guest-agent-20220824.00/gce-workload-cert-refresh.timer 1970-01-01 
01:00:00.000000000 +0100
+++ new/guest-agent-20220927.00/gce-workload-cert-refresh.timer 2022-09-27 
23:29:08.000000000 +0200
@@ -0,0 +1,9 @@
+[Unit]
+Description=GCE Workload Certificate refresh timer
+
+[Timer]
+OnBootSec=5
+OnUnitActiveSec=30m
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/guest-agent-20220824.00/gce_workload_cert_refresh/main.go 
new/guest-agent-20220927.00/gce_workload_cert_refresh/main.go
--- old/guest-agent-20220824.00/gce_workload_cert_refresh/main.go       
1970-01-01 01:00:00.000000000 +0100
+++ new/guest-agent-20220927.00/gce_workload_cert_refresh/main.go       
2022-09-27 23:29:08.000000000 +0200
@@ -0,0 +1,309 @@
+//  Copyright 2022 Google LLC
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+
+// GoogleAuthorizedKeys obtains SSH keys from metadata.
+package main
+
+import (
+       "context"
+       "encoding/json"
+       "fmt"
+       "io"
+       "io/ioutil"
+       "net/http"
+       "os"
+       "time"
+
+       "github.com/GoogleCloudPlatform/guest-logging-go/logger"
+)
+
+const (
+       contentDirPrefix  = "/run/secrets/workload-spiffe-contents"
+       tempSymlinkPrefix = "/run/secrets/workload-spiffe-symlink"
+       symlink           = "/run/secrets/workload-spiffe-credentials"
+)
+
+var (
+       programName    = "gce_workload_certs_refresh"
+       version        string
+       metadataURL    = "http://169.254.169.254/computeMetadata/v1/";
+       defaultTimeout = 2 * time.Second
+)
+
+func logFormat(e logger.LogEntry) string {
+       now := time.Now().Format("2006/01/02 15:04:05")
+       return fmt.Sprintf("%s: %s", now, e.Message)
+}
+
+func getMetadata(key string) ([]byte, error) {
+       client := &http.Client{
+               Timeout: defaultTimeout,
+       }
+
+       url := metadataURL + key
+       req, err := http.NewRequest("GET", url, nil)
+       if err != nil {
+               return nil, err
+       }
+       req.Header.Add("Metadata-Flavor", "Google")
+
+       var res *http.Response
+
+       // Retry up to 5 times
+       for i := 1; i < 6; i++ {
+               res, err = client.Do(req)
+               if err == nil {
+                       break
+               }
+               logger.Errorf("error connecting to metadata server, retrying in 
3s, error: %v", err)
+               time.Sleep(time.Duration(3) * time.Second)
+       }
+       if err != nil {
+               return nil, err
+       }
+
+       if res.StatusCode == 404 {
+               return nil, fmt.Errorf("HTTP 404")
+       }
+
+       defer res.Body.Close()
+       md, err := ioutil.ReadAll(res.Body)
+       if err != nil {
+               return nil, err
+       }
+       return md, nil
+}
+
+/*
+metadata key instance/workload-identities
+
+       {
+        "status": "OK",
+        "workloadCredentials": {
+         "PROJECT.svc.id.goog": {
+          "metadata": {
+           "workload_creds_dir_path": 
"/var/run/secrets/workload-spiffe-credentials"
+          },
+          "certificatePem": "-----BEGIN CERTIFICATE-----datahere-----END 
CERTIFICATE-----",
+          "privateKeyPem": "-----BEGIN PRIVATE KEY-----datahere-----END 
PRIVATE KEY-----"
+         }
+        }
+       }
+*/
+
+// WorkloadIdentities represents Workload Identities in metadata.
+type WorkloadIdentities struct {
+       Status              string
+       WorkloadCredentials map[string]WorkloadCredential
+}
+
+// UnmarshalJSON is a custom JSON unmarshaller for WorkloadIdentities.
+func (wi *WorkloadIdentities) UnmarshalJSON(b []byte) error {
+       tmp := map[string]json.RawMessage{}
+       err := json.Unmarshal(b, &tmp)
+       if err != nil {
+               return err
+       }
+
+       if err := json.Unmarshal(tmp["status"], &wi.Status); err != nil {
+               return err
+       }
+
+       wi.WorkloadCredentials = map[string]WorkloadCredential{}
+       wcs := map[string]json.RawMessage{}
+       if err := json.Unmarshal(tmp["workloadCredentials"], &wcs); err != nil {
+               return err
+       }
+
+       for domain, value := range wcs {
+               wc := WorkloadCredential{}
+               err := json.Unmarshal(value, &wc)
+               if err != nil {
+                       return err
+               }
+               wi.WorkloadCredentials[domain] = wc
+       }
+
+       return nil
+}
+
+// WorkloadCredential represents Workload Credentials in metadata.
+type WorkloadCredential struct {
+       Metadata       Metadata
+       CertificatePem string
+       PrivateKeyPem  string
+}
+
+/*
+metadata key instance/workload-trusted-root-certs
+
+       {
+        "status": "OK",
+        "rootCertificates": {
+         "PROJECT.svc.id.goog": {
+          "metadata": {
+           "workload_creds_dir_path": 
"/var/run/secrets/workload-spiffe-credentials"
+          },
+          "rootCertificatesPem": "-----BEGIN CERTIFICATE-----datahere-----END 
CERTIFICATE-----"
+         }
+        }
+       }
+*/
+
+// WorkloadTrustedRootCerts represents Workload Trusted Root Certs in metadata.
+type WorkloadTrustedRootCerts struct {
+       Status           string
+       RootCertificates map[string]RootCertificate
+}
+
+// UnmarshalJSON is a custom JSON unmarshaller for WorkloadTrustedRootCerts
+func (wtrc *WorkloadTrustedRootCerts) UnmarshalJSON(b []byte) error {
+       tmp := map[string]json.RawMessage{}
+       err := json.Unmarshal(b, &tmp)
+       if err != nil {
+               return err
+       }
+
+       if err := json.Unmarshal(tmp["status"], &wtrc.Status); err != nil {
+               return err
+       }
+
+       wtrc.RootCertificates = map[string]RootCertificate{}
+       rcs := map[string]json.RawMessage{}
+       if err := json.Unmarshal(tmp["rootCertificates"], &rcs); err != nil {
+               return err
+       }
+
+       for domain, value := range rcs {
+               rc := RootCertificate{}
+               err := json.Unmarshal(value, &rc)
+               if err != nil {
+                       return err
+               }
+               wtrc.RootCertificates[domain] = rc
+       }
+
+       return nil
+}
+
+// RootCertificate represents a Root Certificate in metadata
+type RootCertificate struct {
+       Metadata            Metadata
+       RootCertificatesPem string
+}
+
+// Metadata represents Metadata in metadata
+type Metadata struct {
+       WorkloadCredsDirPath string
+}
+
+func main() {
+       ctx := context.Background()
+
+       opts := logger.LogOpts{
+               LoggerName:     programName,
+               FormatFunction: logFormat,
+               // No need for syslog.
+               DisableLocalLogging: true,
+       }
+
+       opts.Writers = []io.Writer{os.Stderr}
+       logger.Init(ctx, opts)
+       defer logger.Infof("Done")
+
+       // TODO: prune old dirs
+
+       if err := refreshCreds(); err != nil {
+               logger.Fatalf(err.Error())
+       }
+
+}
+
+func refreshCreds() error {
+       project, err := getMetadata("project/project-id")
+       if err != nil {
+               return fmt.Errorf("Error getting project ID: %v", err)
+       }
+
+       wisMd, err := getMetadata("instance/workload-identities")
+       if err != nil {
+               logger.Infof("No workload identities found: %v", err)
+               return nil
+       }
+
+       wtrcsMd, err := getMetadata("instance/workload-trusted-root-certs")
+       if err != nil {
+               return fmt.Errorf("Error getting workload-identities: %v", err)
+       }
+
+       domain := fmt.Sprintf("%s.svc.id.goog", project)
+       logger.Infof("Rotating workload credentials for domain %s", domain)
+
+       wis := WorkloadIdentities{}
+       if err := json.Unmarshal(wisMd, &wis); err != nil {
+               return fmt.Errorf("Error unmarshaling workload trusted root 
certs: %v", err)
+       }
+
+       wtrcs := WorkloadTrustedRootCerts{}
+       if err := json.Unmarshal(wtrcsMd, &wtrcs); err != nil {
+               return fmt.Errorf("Error unmarshaling workload trusted root 
certs: %v", err)
+       }
+
+       now := time.Now().Format(time.RFC3339)
+       contentDir := fmt.Sprintf("%s-%s", contentDirPrefix, now)
+       tempSymlink := fmt.Sprintf("%s-%s", tempSymlinkPrefix, now)
+
+       logger.Infof("Creating timestamp contents dir %s", contentDir)
+
+       if err := os.MkdirAll(contentDir, 0750); err != nil {
+               return fmt.Errorf("Error creating contents dir: %v", err)
+       }
+
+       if err := os.WriteFile(fmt.Sprintf("%s/certificates.pem", contentDir), 
[]byte(wis.WorkloadCredentials[domain].CertificatePem), 0666); err != nil {
+               return fmt.Errorf("Error writing certificates.pem: %v", err)
+       }
+
+       if err := os.WriteFile(fmt.Sprintf("%s/private_key.pem", contentDir), 
[]byte(wis.WorkloadCredentials[domain].PrivateKeyPem), 0666); err != nil {
+               return fmt.Errorf("Error writing private_key.pem: %v", err)
+       }
+
+       if err := os.WriteFile(fmt.Sprintf("%s/ca_certificates.pem", 
contentDir), []byte(wtrcs.RootCertificates[domain].RootCertificatesPem), 0666); 
err != nil {
+               return fmt.Errorf("Error writing ca_certificates.pem: %v", err)
+       }
+
+       if err := os.Symlink(contentDir, tempSymlink); err != nil {
+               return fmt.Errorf("Error creating temporary link: %v", err)
+       }
+
+       oldTarget, err := os.Readlink(symlink)
+       if err != nil {
+               logger.Infof("Error reading existing symlink: %v\n", err)
+               oldTarget = ""
+       }
+
+       logger.Infof("Rotating symlink %s", symlink)
+
+       if err := os.Rename(tempSymlink, symlink); err != nil {
+               return fmt.Errorf("Error rotating target link: %v", err)
+       }
+
+       if oldTarget != "" {
+               logger.Infof("Remove old content dir %s", oldTarget)
+               if err := os.RemoveAll(oldTarget); err != nil {
+                       return fmt.Errorf("Failed to remove old symlink target: 
%v", err)
+               }
+       }
+
+       return nil
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/guest-agent-20220824.00/gce_workload_certs_refresh/main.go 
new/guest-agent-20220927.00/gce_workload_certs_refresh/main.go
--- old/guest-agent-20220824.00/gce_workload_certs_refresh/main.go      
2022-08-24 03:13:05.000000000 +0200
+++ new/guest-agent-20220927.00/gce_workload_certs_refresh/main.go      
1970-01-01 01:00:00.000000000 +0100
@@ -1,289 +0,0 @@
-//  Copyright 2022 Google LLC
-//
-//  Licensed under the Apache License, Version 2.0 (the "License");
-//  you may not use this file except in compliance with the License.
-//  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-
-// GoogleAuthorizedKeys obtains SSH keys from metadata.
-package main
-
-import (
-       "context"
-       "encoding/json"
-       "fmt"
-       "io"
-       "io/ioutil"
-       "net/http"
-       "os"
-       "time"
-
-       "github.com/GoogleCloudPlatform/guest-logging-go/logger"
-)
-
-const (
-       contentDirPrefix  = "/run/secrets/workload-spiffe-contents"
-       tempSymlinkPrefix = "/run/secrets/workload-spiffe-symlink"
-       symlink           = "/run/secrets/workload-spiffe-credentials"
-)
-
-var (
-       programName    = "gce_workload_certs_refresh"
-       version        string
-       metadataURL    = "http://169.254.169.254/computeMetadata/v1/";
-       defaultTimeout = 2 * time.Second
-)
-
-func logFormat(e logger.LogEntry) string {
-       now := time.Now().Format("2006/01/02 15:04:05")
-       return fmt.Sprintf("%s: %s", now, e.Message)
-}
-
-func getMetadata(key string) ([]byte, error) {
-       client := &http.Client{
-               Timeout: defaultTimeout,
-       }
-
-       url := metadataURL + key
-       req, err := http.NewRequest("GET", url, nil)
-       if err != nil {
-               return nil, err
-       }
-       req.Header.Add("Metadata-Flavor", "Google")
-
-       var res *http.Response
-
-       // Retry up to 5 times
-       for i := 1; i < 6; i++ {
-               res, err = client.Do(req)
-               if err == nil {
-                       break
-               }
-               logger.Errorf("error connecting to metadata server, retrying in 
3s, error: %v", err)
-               time.Sleep(time.Duration(3) * time.Second)
-       }
-       if err != nil {
-               return nil, err
-       }
-       defer res.Body.Close()
-
-       md, err := ioutil.ReadAll(res.Body)
-       if err != nil {
-               return nil, err
-       }
-       return md, nil
-}
-
-/*
-metadata key instance/workload-identities
-
-       {
-        "status": "OK",
-        "workloadCredentials": {
-         "PROJECT.svc.id.goog": {
-          "metadata": {
-           "workload_creds_dir_path": 
"/var/run/secrets/workload-spiffe-credentials"
-          },
-          "certificatePem": "-----BEGIN CERTIFICATE-----datahere-----END 
CERTIFICATE-----",
-          "privateKeyPem": "-----BEGIN PRIVATE KEY-----datahere-----END 
PRIVATE KEY-----"
-         }
-        }
-       }
-*/
-
-// WorkloadIdentities represents Workload Identities in metadata.
-type WorkloadIdentities struct {
-       Status              string
-       WorkloadCredentials map[string]WorkloadCredential
-}
-
-// UnmarshalJSON is a custom JSON unmarshaller for WorkloadIdentities.
-func (wi *WorkloadIdentities) UnmarshalJSON(b []byte) error {
-       tmp := map[string]json.RawMessage{}
-       err := json.Unmarshal(b, &tmp)
-       if err != nil {
-               return err
-       }
-
-       if err := json.Unmarshal(tmp["status"], &wi.Status); err != nil {
-               return err
-       }
-
-       wi.WorkloadCredentials = map[string]WorkloadCredential{}
-       wcs := map[string]json.RawMessage{}
-       if err := json.Unmarshal(tmp["workloadCredentials"], &wcs); err != nil {
-               return err
-       }
-
-       for domain, value := range wcs {
-               wc := WorkloadCredential{}
-               err := json.Unmarshal(value, &wc)
-               if err != nil {
-                       return err
-               }
-               wi.WorkloadCredentials[domain] = wc
-       }
-
-       return nil
-}
-
-// WorkloadCredential represents Workload Credentials in metadata.
-type WorkloadCredential struct {
-       Metadata       Metadata
-       CertificatePem string
-       PrivateKeyPem  string
-}
-
-/*
-metadata key instance/workload-trusted-root-certs
-
-       {
-        "status": "OK",
-        "rootCertificates": {
-         "PROJECT.svc.id.goog": {
-          "metadata": {
-           "workload_creds_dir_path": 
"/var/run/secrets/workload-spiffe-credentials"
-          },
-          "rootCertificatesPem": "-----BEGIN CERTIFICATE-----datahere-----END 
CERTIFICATE-----"
-         }
-        }
-       }
-*/
-
-// WorkloadTrustedRootCerts represents Workload Trusted Root Certs in metadata.
-type WorkloadTrustedRootCerts struct {
-       Status           string
-       RootCertificates map[string]RootCertificate
-}
-
-// UnmarshalJSON is a custom JSON unmarshaller for WorkloadTrustedRootCerts
-func (wtrc *WorkloadTrustedRootCerts) UnmarshalJSON(b []byte) error {
-       tmp := map[string]json.RawMessage{}
-       err := json.Unmarshal(b, &tmp)
-       if err != nil {
-               return err
-       }
-
-       if err := json.Unmarshal(tmp["status"], &wtrc.Status); err != nil {
-               return err
-       }
-
-       wtrc.RootCertificates = map[string]RootCertificate{}
-       rcs := map[string]json.RawMessage{}
-       if err := json.Unmarshal(tmp["rootCertificates"], &rcs); err != nil {
-               return err
-       }
-
-       for domain, value := range rcs {
-               rc := RootCertificate{}
-               err := json.Unmarshal(value, &rc)
-               if err != nil {
-                       return err
-               }
-               wtrc.RootCertificates[domain] = rc
-       }
-
-       return nil
-}
-
-// RootCertificate represents a Root Certificate in metadata
-type RootCertificate struct {
-       Metadata            Metadata
-       RootCertificatesPem string
-}
-
-// Metadata represents Metadata in metadata
-type Metadata struct {
-       WorkloadCredsDirPath string
-}
-
-func main() {
-       ctx := context.Background()
-
-       opts := logger.LogOpts{
-               LoggerName:     programName,
-               FormatFunction: logFormat,
-       }
-
-       opts.Writers = []io.Writer{os.Stderr}
-       logger.Init(ctx, opts)
-       defer logger.Infof("Done")
-
-       // TODO: prune old dirs
-
-       if err := refreshCreds(); err != nil {
-               logger.Fatalf(err.Error())
-       }
-
-}
-
-func refreshCreds() error {
-       project, err := getMetadata("project/project-id")
-       if err != nil {
-               return fmt.Errorf("Error getting project ID: %v", err)
-       }
-       domain := fmt.Sprintf("%s.svc.id.goog", project)
-       logger.Infof("Rotating workload credentials for domain %s", domain)
-
-       wisMd, err := getMetadata("instance/workload-identities")
-       if err != nil {
-               return fmt.Errorf("Error getting workload-identities: %v", err)
-       }
-
-       wtrcsMd, err := getMetadata("instance/workload-trusted-root-certs")
-       if err != nil {
-               return fmt.Errorf("Error getting workload-identities: %v", err)
-       }
-
-       wis := WorkloadIdentities{}
-       if err := json.Unmarshal(wisMd, &wis); err != nil {
-               return fmt.Errorf("Error unmarshaling workload trusted root 
certs: %v", err)
-       }
-
-       wtrcs := WorkloadTrustedRootCerts{}
-       if err := json.Unmarshal(wtrcsMd, &wtrcs); err != nil {
-               return fmt.Errorf("Error unmarshaling workload trusted root 
certs: %v", err)
-       }
-
-       now := time.Now().Format(time.RFC3339)
-       contentDir := fmt.Sprintf("%s-%s", contentDirPrefix, now)
-       tempSymlink := fmt.Sprintf("%s-%s", tempSymlinkPrefix, now)
-
-       logger.Infof("Creating timestamp contents dir %s", contentDir)
-
-       // TODO: validate filesystem permissions
-       if err := os.MkdirAll(contentDir, 0750); err != nil {
-               return fmt.Errorf("Error creating contents dir: %v", err)
-       }
-
-       if err := os.WriteFile(fmt.Sprintf("%s/certificates.pem", contentDir), 
[]byte(wis.WorkloadCredentials[domain].CertificatePem), 0666); err != nil {
-               return fmt.Errorf("Error writing certificates.pem: %v", err)
-       }
-
-       if err := os.WriteFile(fmt.Sprintf("%s/private_key.pem", contentDir), 
[]byte(wis.WorkloadCredentials[domain].PrivateKeyPem), 0666); err != nil {
-               return fmt.Errorf("Error writing private_key.pem: %v", err)
-       }
-
-       if err := os.WriteFile(fmt.Sprintf("%s/ca_certificates.pem", 
contentDir), []byte(wtrcs.RootCertificates[domain].RootCertificatesPem), 0666); 
err != nil {
-               return fmt.Errorf("Error writing ca_certificates.pem: %v", err)
-       }
-
-       if err := os.Symlink(contentDir, tempSymlink); err != nil {
-               return fmt.Errorf("Error creating temporary link: %v", err)
-       }
-
-       logger.Infof("Rotating symlink %s", symlink)
-
-       if err := os.Rename(tempSymlink, symlink); err != nil {
-               return fmt.Errorf("Error rotating target link: %v", err)
-       }
-
-       return nil
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/guest-agent-20220824.00/packaging/debian/rules 
new/guest-agent-20220927.00/packaging/debian/rules
--- old/guest-agent-20220824.00/packaging/debian/rules  2022-08-24 
03:13:05.000000000 +0200
+++ new/guest-agent-20220927.00/packaging/debian/rules  2022-09-27 
23:29:08.000000000 +0200
@@ -10,8 +10,7 @@
 export GOPROXY := https://proxy.golang.org
 export GO111MODULE := on
 export GOPATH := /usr/share/gocode
-export DH_GOLANG_BUILDPKG := 
github.com/GoogleCloudPlatform/guest-agent/google_guest_agent 
github.com/GoogleCloudPlatform/guest-agent/google_metadata_script_runner
-
+export DH_GOLANG_BUILDPKG := 
github.com/GoogleCloudPlatform/guest-agent/google_guest_agent 
github.com/GoogleCloudPlatform/guest-agent/google_metadata_script_runner 
github.com/GoogleCloudPlatform/guest-agent/gce_workload_cert_refresh
 
 %:
        dh $@  --buildsystem=golang --with=golang,systemd
@@ -21,6 +20,8 @@
        dh_auto_install -- --no-source
        install -d debian/google-guest-agent/usr/share/google-guest-agent
        install -p -m 0644 instance_configs.cfg 
debian/google-guest-agent/usr/share/google-guest-agent
+       install -d debian/google-guest-agent/lib/systemd/system
+       install -p -m 0644 gce-workload-cert-refresh.timer 
debian/google-guest-agent/lib/systemd/system/
 
 override_dh_golang:
        # We don't use any packaged dependencies, so skip dh_golang step.
@@ -36,8 +37,9 @@
        install -p -m 0644 *.service 
debian/google-guest-agent/lib/systemd/system/
        install -d debian/google-guest-agent/lib/systemd/system-preset
        install -p -m 0644 *.preset 
debian/google-guest-agent/lib/systemd/system-preset/
-       dh_systemd_enable google-guest-agent.service 
google-startup-scripts.service google-shutdown-scripts.service
+       dh_systemd_enable google-guest-agent.service 
google-startup-scripts.service google-shutdown-scripts.service 
gce-workload-cert-refresh.timer
 
 override_dh_systemd_start:
-       # Only perform start/stop actions for the guest agent.
+       # Only perform start/stop actions for the guest agent and cert refresh 
timer.
        dh_systemd_start google-guest-agent.service
+       dh_systemd_start gce-workload-cert-refresh.timer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/guest-agent-20220824.00/packaging/google-guest-agent.spec 
new/guest-agent-20220927.00/packaging/google-guest-agent.spec
--- old/guest-agent-20220824.00/packaging/google-guest-agent.spec       
2022-08-24 03:13:05.000000000 +0200
+++ new/guest-agent-20220927.00/packaging/google-guest-agent.spec       
2022-09-27 23:29:08.000000000 +0200
@@ -38,7 +38,7 @@
 %autosetup
 
 %build
-for bin in google_guest_agent google_metadata_script_runner; do
+for bin in google_guest_agent google_metadata_script_runner 
gce_workload_cert_refresh; do
   pushd "$bin"
   GOPATH=%{_gopath} CGO_ENABLED=0 %{_go} build -ldflags="-s -w -X 
main.version=%{_version}" -mod=readonly
   popd
@@ -51,6 +51,7 @@
 install -d %{buildroot}%{_bindir}
 install -p -m 0755 google_guest_agent/google_guest_agent 
%{buildroot}%{_bindir}/google_guest_agent
 install -p -m 0755 google_metadata_script_runner/google_metadata_script_runner 
%{buildroot}%{_bindir}/google_metadata_script_runner
+install -p -m 0755 gce_workload_cert_refresh/gce_workload_cert_refresh 
%{buildroot}%{_bindir}/gce_workload_cert_refresh
 install -d %{buildroot}/usr/share/google-guest-agent
 install -p -m 0644 instance_configs.cfg 
%{buildroot}/usr/share/google-guest-agent/instance_configs.cfg
 %if 0%{?el6}
@@ -64,6 +65,8 @@
 install -p -m 0644 %{name}.service %{buildroot}%{_unitdir}
 install -p -m 0644 google-startup-scripts.service %{buildroot}%{_unitdir}
 install -p -m 0644 google-shutdown-scripts.service %{buildroot}%{_unitdir}
+install -p -m 0644 gce-workload-cert-refresh.service %{buildroot}%{_unitdir}
+install -p -m 0644 gce-workload-cert-refresh.timer %{buildroot}%{_unitdir}
 install -p -m 0644 90-%{name}.preset 
%{buildroot}%{_presetdir}/90-%{name}.preset
 %endif
 
@@ -73,6 +76,7 @@
 /usr/share/google-guest-agent/instance_configs.cfg
 %{_bindir}/google_guest_agent
 %{_bindir}/google_metadata_script_runner
+%{_bindir}/gce_workload_cert_refresh
 %if 0%{?el6}
 /etc/init/%{name}.conf
 /etc/init/google-startup-scripts.conf
@@ -81,6 +85,8 @@
 %{_unitdir}/%{name}.service
 %{_unitdir}/google-startup-scripts.service
 %{_unitdir}/google-shutdown-scripts.service
+%{_unitdir}/gce-workload-cert-refresh.service
+%{_unitdir}/gce-workload-cert-refresh.timer
 %{_presetdir}/90-%{name}.preset
 %endif
 
@@ -99,10 +105,12 @@
   systemctl enable google-guest-agent.service >/dev/null 2>&1 || :
   systemctl enable google-startup-scripts.service >/dev/null 2>&1 || :
   systemctl enable google-shutdown-scripts.service >/dev/null 2>&1 || :
+  systemctl enable gce-workload-cert-refresh.timer >/dev/null 2>&1 || :
 
   if [ -d /run/systemd/system ]; then
     systemctl daemon-reload >/dev/null 2>&1 || :
     systemctl start google-guest-agent.service >/dev/null 2>&1 || :
+    systemctl start gce-workload-cert-refresh.timer >/dev/null 2>&1 || :
   fi
 else
   # Package upgrade
@@ -117,6 +125,7 @@
   systemctl --no-reload disable google-guest-agent.service >/dev/null 2>&1 || :
   systemctl --no-reload disable google-startup-scripts.service >/dev/null 2>&1 
|| :
   systemctl --no-reload disable google-shutdown-scripts.service >/dev/null 
2>&1 || :
+  systemctl --no-reload disable gce-workload-cert-refresh.timer >/dev/null 
2>&1 || :
   if [ -d /run/systemd/system ]; then
     systemctl stop google-guest-agent.service >/dev/null 2>&1 || :
   fi

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

Reply via email to