support --cli and --app in

This commit is contained in:
Michael Gummelt
2015-04-30 11:45:26 -07:00
parent e59db8a39d
commit 7d6881246a
3 changed files with 155 additions and 24 deletions

View File

@@ -3,7 +3,7 @@
Usage:
dcos package --config-schema
dcos package --info
dcos package describe <package_name>
dcos package describe [--app --options=<file> --cli] <package_name>
dcos package info
dcos package install [--cli | [--app --app-id=<app_id]]
[--options=<file>]
@@ -96,7 +96,7 @@ def _cmds():
cmds.Command(
hierarchy=['package', 'describe'],
arg_keys=['<package_name>'],
arg_keys=['<package_name>', '--cli', '--app', '--options'],
function=_describe),
cmds.Command(
@@ -205,7 +205,7 @@ def _update(validate):
return 0
def _describe(package_name):
def _describe(package_name, cli, app, options_path):
"""Describe the specified package.
:param package_name: The package to describe
@@ -243,15 +243,54 @@ def _describe(package_name):
emitter.publish(version_error)
return 1
versions = [version_map[pkg_ver] for pkg_ver in version_map]
versions = [version_map[key] for key in version_map]
del pkg_json['version']
pkg_json['versions'] = versions
if cli or app:
user_options, err = _user_options(options_path)
if err is not None:
emitter.publish(err)
return 1
options, err = pkg.options(pkg_version, user_options)
if err is not None:
emitter.publish(err)
return 1
if cli:
command_json, err = pkg.command_json(pkg_version, options)
if err is not None:
emitter.publish(err)
return 1
pkg_json['command'] = command_json
if app:
marathon_json, err = pkg.marathon_json(pkg_version, options)
if err is not None:
emitter.publish(err)
return 1
pkg_json['app'] = marathon_json
emitter.publish(pkg_json)
return 0
def _user_options(path):
if path is None:
return ({}, None)
else:
with open(path) as options_file:
user_options, err = util.load_json(options_file)
if err is not None:
return (None, err)
return (user_options, None)
def _install(package_name, options_path, app_id, cli, app):
"""Install the specified package.
@@ -297,14 +336,10 @@ def _install(package_name, options_path, app_id, cli, app):
emitter.publish(version_error)
return 1
if options_path is None:
user_options = {}
else:
with open(options_path) as options_file:
user_options, err = util.load_json(options_file)
if err is not None:
emitter.publish(err)
return 1
user_options, err = _user_options(options_path)
if err is not None:
emitter.publish(err)
return 1
try:
options, err = pkg.options(pkg_version, user_options)

View File

@@ -0,0 +1,5 @@
{
"marathon": {
"zk": "zk://localhost:2181/mesos"
}
}

View File

@@ -13,7 +13,7 @@ def test_package():
Usage:
dcos package --config-schema
dcos package --info
dcos package describe <package_name>
dcos package describe [--app --options=<file> --cli] <package_name>
dcos package info
dcos package install [--cli | [--app --app-id=<app_id]]
[--options=<file>]
@@ -108,23 +108,114 @@ def test_describe_nonexistent():
def test_describe():
stdout = b"""\
{
"description": "DNS-based service discovery for Mesos.",
"description": "A cluster-wide init and control system for services in \
cgroups or Docker containers.",
"framework": true,
"images": {
"icon-large": "https://downloads.mesosphere.io/marathon/assets/\
icon-service-marathon-large.png",
"icon-medium": "https://downloads.mesosphere.io/marathon/assets/\
icon-service-marathon-medium.png",
"icon-small": "https://downloads.mesosphere.io/marathon/assets/\
icon-service-marathon-small.png"
},
"maintainer": "support@mesosphere.io",
"name": "mesos-dns",
"postInstallNotes": "Please refer to the tutorial instructions for further \
setup requirements: http://mesosphere.github.io/mesos-dns/docs/\
tutorial-gce.html",
"scm": "https://github.com/mesosphere/mesos-dns.git",
"name": "marathon",
"scm": "https://github.com/mesosphere/marathon.git",
"tags": [
"mesosphere"
"mesosphere",
"framework"
],
"versions": [
"alpha"
],
"website": "http://mesosphere.github.io/mesos-dns"
"0.8.1"
]
}
"""
assert_command(['dcos', 'package', 'describe', 'mesos-dns'],
assert_command(['dcos', 'package', 'describe', 'marathon'],
stdout=stdout)
stdout = b"""\
{
"command": {
"pip": [
"http://downloads.mesosphere.io/dcos-cli/\
dcos-0.1.0-py2.py3-none-any.whl",
"git+https://github.com/mesosphere/\
dcos-helloworld.git#dcos-helloworld=0.1.0"
]
},
"description": "Example DCOS application package",
"maintainer": "support@mesosphere.io",
"name": "helloworld",
"tags": [
"mesosphere",
"example",
"subcommand"
],
"versions": [
"0.1.0"
],
"website": "https://github.com/mesosphere/dcos-helloworld"
}
"""
assert_command(['dcos', 'package', 'describe', '--cli', 'helloworld'],
stdout=stdout)
stdout = b"""\
{
"app": {
"cmd": "LIBPROCESS_PORT=$PORT1 && ./bin/start --master zk://master\
.mesos:2181/mesos --checkpoint --failover_timeout 604800 --framework_\
name marathon-user --ha --zk zk://localhost:2181/mesos/\
marathon-user --http_port $PORT0 ",
"constraints": [
[
"hostname",
"UNIQUE"
]
],
"container": {
"docker": {
"image": "mesosphere/marathon:v0.8.1",
"network": "HOST"
},
"type": "DOCKER"
},
"cpus": 1.0,
"id": "marathon-user",
"instances": 1,
"mem": 512.0,
"ports": [
0,
0
],
"uris": []
},
"description": "A cluster-wide init and control system for services \
in cgroups or Docker containers.",
"framework": true,
"images": {
"icon-large": "https://downloads.mesosphere.io/marathon/assets/\
icon-service-marathon-large.png",
"icon-medium": "https://downloads.mesosphere.io/marathon/assets/\
icon-service-marathon-medium.png",
"icon-small": "https://downloads.mesosphere.io/marathon/assets/\
icon-service-marathon-small.png"
},
"maintainer": "support@mesosphere.io",
"name": "marathon",
"scm": "https://github.com/mesosphere/marathon.git",
"tags": [
"mesosphere",
"framework"
],
"versions": [
"0.8.1"
]
}
"""
assert_command(['dcos', 'package', 'describe', '--app', '--options',
'tests/data/package/marathon.json', 'marathon'],
stdout=stdout)