github.com/richardbowden/terraform@v0.6.12-0.20160901200758-30ea22c25211/builtin/provisioners/chef/linux_provisioner.go (about) 1 package chef 2 3 import ( 4 "fmt" 5 "path" 6 "strings" 7 8 "github.com/hashicorp/terraform/communicator" 9 "github.com/hashicorp/terraform/terraform" 10 ) 11 12 const ( 13 chmod = "find %s -maxdepth 1 -type f -exec /bin/chmod %d {} +" 14 installURL = "https://www.chef.io/chef/install.sh" 15 ) 16 17 func (p *Provisioner) linuxInstallChefClient( 18 o terraform.UIOutput, 19 comm communicator.Communicator) error { 20 21 // Build up the command prefix 22 prefix := "" 23 if p.HTTPProxy != "" { 24 prefix += fmt.Sprintf("http_proxy='%s' ", p.HTTPProxy) 25 } 26 if p.HTTPSProxy != "" { 27 prefix += fmt.Sprintf("https_proxy='%s' ", p.HTTPSProxy) 28 } 29 if p.NOProxy != nil { 30 prefix += fmt.Sprintf("no_proxy='%s' ", strings.Join(p.NOProxy, ",")) 31 } 32 33 // First download the install.sh script from Chef 34 err := p.runCommand(o, comm, fmt.Sprintf("%scurl -LO %s", prefix, installURL)) 35 if err != nil { 36 return err 37 } 38 39 // Then execute the install.sh scrip to download and install Chef Client 40 err = p.runCommand(o, comm, fmt.Sprintf("%sbash ./install.sh -v %q", prefix, p.Version)) 41 if err != nil { 42 return err 43 } 44 45 // And finally cleanup the install.sh script again 46 return p.runCommand(o, comm, fmt.Sprintf("%srm -f install.sh", prefix)) 47 } 48 49 func (p *Provisioner) linuxCreateConfigFiles( 50 o terraform.UIOutput, 51 comm communicator.Communicator) error { 52 // Make sure the config directory exists 53 if err := p.runCommand(o, comm, "mkdir -p "+linuxConfDir); err != nil { 54 return err 55 } 56 57 // Make sure we have enough rights to upload the files if using sudo 58 if p.useSudo { 59 if err := p.runCommand(o, comm, "chmod 777 "+linuxConfDir); err != nil { 60 return err 61 } 62 if err := p.runCommand(o, comm, fmt.Sprintf(chmod, linuxConfDir, 666)); err != nil { 63 return err 64 } 65 } 66 67 if err := p.deployConfigFiles(o, comm, linuxConfDir); err != nil { 68 return err 69 } 70 71 if len(p.OhaiHints) > 0 { 72 // Make sure the hits directory exists 73 hintsDir := path.Join(linuxConfDir, "ohai/hints") 74 if err := p.runCommand(o, comm, "mkdir -p "+hintsDir); err != nil { 75 return err 76 } 77 78 // Make sure we have enough rights to upload the hints if using sudo 79 if p.useSudo { 80 if err := p.runCommand(o, comm, "chmod 777 "+hintsDir); err != nil { 81 return err 82 } 83 if err := p.runCommand(o, comm, fmt.Sprintf(chmod, hintsDir, 666)); err != nil { 84 return err 85 } 86 } 87 88 if err := p.deployOhaiHints(o, comm, hintsDir); err != nil { 89 return err 90 } 91 92 // When done copying the hints restore the rights and make sure root is owner 93 if p.useSudo { 94 if err := p.runCommand(o, comm, "chmod 755 "+hintsDir); err != nil { 95 return err 96 } 97 if err := p.runCommand(o, comm, fmt.Sprintf(chmod, hintsDir, 600)); err != nil { 98 return err 99 } 100 if err := p.runCommand(o, comm, "chown -R root.root "+hintsDir); err != nil { 101 return err 102 } 103 } 104 } 105 106 // When done copying all files restore the rights and make sure root is owner 107 if p.useSudo { 108 if err := p.runCommand(o, comm, "chmod 755 "+linuxConfDir); err != nil { 109 return err 110 } 111 if err := p.runCommand(o, comm, fmt.Sprintf(chmod, linuxConfDir, 600)); err != nil { 112 return err 113 } 114 if err := p.runCommand(o, comm, "chown -R root.root "+linuxConfDir); err != nil { 115 return err 116 } 117 } 118 119 return nil 120 }