Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(952)

Side by Side Diff: cmd/juju/upgradejuju.go

Issue 21940044: cmd/juju: upgrade-juju uses the API (Closed)
Patch Set: Created 10 years, 4 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « [revision details] ('k') | state/api/client.go » ('j') | state/apiserver/client/client.go » ('J')

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b