github.com/nginxinc/kubernetes-ingress@v1.12.5/internal/nginx/utils.go (about)

     1  package nginx
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"os"
     8  	"os/exec"
     9  	"path"
    10  
    11  	"github.com/golang/glog"
    12  )
    13  
    14  func shellOut(cmd string) (err error) {
    15  	var stdout bytes.Buffer
    16  	var stderr bytes.Buffer
    17  
    18  	glog.V(3).Infof("executing %s", cmd)
    19  
    20  	command := exec.Command("sh", "-c", cmd)
    21  	command.Stdout = &stdout
    22  	command.Stderr = &stderr
    23  
    24  	err = command.Start()
    25  	if err != nil {
    26  		return fmt.Errorf("Failed to execute %v, err: %w", cmd, err)
    27  	}
    28  
    29  	err = command.Wait()
    30  	if err != nil {
    31  		return fmt.Errorf("Command %v stdout: %q\nstderr: %q\nfinished with error: %w", cmd,
    32  			stdout.String(), stderr.String(), err)
    33  	}
    34  	return nil
    35  }
    36  
    37  func createFileAndWrite(name string, b []byte) error {
    38  	w, err := os.Create(name)
    39  	if err != nil {
    40  		return fmt.Errorf("Failed to open %v: %w", name, err)
    41  	}
    42  
    43  	defer w.Close()
    44  
    45  	_, err = w.Write(b)
    46  	if err != nil {
    47  		return fmt.Errorf("Failed to write to %v: %w", name, err)
    48  	}
    49  
    50  	return nil
    51  }
    52  
    53  func createFileAndWriteAtomically(filename string, tempPath string, mode os.FileMode, content []byte) {
    54  	file, err := ioutil.TempFile(tempPath, path.Base(filename))
    55  	if err != nil {
    56  		glog.Fatalf("Couldn't create a temp file for the file %v: %v", filename, err)
    57  	}
    58  
    59  	err = file.Chmod(mode)
    60  	if err != nil {
    61  		glog.Fatalf("Couldn't change the mode of the temp file %v: %v", file.Name(), err)
    62  	}
    63  
    64  	_, err = file.Write(content)
    65  	if err != nil {
    66  		glog.Fatalf("Couldn't write to the temp file %v: %v", file.Name(), err)
    67  	}
    68  
    69  	err = file.Close()
    70  	if err != nil {
    71  		glog.Fatalf("Couldn't close the temp file %v: %v", file.Name(), err)
    72  	}
    73  
    74  	err = os.Rename(file.Name(), filename)
    75  	if err != nil {
    76  		glog.Fatalf("Couldn't rename the temp file %v to %v: %v", file.Name(), filename, err)
    77  	}
    78  }