tremplin: replace use of deprecated modules/functions

This change ensures `tremplin` no longer uses deprecated modules and/or
functions. Most of the changes relate to `io/ioutil`, deprecated since
Go 1.16[1], with equivalent functions/variables being implemented in
the `io` and `os` modules.

The only other change involves using `grpc.WithContextDialer()` instead
of the deprecated `grpc.WithDialer()`[2].

[1] https://pkg.go.dev/io/ioutil
[2] https://pkg.go.dev/google.golang.org/grpc#WithDialer

BUG=b:218608945
TEST=staticcheck "chromiumos/tremplin/..."

Change-Id: I552074e12b619bad4dcb87c5afe62dec5fccb3c6
Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.corp-partner.google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/tremplin/+/6062823
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Commit-Queue: Jordan Abrahams-Whitehead <ajordanr@google.com>
Reviewed-by: Jordan Abrahams-Whitehead <ajordanr@google.com>
diff --git a/src/chromiumos/tremplin/instance_file_server.go b/src/chromiumos/tremplin/instance_file_server.go
index a58969f..c7bb8c6 100644
--- a/src/chromiumos/tremplin/instance_file_server.go
+++ b/src/chromiumos/tremplin/instance_file_server.go
@@ -6,7 +6,6 @@
 
 import (
 	"io"
-	"io/ioutil"
 	"log"
 	"os"
 	"syscall"
@@ -110,7 +109,7 @@
 	// instead of using FileMode.IsDir().
 	if (s.Mode & syscall.S_IFDIR) != 0 {
 		t = "directory"
-		list, err := ioutil.ReadDir(p)
+		list, err := os.ReadDir(p)
 		if err != nil {
 			return nil, nil, err
 		}
@@ -166,11 +165,11 @@
 				log.Panic("Only overwrite supported by CreateInstanceFile")
 			}
 			var b []byte
-			b, err = ioutil.ReadAll(args.Content)
+			b, err = io.ReadAll(args.Content)
 			if err != nil {
 				return err
 			}
-			if err := ioutil.WriteFile(p, b, mode); err != nil {
+			if err := os.WriteFile(p, b, mode); err != nil {
 				return err
 			}
 		} else {
diff --git a/src/chromiumos/tremplin/lxd_helper.go b/src/chromiumos/tremplin/lxd_helper.go
index 0c51dfc..5b75aef 100644
--- a/src/chromiumos/tremplin/lxd_helper.go
+++ b/src/chromiumos/tremplin/lxd_helper.go
@@ -100,7 +100,7 @@
 // LXD.
 func signalLxdFailure() {
 	conn, err := grpc.Dial(crashHostPort,
-		grpc.WithDialer(vsockHostDialer),
+		grpc.WithContextDialer(vsockHostDialer),
 		grpc.WithInsecure())
 	if err != nil {
 		log.Print("Could not connect to crash listener: ", err)
diff --git a/src/chromiumos/tremplin/main.go b/src/chromiumos/tremplin/main.go
index 8f25d71..584f898 100644
--- a/src/chromiumos/tremplin/main.go
+++ b/src/chromiumos/tremplin/main.go
@@ -27,7 +27,7 @@
 
 // vsockHostDialer dials the vsock host. The addr is in this case is just the
 // port, as the vsock cid is implied to be the host.
-func vsockHostDialer(addr string, timeout time.Duration) (net.Conn, error) {
+func vsockHostDialer(_ context.Context, addr string) (net.Conn, error) {
 	port, err := strconv.ParseInt(addr, 10, 32)
 	if err != nil {
 		return nil, fmt.Errorf("failed to convert addr to int: %q", addr)
@@ -50,7 +50,7 @@
 	}
 
 	conn, err := grpc.Dial(defaultHostPort,
-		grpc.WithDialer(vsockHostDialer),
+		grpc.WithContextDialer(vsockHostDialer),
 		grpc.WithInsecure())
 	if err != nil {
 		log.Print("Could not connect to tremplin listener: ", err)
diff --git a/src/chromiumos/tremplin/passwd_db.go b/src/chromiumos/tremplin/passwd_db.go
index f44041a..23c5fde 100644
--- a/src/chromiumos/tremplin/passwd_db.go
+++ b/src/chromiumos/tremplin/passwd_db.go
@@ -8,7 +8,7 @@
 	"bytes"
 	"encoding"
 	"fmt"
-	"io/ioutil"
+	"io"
 	"log"
 	"path"
 	"time"
@@ -52,7 +52,7 @@
 		}
 		defer r.Close()
 
-		b, err := ioutil.ReadAll(r)
+		b, err := io.ReadAll(r)
 		if err != nil {
 			return fmt.Errorf("failed to read %q: %v", path, err)
 		}
@@ -223,7 +223,7 @@
 
 	switch s.Type {
 	case "file", "symlink":
-		b, err := ioutil.ReadAll(r)
+		b, err := io.ReadAll(r)
 		if err != nil {
 			return fmt.Errorf("failed to read in file %q: %v", src, err)
 		}
diff --git a/src/chromiumos/tremplin/passwd_db_test.go b/src/chromiumos/tremplin/passwd_db_test.go
index 3b83214..d9f21fc 100644
--- a/src/chromiumos/tremplin/passwd_db_test.go
+++ b/src/chromiumos/tremplin/passwd_db_test.go
@@ -8,7 +8,6 @@
 	"bytes"
 	"errors"
 	"io"
-	"io/ioutil"
 	"path"
 	"sort"
 	"strings"
@@ -305,7 +304,7 @@
 	switch e := entry.(type) {
 	case *fakeFile:
 		resp.Type = "file"
-		content = ioutil.NopCloser(bytes.NewReader(e.content))
+		content = io.NopCloser(bytes.NewReader(e.content))
 	case *fakeDirectory:
 		resp.Type = "directory"
 		for _, dirEnt := range e.entries {
@@ -313,7 +312,7 @@
 		}
 	case *fakeSymlink:
 		resp.Type = "symlink"
-		content = ioutil.NopCloser(strings.NewReader(e.path))
+		content = io.NopCloser(strings.NewReader(e.path))
 	}
 
 	return content, resp, nil
@@ -354,7 +353,7 @@
 			entries:  []fsEntry{},
 		}
 	case "file":
-		b, err := ioutil.ReadAll(args.Content)
+		b, err := io.ReadAll(args.Content)
 		if err != nil {
 			return err
 		}
@@ -363,7 +362,7 @@
 			content:  b,
 		}
 	case "symlink":
-		b, err := ioutil.ReadAll(args.Content)
+		b, err := io.ReadAll(args.Content)
 		if err != nil {
 			return err
 		}
diff --git a/src/chromiumos/tremplin/start_lxd.go b/src/chromiumos/tremplin/start_lxd.go
index 7120bc8..a3ee8a8 100644
--- a/src/chromiumos/tremplin/start_lxd.go
+++ b/src/chromiumos/tremplin/start_lxd.go
@@ -9,7 +9,6 @@
 	"bytes"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"log"
 	"os"
 	"os/user"
@@ -456,7 +455,7 @@
 	// then when the container is started.
 	milestone := s.milestone
 
-	if err := ioutil.WriteFile(milestonePath, []byte(strconv.Itoa(milestone)), 0644); err != nil {
+	if err := os.WriteFile(milestonePath, []byte(strconv.Itoa(milestone)), 0644); err != nil {
 		return fmt.Errorf("could not write milestone file: %v", err)
 	}
 
@@ -535,7 +534,7 @@
 		return false
 	}
 
-	data, err := ioutil.ReadFile(fmt.Sprintf("/mnt/stateful/lxd/containers/%s/backup.yaml", defaultContainerName))
+	data, err := os.ReadFile(fmt.Sprintf("/mnt/stateful/lxd/containers/%s/backup.yaml", defaultContainerName))
 	if err != nil {
 		log.Print("error reading backup.yaml, not resetting since can't import without backup.yaml: ", err)
 		return false
diff --git a/src/chromiumos/tremplin/stop_lxd.go b/src/chromiumos/tremplin/stop_lxd.go
index 2e5532e..df96d99 100644
--- a/src/chromiumos/tremplin/stop_lxd.go
+++ b/src/chromiumos/tremplin/stop_lxd.go
@@ -6,7 +6,6 @@
 
 import (
 	"fmt"
-	"io/ioutil"
 	"os"
 	"strconv"
 	"strings"
@@ -20,7 +19,7 @@
 // /usr/sbin/lxd or /opt/google/lxd-next/usr/bin/lxd and
 // {"lxd", "--group", "lxd", "--syslog"}.
 func findLxdProcesses() []int {
-	fileinfos, _ := ioutil.ReadDir("/proc")
+	fileinfos, _ := os.ReadDir("/proc")
 
 	// /proc/pid/cmdline contains the command line as a list of null-terminated strings.
 	cmdline := strings.Join(lxdCmd, "\x00") + "\x00"
@@ -49,7 +48,7 @@
 		if dest != "/usr/sbin/lxd" && dest != "/opt/google/lxd-next/usr/bin/lxd" {
 			continue
 		}
-		procCmdline, err := ioutil.ReadFile("/proc/" + file.Name() + "/cmdline")
+		procCmdline, err := os.ReadFile("/proc/" + file.Name() + "/cmdline")
 		if err != nil {
 			// As above, we just skip over this path if there's an error
 			continue
diff --git a/src/chromiumos/tremplin/tremplin.go b/src/chromiumos/tremplin/tremplin.go
index 0f19b2b..ea4eea9 100644
--- a/src/chromiumos/tremplin/tremplin.go
+++ b/src/chromiumos/tremplin/tremplin.go
@@ -14,7 +14,6 @@
 	"fmt"
 	"golang.org/x/sys/unix"
 	"io"
-	"io/ioutil"
 	"log"
 	"net"
 	"os"
@@ -594,7 +593,7 @@
 			continue
 		}
 
-		err := ioutil.WriteFile(b.source, []byte(b.content), 0644)
+		err := os.WriteFile(b.source, []byte(b.content), 0644)
 		if err != nil {
 			req.Status = pb.ContainerStartProgress_FAILED
 			req.FailureReason = fmt.Sprintf("failed to write %q: %v", b.source, err)
@@ -1897,7 +1896,7 @@
 		h, err := tarr.Next()
 		metadataReadOK := false
 		if err == nil && h.Name == "metadata.yaml" {
-			buf, _ := ioutil.ReadAll(tarr)
+			buf, _ := io.ReadAll(tarr)
 			metadata := api.ImageMetadata{}
 			err = yaml.Unmarshal(buf, &metadata)
 			if err == nil {
@@ -2314,7 +2313,7 @@
 	}
 	defer reader.Close()
 
-	bytes, err := ioutil.ReadAll(reader)
+	bytes, err := io.ReadAll(reader)
 	str := string(bytes)
 	if err != nil {
 		str = fmt.Sprintf("Error reading log: %v. Got:\n%s", err, str)
diff --git a/src/chromiumos/tremplin/upgrade_container_test.go b/src/chromiumos/tremplin/upgrade_container_test.go
index 815e155..e51ebe5 100644
--- a/src/chromiumos/tremplin/upgrade_container_test.go
+++ b/src/chromiumos/tremplin/upgrade_container_test.go
@@ -10,7 +10,6 @@
 	"errors"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"log"
 	"strings"
 	"testing"
@@ -58,7 +57,7 @@
 }
 
 func (s *lxdStub) GetInstanceFile(containerName, path string) (io.ReadCloser, *lxd.InstanceFileResponse, error) {
-	reader := ioutil.NopCloser(strings.NewReader(s.osRelease))
+	reader := io.NopCloser(strings.NewReader(s.osRelease))
 	resp := lxd.InstanceFileResponse{}
 	return reader, &resp, nil
 }
diff --git a/src/chromiumos/tremplin/version.go b/src/chromiumos/tremplin/version.go
index 547c90f..357ab18 100644
--- a/src/chromiumos/tremplin/version.go
+++ b/src/chromiumos/tremplin/version.go
@@ -9,7 +9,6 @@
 	"errors"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"os"
 	"path"
 	"strconv"
@@ -82,7 +81,7 @@
 			return r, resp, nil
 		}
 
-		b, err := ioutil.ReadAll(r)
+		b, err := io.ReadAll(r)
 		if err != nil {
 			return nil, nil, fmt.Errorf("failed to read symlink %q: %v", p, err)
 		}