...

Source file src/k8s.io/utils/temp/dir.go

Documentation: k8s.io/utils/temp

     1  /*
     2  Copyright 2017 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package temp
    18  
    19  import (
    20  	"fmt"
    21  	"io"
    22  	"io/ioutil"
    23  	"os"
    24  	"path/filepath"
    25  )
    26  
    27  // Directory is an interface to a temporary directory, in which you can
    28  // create new files.
    29  type Directory interface {
    30  	// NewFile creates a new file in that directory. Calling NewFile
    31  	// with the same filename twice will result in an error.
    32  	NewFile(name string) (io.WriteCloser, error)
    33  	// Delete removes the directory and its content.
    34  	Delete() error
    35  }
    36  
    37  // Dir is wrapping an temporary directory on disk.
    38  type Dir struct {
    39  	// Name is the name (full path) of the created directory.
    40  	Name string
    41  }
    42  
    43  var _ Directory = &Dir{}
    44  
    45  // CreateTempDir returns a new Directory wrapping a temporary directory
    46  // on disk.
    47  func CreateTempDir(prefix string) (*Dir, error) {
    48  	name, err := ioutil.TempDir("", fmt.Sprintf("%s-", prefix))
    49  	if err != nil {
    50  		return nil, err
    51  	}
    52  
    53  	return &Dir{
    54  		Name: name,
    55  	}, nil
    56  }
    57  
    58  // NewFile creates a new file in the specified directory.
    59  func (d *Dir) NewFile(name string) (io.WriteCloser, error) {
    60  	return os.OpenFile(
    61  		filepath.Join(d.Name, name),
    62  		os.O_WRONLY|os.O_CREATE|os.O_TRUNC|os.O_EXCL,
    63  		0700,
    64  	)
    65  }
    66  
    67  // Delete the underlying directory, and all of its content.
    68  func (d *Dir) Delete() error {
    69  	return os.RemoveAll(d.Name)
    70  }
    71  

View as plain text