func (w *windowsConfigure) ConfigureBasic() error { series := w.icfg.Series tmpDir, err := paths.TempDir(series) if err != nil { return err } renderer := w.conf.ShellRenderer() dataDir := renderer.FromSlash(w.icfg.DataDir) baseDir := renderer.FromSlash(filepath.Dir(tmpDir)) binDir := renderer.Join(baseDir, "bin") w.conf.AddScripts( fmt.Sprintf(`%s`, winPowershellHelperFunctions), // Some providers create a baseDir before this step, but we need to // make sure it exists before applying icacls fmt.Sprintf(`mkdir -Force "%s"`, renderer.FromSlash(baseDir)), fmt.Sprintf(`mkdir %s`, renderer.FromSlash(tmpDir)), fmt.Sprintf(`mkdir "%s"`, binDir), fmt.Sprintf(`mkdir "%s\locks"`, renderer.FromSlash(dataDir)), ) // This is necessary for setACLs to work w.conf.AddScripts(`$adminsGroup = (New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")).Translate([System.Security.Principal.NTAccount])`) w.conf.AddScripts(setACLs(renderer.FromSlash(baseDir), fileSystem)...) w.conf.AddScripts(`setx /m PATH "$env:PATH;C:\Juju\bin\"`) noncefile := renderer.Join(dataDir, NonceFile) w.conf.AddScripts( fmt.Sprintf(`Set-Content "%s" "%s"`, noncefile, shquote(w.icfg.MachineNonce)), ) return nil }
func (w *windowsConfigure) ConfigureBasic() error { series := w.icfg.Series tmpDir, err := paths.TempDir(series) if err != nil { return err } renderer := w.conf.ShellRenderer() dataDir := renderer.FromSlash(w.icfg.DataDir) baseDir := renderer.FromSlash(filepath.Dir(tmpDir)) binDir := renderer.Join(baseDir, "bin") w.conf.AddScripts( fmt.Sprintf(`%s`, winPowershellHelperFunctions), fmt.Sprintf(`icacls "%s" /grant "jujud:(OI)(CI)(F)" /T`, renderer.FromSlash(baseDir)), fmt.Sprintf(`mkdir %s`, renderer.FromSlash(tmpDir)), fmt.Sprintf(`mkdir "%s"`, binDir), fmt.Sprintf(`%s`, winSetPasswdScript), fmt.Sprintf(`Start-ProcessAsUser -Command $powershell -Arguments "-File C:\juju\bin\save_pass.ps1 $juju_passwd" -Credential $jujuCreds`), fmt.Sprintf(`mkdir "%s\locks"`, renderer.FromSlash(dataDir)), fmt.Sprintf(`Start-ProcessAsUser -Command $cmdExe -Arguments '/C setx PATH "%%PATH%%;C:\Juju\bin"' -Credential $jujuCreds`), ) noncefile := renderer.Join(dataDir, NonceFile) w.conf.AddScripts( fmt.Sprintf(`Set-Content "%s" "%s"`, noncefile, shquote(w.icfg.MachineNonce)), ) return nil }
func (w *windowsConfigure) ConfigureBasic() error { tmpDir, err := paths.TempDir(w.icfg.Series) if err != nil { return err } renderer := w.conf.ShellRenderer() dataDir := renderer.FromSlash(w.icfg.DataDir) baseDir := renderer.FromSlash(filepath.Dir(tmpDir)) binDir := renderer.Join(baseDir, "bin") w.conf.AddScripts(windowsPowershellHelpers) // The jujud user only gets created on non-nano versions for now. if !series.IsWindowsNano(w.icfg.Series) { w.conf.AddScripts(addJujuUser) } w.conf.AddScripts( // Some providers create a baseDir before this step, but we need to // make sure it exists before applying icacls fmt.Sprintf(`mkdir -Force "%s"`, renderer.FromSlash(baseDir)), fmt.Sprintf(`mkdir %s`, renderer.FromSlash(tmpDir)), fmt.Sprintf(`mkdir "%s"`, binDir), fmt.Sprintf(`mkdir "%s\locks"`, renderer.FromSlash(dataDir)), `setx /m PATH "$env:PATH;C:\Juju\bin\"`, // This is necessary for setACLs to work `$adminsGroup = (New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-544")).Translate([System.Security.Principal.NTAccount])`, fmt.Sprintf(`icacls "%s" /inheritance:r /grant "${adminsGroup}:(OI)(CI)(F)" /t`, renderer.FromSlash(baseDir)), ) // TODO(bogdanteleaga): This, together with the call above, should be using setACLs, once it starts working across all windows versions properly. // Until then, if we change permissions, both this and setACLs should be changed to do the same thing. if !series.IsWindowsNano(w.icfg.Series) { w.conf.AddScripts(fmt.Sprintf(`icacls "%s" /inheritance:r /grant "jujud:(OI)(CI)(F)" /t`, renderer.FromSlash(baseDir))) } noncefile := renderer.Join(dataDir, NonceFile) w.conf.AddScripts( fmt.Sprintf(`Set-Content "%s" "%s"`, noncefile, shquote(w.icfg.MachineNonce)), ) return nil }