Left: | ||
Right: |
OLD | NEW |
---|---|
1 // Copyright 2012, 2013 Canonical Ltd. | 1 // Copyright 2012, 2013 Canonical Ltd. |
2 // Licensed under the AGPLv3, see LICENCE file for details. | 2 // Licensed under the AGPLv3, see LICENCE file for details. |
3 | 3 |
4 package main | 4 package main |
5 | 5 |
6 import ( | 6 import ( |
7 stderrors "errors" | 7 stderrors "errors" |
8 "fmt" | 8 "fmt" |
9 | 9 |
10 "launchpad.net/gnuflag" | 10 "launchpad.net/gnuflag" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
102 if len(c.Series) > 0 && !c.UploadTools { | 102 if len(c.Series) > 0 && !c.UploadTools { |
103 return fmt.Errorf("--series requires --upload-tools") | 103 return fmt.Errorf("--series requires --upload-tools") |
104 } | 104 } |
105 return cmd.CheckEmpty(args) | 105 return cmd.CheckEmpty(args) |
106 } | 106 } |
107 | 107 |
108 var errUpToDate = stderrors.New("no upgrades available") | 108 var errUpToDate = stderrors.New("no upgrades available") |
109 | 109 |
110 // Run changes the version proposed for the juju envtools. | 110 // Run changes the version proposed for the juju envtools. |
111 func (c *UpgradeJujuCommand) Run(_ *cmd.Context) (err error) { | 111 func (c *UpgradeJujuCommand) Run(_ *cmd.Context) (err error) { |
112 » conn, err := juju.NewConnFromName(c.EnvName) | 112 » client, err := juju.NewAPIClientFromName(c.EnvName) |
113 if err != nil { | 113 if err != nil { |
114 return err | 114 return err |
115 } | 115 } |
116 » defer conn.Close() | 116 » defer client.Close() |
117 defer func() { | 117 defer func() { |
118 if err == errUpToDate { | 118 if err == errUpToDate { |
119 log.Noticef(err.Error()) | 119 log.Noticef(err.Error()) |
120 err = nil | 120 err = nil |
121 } | 121 } |
122 }() | 122 }() |
123 | 123 |
124 // Determine the version to upgrade to, uploading tools if necessary. | 124 // Determine the version to upgrade to, uploading tools if necessary. |
125 » env := conn.Environ | 125 » attrs, err := client.EnvironmentGet() |
126 » cfg, err := conn.State.EnvironConfig() | |
127 if err != nil { | 126 if err != nil { |
128 return err | 127 return err |
129 } | 128 } |
129 cfg, err := config.New(config.NoDefaults, attrs) | |
130 if err != nil { | |
131 return err | |
132 } | |
133 env, err := environs.New(cfg) | |
134 if err != nil { | |
135 return err | |
136 } | |
130 v, err := c.initVersions(cfg, env) | 137 v, err := c.initVersions(cfg, env) |
131 if err != nil { | 138 if err != nil { |
132 return err | 139 return err |
133 } | 140 } |
134 if c.UploadTools { | 141 if c.UploadTools { |
135 series := getUploadSeries(cfg, c.Series) | 142 series := getUploadSeries(cfg, c.Series) |
136 if err := v.uploadTools(env.Storage(), series); err != nil { | 143 if err := v.uploadTools(env.Storage(), series); err != nil { |
137 return err | 144 return err |
138 } | 145 } |
139 } | 146 } |
140 if err := v.validate(); err != nil { | 147 if err := v.validate(); err != nil { |
141 return err | 148 return err |
142 } | 149 } |
143 log.Infof("upgrade version chosen: %s", v.chosen) | 150 log.Infof("upgrade version chosen: %s", v.chosen) |
144 // TODO(fwereade): this list may be incomplete, pending envtools.Upload change. | 151 // TODO(fwereade): this list may be incomplete, pending envtools.Upload change. |
145 log.Infof("available tools: %s", v.tools) | 152 log.Infof("available tools: %s", v.tools) |
146 | 153 |
147 » if err := conn.State.SetEnvironAgentVersion(v.chosen); err != nil { | 154 » if err := client.SetEnvironAgentVersion(v.chosen); err != nil { |
148 return err | 155 return err |
149 } | 156 } |
150 log.Noticef("started upgrade to %s", v.chosen) | 157 log.Noticef("started upgrade to %s", v.chosen) |
151 return nil | 158 return nil |
152 } | 159 } |
153 | 160 |
154 // initVersions collects state relevant to an upgrade decision. The returned | 161 // initVersions collects state relevant to an upgrade decision. The returned |
155 // agent and client versions, and the list of currently available tools, will | 162 // agent and client versions, and the list of currently available tools, will |
156 // always be accurate; the chosen version, and the flag indicating development | 163 // always be accurate; the chosen version, and the flag indicating development |
157 // mode, may remain blank until uploadTools or validate is called. | 164 // mode, may remain blank until uploadTools or validate is called. |
158 func (c *UpgradeJujuCommand) initVersions(cfg *config.Config, env environs.Envir on) (*upgradeVersions, error) { | 165 func (c *UpgradeJujuCommand) initVersions(cfg *config.Config, env environs.Envir on) (*upgradeVersions, error) { |
159 agent, ok := cfg.AgentVersion() | 166 agent, ok := cfg.AgentVersion() |
160 if !ok { | 167 if !ok { |
161 // Can't happen. In theory. | 168 // Can't happen. In theory. |
162 return nil, fmt.Errorf("incomplete environment configuration") | 169 return nil, fmt.Errorf("incomplete environment configuration") |
163 } | 170 } |
164 if c.Version == agent { | 171 if c.Version == agent { |
165 return nil, errUpToDate | 172 return nil, errUpToDate |
166 } | 173 } |
167 client := version.Current.Number | 174 client := version.Current.Number |
168 available, err := envtools.FindTools(env, client.Major, -1, coretools.Fi lter{}, envtools.DoNotAllowRetry) | 175 available, err := envtools.FindTools(env, client.Major, -1, coretools.Fi lter{}, envtools.DoNotAllowRetry) |
rog
2013/11/19 12:37:58
// TODO use an API call rather than requiring the
dimitern
2013/11/19 16:15:27
Done.
| |
169 if err != nil { | 176 if err != nil { |
170 if !errors.IsNotFoundError(err) { | 177 if !errors.IsNotFoundError(err) { |
171 return nil, err | 178 return nil, err |
172 } | 179 } |
173 if !c.UploadTools { | 180 if !c.UploadTools { |
174 // No tools found and we shouldn't upload any, so preten d | 181 // No tools found and we shouldn't upload any, so preten d |
175 // there is no more recent version available. | 182 // there is no more recent version available. |
176 if c.Version == version.Zero { | 183 if c.Version == version.Zero { |
177 return nil, errUpToDate | 184 return nil, errUpToDate |
178 } | 185 } |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
296 for _, t := range existing { | 303 for _, t := range existing { |
297 if t.Version.Major != vers.Major || t.Version.Minor != vers.Mino r || t.Version.Patch != vers.Patch { | 304 if t.Version.Major != vers.Major || t.Version.Minor != vers.Mino r || t.Version.Patch != vers.Patch { |
298 continue | 305 continue |
299 } | 306 } |
300 if t.Version.Build >= vers.Build { | 307 if t.Version.Build >= vers.Build { |
301 vers.Build = t.Version.Build + 1 | 308 vers.Build = t.Version.Build + 1 |
302 } | 309 } |
303 } | 310 } |
304 return vers | 311 return vers |
305 } | 312 } |
OLD | NEW |