github.com/rstandt/terraform@v0.12.32-0.20230710220336-b1063613405c/builtin/provisioners/puppet/windows_provisioner.go (about)

     1  package puppet
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"strings"
     7  
     8  	"github.com/hashicorp/terraform/communicator/remote"
     9  )
    10  
    11  const (
    12  	getHostByName = "([System.Net.Dns]::GetHostByName(($env:computerName))).Hostname"
    13  	domainQuery   = "(Get-WmiObject -Query 'select DNSDomain from Win32_NetworkAdapterConfiguration where IPEnabled = True').DNSDomain"
    14  )
    15  
    16  func (p *provisioner) windowsUploadFile(f io.Reader, dir string, filename string) error {
    17  	_, err := p.runCommand("powershell.exe new-item -itemtype directory -force -path " + dir)
    18  	if err != nil {
    19  		return fmt.Errorf("Failed to make directory %s: %s", dir, err)
    20  	}
    21  
    22  	return p.comm.Upload(dir+"\\"+filename, f)
    23  }
    24  
    25  func (p *provisioner) windowsDefaultCertname() (string, error) {
    26  	certname, err := p.runCommand(fmt.Sprintf(`powershell -Command "& {%s}"`, getHostByName))
    27  	if err != nil {
    28  		return "", err
    29  	}
    30  
    31  	// Sometimes System.Net.Dns::GetHostByName does not return a full FQDN, so
    32  	// we have to look up the domain separately.
    33  	if strings.Contains(certname, ".") {
    34  		return certname, nil
    35  	}
    36  
    37  	domain, err := p.runCommand(fmt.Sprintf(`powershell -Command "& {%s}"`, domainQuery))
    38  	if err != nil {
    39  		return "", err
    40  	}
    41  
    42  	return strings.ToLower(certname + "." + domain), nil
    43  }
    44  
    45  func (p *provisioner) windowsInstallPuppetAgent() error {
    46  	_, err := p.runCommand(fmt.Sprintf(
    47  		`powershell -Command "& {[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}; `+
    48  			`(New-Object System.Net.WebClient).DownloadFile('https://%s:8140/packages/current/install.ps1', `+
    49  			`'install.ps1')}"`,
    50  		p.Server,
    51  	))
    52  	if err != nil {
    53  		return err
    54  	}
    55  
    56  	_, err = p.runCommand(`powershell -Command "& .\install.ps1 -PuppetServiceEnsure stopped"`)
    57  
    58  	return err
    59  }
    60  
    61  func (p *provisioner) windowsRunPuppetAgent() error {
    62  	_, err := p.runCommand(fmt.Sprintf("puppet agent --test --server %s --environment %s", p.Server, p.Environment))
    63  	if err != nil {
    64  		errStruct, _ := err.(*remote.ExitError)
    65  		if errStruct.ExitStatus == 2 {
    66  			return nil
    67  		}
    68  	}
    69  
    70  	return err
    71  }