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

Delta Between Two Patch Sets: cmd/plugins/juju-metadata/toolsmetadata.go

Issue 14527043: Fix tools metadata generation for null provider
Left Patch Set: Fix tools metadata generation for null provider Created 11 years, 6 months ago
Right Patch Set: Fix tools metadata generation for null provider Created 11 years, 5 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:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « cmd/jujud/agent_test.go ('k') | cmd/plugins/juju-metadata/toolsmetadata_test.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 // Copyright 2013 Canonical Ltd. 1 // Copyright 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 "fmt" 7 "fmt"
8 8
9 "launchpad.net/gnuflag" 9 "launchpad.net/gnuflag"
10 "launchpad.net/loggo" 10 "launchpad.net/loggo"
11 11
12 "launchpad.net/juju-core/cmd" 12 "launchpad.net/juju-core/cmd"
13 "launchpad.net/juju-core/environs/config" 13 "launchpad.net/juju-core/environs/config"
14 "launchpad.net/juju-core/environs/filestorage" 14 "launchpad.net/juju-core/environs/filestorage"
15 "launchpad.net/juju-core/environs/storage"
15 "launchpad.net/juju-core/environs/sync" 16 "launchpad.net/juju-core/environs/sync"
16 "launchpad.net/juju-core/environs/tools" 17 "launchpad.net/juju-core/environs/tools"
17 "launchpad.net/juju-core/provider/ec2/httpstorage" 18 "launchpad.net/juju-core/provider/ec2/httpstorage"
19 coretools "launchpad.net/juju-core/tools"
18 "launchpad.net/juju-core/utils" 20 "launchpad.net/juju-core/utils"
19 "launchpad.net/juju-core/version" 21 "launchpad.net/juju-core/version"
20 ) 22 )
21 23
22 var DefaultToolsLocation = sync.DefaultToolsLocation 24 var DefaultToolsLocation = sync.DefaultToolsLocation
23 25
24 // ToolsMetadataCommand is used to generate simplestreams metadata for 26 // ToolsMetadataCommand is used to generate simplestreams metadata for
25 // juju tools. 27 // juju tools.
26 type ToolsMetadataCommand struct { 28 type ToolsMetadataCommand struct {
27 cmd.EnvCommandBase 29 cmd.EnvCommandBase
28 fetch bool 30 fetch bool
29 metadataDir string 31 metadataDir string
30 32
31 // noS3 is used in testing to disable the use of S3 public storage 33 // noS3 is used in testing to disable the use of S3 public storage
32 // as a backup. 34 // as a backup.
33 noS3 bool 35 noS3 bool
34 } 36 }
35 37
36 func (c *ToolsMetadataCommand) Info() *cmd.Info { 38 func (c *ToolsMetadataCommand) Info() *cmd.Info {
37 return &cmd.Info{ 39 return &cmd.Info{
38 Name: "generate-tools", 40 Name: "generate-tools",
39 Purpose: "generate simplestreams tools metadata", 41 Purpose: "generate simplestreams tools metadata",
40 } 42 }
41 } 43 }
42 44
43 func (c *ToolsMetadataCommand) SetFlags(f *gnuflag.FlagSet) { 45 func (c *ToolsMetadataCommand) SetFlags(f *gnuflag.FlagSet) {
44 c.EnvCommandBase.SetFlags(f) 46 c.EnvCommandBase.SetFlags(f)
45 f.BoolVar(&c.fetch, "fetch", true, "fetch tools and compute content size and hash")
46 f.StringVar(&c.metadataDir, "d", "", "local directory in which to store metadata") 47 f.StringVar(&c.metadataDir, "d", "", "local directory in which to store metadata")
47 } 48 }
48 49
49 func (c *ToolsMetadataCommand) Run(context *cmd.Context) error { 50 func (c *ToolsMetadataCommand) Run(context *cmd.Context) error {
50 loggo.RegisterWriter("toolsmetadata", cmd.NewCommandLogWriter("juju.envi rons.tools", context.Stdout, context.Stderr), loggo.INFO) 51 loggo.RegisterWriter("toolsmetadata", cmd.NewCommandLogWriter("juju.envi rons.tools", context.Stdout, context.Stderr), loggo.INFO)
51 defer loggo.RemoveWriter("toolsmetadata") 52 defer loggo.RemoveWriter("toolsmetadata")
52 if c.metadataDir == "" { 53 if c.metadataDir == "" {
53 c.metadataDir = config.JujuHome() 54 c.metadataDir = config.JujuHome()
54 } 55 }
55 c.metadataDir = utils.NormalizePath(c.metadataDir) 56 c.metadataDir = utils.NormalizePath(c.metadataDir)
(...skipping 10 matching lines...) Expand all
66 toolsList, err = tools.ReadList(sourceStorage, version.Current.M ajor, minorVersion) 67 toolsList, err = tools.ReadList(sourceStorage, version.Current.M ajor, minorVersion)
67 } 68 }
68 if err != nil { 69 if err != nil {
69 return err 70 return err
70 } 71 }
71 72
72 targetStorage, err := filestorage.NewFileStorageWriter(c.metadataDir, fi lestorage.UseDefaultTmpDir) 73 targetStorage, err := filestorage.NewFileStorageWriter(c.metadataDir, fi lestorage.UseDefaultTmpDir)
73 if err != nil { 74 if err != nil {
74 return err 75 return err
75 } 76 }
76 » return tools.MergeAndWriteMetadata(targetStorage, toolsList, c.fetch) 77 » return mergeAndWriteMetadata(targetStorage, toolsList)
77 } 78 }
79
80 // This is essentially the same as tools.MergeAndWriteMetadata, but also
81 // resolves metadata for existing tools by fetching them and computing
82 // size/sha256 locally.
83 func mergeAndWriteMetadata(stor storage.Storage, toolsList coretools.List) error {
84 existing, err := tools.ReadMetadata(stor)
85 if err != nil {
86 return err
87 }
88 metadata := tools.MetadataFromTools(toolsList)
89 if metadata, err = tools.MergeMetadata(metadata, existing); err != nil {
90 return err
91 }
92 if err = tools.ResolveMetadata(stor, metadata); err != nil {
93 return err
94 }
95 return tools.WriteMetadata(stor, metadata)
96 }
LEFTRIGHT

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