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 }