github.phpd.cn/hashicorp/packer@v1.3.2/builder/azure/arm/inspector.go (about)

     1  package arm
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"log"
     7  	"net/http"
     8  
     9  	"io"
    10  
    11  	"github.com/Azure/go-autorest/autorest"
    12  	"github.com/Azure/go-autorest/autorest/azure"
    13  	"github.com/hashicorp/packer/builder/azure/common/logutil"
    14  )
    15  
    16  func chop(data []byte, maxlen int64) string {
    17  	s := string(data)
    18  	if int64(len(s)) > maxlen {
    19  		s = s[:maxlen] + "..."
    20  	}
    21  	return s
    22  }
    23  
    24  func handleBody(body io.ReadCloser, maxlen int64) (io.ReadCloser, string) {
    25  	if body == nil {
    26  		return nil, ""
    27  	}
    28  
    29  	defer body.Close()
    30  
    31  	b, err := ioutil.ReadAll(body)
    32  	if err != nil {
    33  		return nil, ""
    34  	}
    35  
    36  	return ioutil.NopCloser(bytes.NewReader(b)), chop(b, maxlen)
    37  }
    38  
    39  func withInspection(maxlen int64) autorest.PrepareDecorator {
    40  	return func(p autorest.Preparer) autorest.Preparer {
    41  		return autorest.PreparerFunc(func(r *http.Request) (*http.Request, error) {
    42  			body, bodyString := handleBody(r.Body, maxlen)
    43  			r.Body = body
    44  
    45  			log.Print("Azure request", logutil.Fields{
    46  				"method":  r.Method,
    47  				"request": r.URL.String(),
    48  				"body":    bodyString,
    49  			})
    50  			return p.Prepare(r)
    51  		})
    52  	}
    53  }
    54  
    55  func byInspecting(maxlen int64) autorest.RespondDecorator {
    56  	return func(r autorest.Responder) autorest.Responder {
    57  		return autorest.ResponderFunc(func(resp *http.Response) error {
    58  			body, bodyString := handleBody(resp.Body, maxlen)
    59  			resp.Body = body
    60  
    61  			log.Print("Azure response", logutil.Fields{
    62  				"status":          resp.Status,
    63  				"method":          resp.Request.Method,
    64  				"request":         resp.Request.URL.String(),
    65  				"x-ms-request-id": azure.ExtractRequestID(resp),
    66  				"body":            bodyString,
    67  			})
    68  			return r.Respond(resp)
    69  		})
    70  	}
    71  }