1
// Copyright 2015 Canonical Ltd.
2
// Copyright 2015 Cloudbase Solutions SRL
3
// Licensed under the AGPLv3, see LICENCE file for details.
8
"github.com/juju/utils/packaging"
9
"github.com/juju/utils/proxy"
12
// windowsCloudConfig is the cloudconfig type specific to Windows machines.
13
// It mostly deals entirely with passing the equivalent of runcmds to
14
// cloudbase-init, leaving most of the other functionalities uninmplemented.
15
// It implements the CloudConfig interface.
16
type windowsCloudConfig struct {
20
// SetPackageProxy is defined on the PackageProxyConfig interface.
21
func (cfg *windowsCloudConfig) SetPackageProxy(url string) {
24
// UnsetPackageProxy is defined on the PackageProxyConfig interface.
25
func (cfg *windowsCloudConfig) UnsetPackageProxy() {
28
// PackageProxy is defined on the PackageProxyConfig interface.
29
func (cfg *windowsCloudConfig) PackageProxy() string {
33
// SetPackageMirror is defined on the PackageMirrorConfig interface.
34
func (cfg *windowsCloudConfig) SetPackageMirror(url string) {
37
// UnsetPackageMirror is defined on the PackageMirrorConfig interface.
38
func (cfg *windowsCloudConfig) UnsetPackageMirror() {
41
// PackageMirror is defined on the PackageMirrorConfig interface.
42
func (cfg *windowsCloudConfig) PackageMirror() string {
46
// AddPackageSource is defined on the PackageSourcesConfig interface.
47
func (cfg *windowsCloudConfig) AddPackageSource(src packaging.PackageSource) {
50
// PackageSources is defined on the PackageSourcesConfig interface.
51
func (cfg *windowsCloudConfig) PackageSources() []packaging.PackageSource {
55
// AddPackagePreferences is defined on the PackageSourcesConfig interface.
56
func (cfg *windowsCloudConfig) AddPackagePreferences(prefs packaging.PackagePreferences) {
59
// PackagePreferences is defined on the PackageSourcesConfig interface.
60
func (cfg *windowsCloudConfig) PackagePreferences() []packaging.PackagePreferences {
64
// RenderYAML is defined on the RenderConfig interface.
65
func (cfg *windowsCloudConfig) RenderYAML() ([]byte, error) {
66
return cfg.renderWindows()
69
// RenderScript is defined on the RenderConfig interface.
70
func (cfg *windowsCloudConfig) RenderScript() (string, error) {
71
// NOTE: This shouldn't really be called on windows as it's used only for
72
// initialization via ssh.
73
script, err := cfg.renderWindows()
78
return string(script), err
81
// getCommandsForAddingPackages is defined on the RenderConfig interface.
82
func (cfg *windowsCloudConfig) getCommandsForAddingPackages() ([]string, error) {
86
// renderWindows is a helper function which renders the runCmds of the Windows
87
// CloudConfig to a PowerShell script.
88
func (cfg *windowsCloudConfig) renderWindows() ([]byte, error) {
89
winCmds := cfg.RunCmds()
92
header := "#ps1_sysnative\r\n"
93
script = append(script, header...)
94
for _, cmd := range winCmds {
95
script = append(script, newline...)
96
script = append(script, cmd...)
101
// AddPackageCommands is defined on the AdvancedPackagingConfig interface.
102
func (cfg *windowsCloudConfig) AddPackageCommands(
103
aptProxySettings proxy.Settings,
105
addUpdateScripts bool,
106
addUpgradeScripts bool,
111
// AddCloudArchiveCloudTools is defined on the AdvancedPackagingConfig
113
func (cfg *windowsCloudConfig) AddCloudArchiveCloudTools() {
116
// addRequiredPackages is defined on the AdvancedPackagingConfig interface.
117
func (cfg *windowsCloudConfig) addRequiredPackages() {
120
// updateProxySettings is defined on the AdvancedPackagingConfig interface.
121
func (cfg *windowsCloudConfig) updateProxySettings(proxy.Settings) {