32
32
Download the package for this client machine from s3.
33
33
Extract the package files. Print the location of the juju client.
35
parser_get_juju_bin.add_argument(
36
'revision_build', type=int,
37
help='The revision-build to get binaries from')
38
parser_get_juju_bin.add_argument(
39
'workspace', nargs='?', default='.',
40
help='The directory to download into')
41
parser_get_juju_bin.add_argument(
42
'--config', default=default_config,
43
help=('s3cmd config file for credentials. Default to juju-qa.s3cfg in'
45
parser_get_juju_bin.add_argument(
46
'--verbose', '-v', default=0, action='count',
47
help='Increase verbosity')
35
parser_get = subparsers.add_parser(
36
'get', help='Download job files(s)',
38
Download a file from a job for this revision build.
40
Within the revision build, the most recent version will be selected.
42
for subparser in [parser_get_juju_bin, parser_get]:
43
subparser.add_argument(
44
'revision_build', type=int,
45
help='The revision-build to use.')
46
parser_get.add_argument('job', help='The job to get files from',)
47
parser_get.add_argument(
48
'file_pattern', help='The file pattern to use for selecting files',)
49
for subparser in [parser_get_juju_bin, parser_get]:
50
subparser.add_argument(
51
'workspace', nargs='?', default='.',
52
help='The directory to download into')
53
subparser.add_argument(
54
'--config', default=default_config,
55
help=('s3cmd config file for credentials. Default to '
56
'juju-qa.s3cfg in juju home.'))
57
subparser.add_argument(
58
'--verbose', '-v', default=0, action='count',
59
help='Increase verbosity')
48
60
return parser.parse_args(args)
57
69
return access_key, secret_key
60
def get_job_path(revision_build):
61
namer = JobNamer.factory()
62
job = namer.get_build_binary_job()
72
def get_job_path(revision_build, job):
63
73
return 'juju-ci/products/version-{}/{}'.format(revision_build, job)
70
80
def find_package_key(bucket, revision_build):
71
prefix = get_job_path(revision_build)
81
namer = JobNamer.factory()
82
job = namer.get_build_binary_job()
83
prefix = get_job_path(revision_build, job)
72
84
keys = bucket.list(prefix)
73
85
suffix = PackageNamer.factory().get_release_package_suffix()
89
101
return acquire_binary(package_path, workspace)
104
def find_file_keys(bucket, revision_build, job, file_regex):
105
prefix = get_job_path(revision_build, job)
106
keys = bucket.list(prefix)
109
match = re.search('^/build-(\d+)', key.name[len(prefix):])
110
build = int(match.group(1))
111
by_build.setdefault(build, []).append(key)
112
# We can't use last successful build, because we don't know what builds
113
# are successful, so use last build and require it to be successful.
114
last_build = max(by_build.keys())
115
build_keys = by_build[last_build]
117
full_prefix = '{}/build-{}/'.format(prefix, last_build)
118
for key in build_keys:
119
path = key.name[len(full_prefix):]
120
if re.match(file_regex, path):
125
def fetch_files(bucket, revision_build, job, file_pattern, workspace):
126
file_keys = find_file_keys(bucket, revision_build, job, file_pattern)
127
out_files = [os.path.join(workspace, k.name.split('/')[-1])
129
for key in file_keys:
130
logging.info('Selected: %s', key.name)
131
download_files(file_keys, workspace)
93
136
args = parse_args()
94
137
log_level = logging.WARNING - args.verbose * (
107
152
print(fetch_juju_binary(bucket, args.revision_build, args.workspace))
156
credentials = get_s3_credentials(args.config)
157
conn = S3Connection(*credentials)
158
bucket = conn.get_bucket('juju-qa-data')
159
for path in fetch_files(bucket, args.revision_build, args.job,
160
args.file_pattern, args.workspace):
110
164
if __name__ == '__main__':