tests: update to use latest universe (#952)
We also needed to update the CI environments to support UTF-8 encoding because the output printed by the CLI could be encoded using UTF-8.
This commit is contained in:
committed by
tamarrow
parent
fcd4cec620
commit
004d1c2213
@@ -27,6 +27,9 @@ The example below installs every package available in the DC/OS repository::
|
||||
|
||||
dcos package search --json | jq '.[0].packages[].name' | xargs -L 1 dcos package install --yes
|
||||
|
||||
Note: The CLI output supports support UTF-8 encoding for stdout and stderr.
|
||||
Please follow your platform's instructions on how to do that.
|
||||
|
||||
Development Dependencies
|
||||
------------------------
|
||||
|
||||
|
||||
@@ -11,11 +11,17 @@ RUN apt-get update && apt-get install -y \
|
||||
openssh-client \
|
||||
git \
|
||||
sudo \
|
||||
language-pack-en \
|
||||
&& sudo apt-get update --fix-missing \
|
||||
&& sudo apt-get install -y build-essential libssl-dev libffi-dev python-dev python3-pip python3-venv \
|
||||
&& pip3 install pip --upgrade \
|
||||
&& python3 -m pip install pyinstaller==3.1.1
|
||||
|
||||
ENV LC_CTYPE en_US.UTF-8
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US
|
||||
ENV LC_ALL ""
|
||||
|
||||
ADD . /dcos-cli
|
||||
WORKDIR /dcos-cli
|
||||
RUN make clean env packages
|
||||
|
||||
39
cli/tests/data/helloworld-v3-stub.json
Normal file
39
cli/tests/data/helloworld-v3-stub.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"constraints": [
|
||||
[
|
||||
"hostname",
|
||||
"UNIQUE"
|
||||
]
|
||||
],
|
||||
"healthChecks": [
|
||||
{
|
||||
"timeoutSeconds": 5,
|
||||
"protocol": "HTTP",
|
||||
"portIndex": 0,
|
||||
"path": "/repo-empty-v3.json",
|
||||
"maxConsecutiveFailures": 3,
|
||||
"intervalSeconds": 30,
|
||||
"gracePeriodSeconds": 120
|
||||
}
|
||||
],
|
||||
"container": {
|
||||
"volumes": [],
|
||||
"docker": {
|
||||
"portMappings": [
|
||||
{
|
||||
"protocol": "tcp",
|
||||
"hostPort": 8086,
|
||||
"containerPort": 80
|
||||
}
|
||||
],
|
||||
"image": "mesosphere/universe-server:20170331T221320Z-cli-test-v3-helloworld-c3e49742c9",
|
||||
"network": "BRIDGE"
|
||||
},
|
||||
"type": "DOCKER"
|
||||
},
|
||||
"requirePorts": true,
|
||||
"mem": 128,
|
||||
"cpus": 0.1,
|
||||
"instances": 1,
|
||||
"id": "/helloworld-universe"
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
"chronos": {
|
||||
"id": "chronos-user-1",
|
||||
"framework-name": "chronos-user",
|
||||
"zk-path": "/universe/chronos-user-1"
|
||||
"zk-path": "/universe/chronos-user-1",
|
||||
"cpus": 1.0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"chronos": {
|
||||
"id": "chronos-user-2",
|
||||
"framework-name": "chronos-user",
|
||||
"zk-path": "/universe/chronos-user-2"
|
||||
"zk-path": "/universe/chronos-user-2",
|
||||
"cpus": 1.0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,38 +1,241 @@
|
||||
{
|
||||
"pip": [
|
||||
"https://s3-eu-west-1.amazonaws.com/downloads.mesosphere.com/kafka/dcos-kafka-0.2.1.tar.gz"
|
||||
]
|
||||
"binaries": {
|
||||
"darwin": {
|
||||
"x86-64": {
|
||||
"contentHash": [
|
||||
{
|
||||
"algo": "sha256",
|
||||
"value": "660f143852b6d3d2b0b2f787fab9e5e2927f4440502a89c9e1c08488cdacc34f"
|
||||
}
|
||||
],
|
||||
"kind": "executable",
|
||||
"url": "https://downloads.mesosphere.com/kafka/assets/1.1.19-0.10.1.0/dcos-kafka-darwin"
|
||||
}
|
||||
},
|
||||
"linux": {
|
||||
"x86-64": {
|
||||
"contentHash": [
|
||||
{
|
||||
"algo": "sha256",
|
||||
"value": "0b26409c9760fd4d75fca1114d01f25ec069147d578d6f337c88424ebc64c808"
|
||||
}
|
||||
],
|
||||
"kind": "executable",
|
||||
"url": "https://downloads.mesosphere.com/kafka/assets/1.1.19-0.10.1.0/dcos-kafka-linux"
|
||||
}
|
||||
},
|
||||
"windows": {
|
||||
"x86-64": {
|
||||
"contentHash": [
|
||||
{
|
||||
"algo": "sha256",
|
||||
"value": "60d6f802412b94833cf8db217af162e7dc35c0f5e0a1eb4b587268c361500c3b"
|
||||
}
|
||||
],
|
||||
"kind": "executable",
|
||||
"url": "https://downloads.mesosphere.com/kafka/assets/1.1.19-0.10.1.0/dcos-kafka.exe"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
"id": "{{kafka.framework-name}}",
|
||||
"cpus": {{kafka.app.cpus}},
|
||||
"mem": {{kafka.app.mem}},
|
||||
"instances": {{kafka.app.instances}},
|
||||
"cmd": "jre/bin/java -Xmx{{kafka.app.heap-mb}}m -jar kafka-mesos*.jar scheduler --master={{mesos.master}} --zk={{kafka.zk}} --api={{kafka.api}} --storage=\"{{kafka.storage}}\" --jre={{kafka.jre}} {{#kafka.user}}--user=\"{{kafka.user}}\"{{/kafka.user}} --framework-name=\"{{kafka.framework-name}}\" --framework-role=\"{{kafka.framework-role}}\" {{#kafka.principal}}--principal=\"{{kafka.principal}}\"{{/kafka.principal}} {{#kafka.secret}}--secret=\"{{kafka.secret}}\"{{/kafka.secret}} --log=scheduler.log {{kafka.other-options}}",
|
||||
"id": "{{service.name}}",
|
||||
"cpus": 1.0,
|
||||
"mem": 1230,
|
||||
"instances": 1,
|
||||
"cmd": "export LD_LIBRARY_PATH=$MESOS_SANDBOX/libmesos-bundle/lib:$LD_LIBRARY_PATH && export MESOS_NATIVE_JAVA_LIBRARY=$(ls $MESOS_SANDBOX/libmesos-bundle/lib/libmesos-*.so) && export PATH=$(ls -d $MESOS_SANDBOX/jre*/bin):$PATH && ./scheduler/bin/kafka-scheduler server ./scheduler/conf/scheduler.yml",
|
||||
"labels": {
|
||||
"DCOS_PACKAGE_FRAMEWORK_NAME": "{{service.name}}",
|
||||
"DCOS_MIGRATION_API_VERSION": "v1",
|
||||
"DCOS_MIGRATION_API_PATH": "/v1/plan",
|
||||
"MARATHON_SINGLE_INSTANCE_APP":"true",
|
||||
"DCOS_SERVICE_NAME": "{{service.name}}",
|
||||
"DCOS_SERVICE_PORT_INDEX": "1",
|
||||
"DCOS_SERVICE_SCHEME": "http"
|
||||
},
|
||||
"env": {
|
||||
"LD_LIBRARY_PATH": "/opt/mesosphere/lib",
|
||||
"JAVA_HOME":"./jre1.8.0_121",
|
||||
"FRAMEWORK_NAME": "{{service.name}}",
|
||||
"FRAMEWORK_PRINCIPAL": "{{service.principal}}",
|
||||
"USER": "{{service.user}}",
|
||||
"PLACEMENT_CONSTRAINT": "{{service.placement_constraint}}",
|
||||
"PLACEMENT_STRATEGY": "{{service.placement_strategy}}",
|
||||
"PHASE_STRATEGY": "{{service.phase_strategy}}",
|
||||
"ENABLE_REPLACEMENT": "{{service.enable_replacement}}",
|
||||
"RECOVERY_GRACE_PERIOD_SEC": "{{service.recover_in_place_grace_period_secs}}",
|
||||
"REPLACE_DELAY_SEC": "{{service.min_delay_between_recovers_secs}}",
|
||||
"ENABLE_BROKER_HEALTH_CHECK": "{{service.enable_health_check}}",
|
||||
"BROKER_HEALTH_CHECK_DELAY_SEC": "{{service.health_check_delay_sec}}",
|
||||
"BROKER_HEALTH_CHECK_INTERVAL_SEC": "{{service.health_check_interval_sec}}",
|
||||
"BROKER_HEALTH_CHECK_TIMEOUT_SEC": "{{service.health_check_timeout_sec}}",
|
||||
"BROKER_HEALTH_CHECK_MAX_FAILURES": "{{service.health_check_max_consecutive_failures}}",
|
||||
"BROKER_HEALTH_CHECK_GRACE_SEC": "{{service.health_check_grace_period_sec}}",
|
||||
"BROKER_COUNT": "{{brokers.count}}",
|
||||
"BROKER_CPUS": "{{brokers.cpus}}",
|
||||
"BROKER_MEM": "{{brokers.mem}}",
|
||||
"BROKER_HEAP_MB": "{{brokers.heap.size}}",
|
||||
"BROKER_DISK": "{{brokers.disk}}",
|
||||
"BROKER_PORT": "{{brokers.port}}",
|
||||
"BROKER_JMX_ENABLE": "{{brokers.jmx.enable}}",
|
||||
"BROKER_JMX_REMOTE_ENABLE": "{{brokers.jmx.remote}}",
|
||||
"BROKER_JMX_REMOTE_PORT": "{{brokers.jmx.remote_port}}",
|
||||
"BROKER_JMX_REMOTE_REGISTRY_SSL": "{{brokers.jmx.remote_registry_ssl}}",
|
||||
"BROKER_JMX_REMOTE_SSL": "{{brokers.jmx.remote_ssl}}",
|
||||
"BROKER_JMX_REMOTE_AUTH": "{{brokers.jmx.remote_authenticate}}",
|
||||
"BROKER_JMX_REMOTE_SSL_NEED_CLIENT_AUTH": "{{brokers.jmx.remote_ssl_need_client_auth}}",
|
||||
"BROKER_STATSD_HOST": "{{brokers.statsd.host}}",
|
||||
"BROKER_STATSD_PORT": "{{brokers.statsd.port}}",
|
||||
"DISK_TYPE": "{{brokers.disk_type}}",
|
||||
"KAFKA_VER_NAME": "kafka_2.11-0.10.1.0",
|
||||
"KAFKA_URI": "{{resource.assets.uris.kafka_tgz}}",
|
||||
"OVERRIDER_URI": "{{resource.assets.uris.overrider-zip}}",
|
||||
"EXECUTOR_URI": "{{resource.assets.uris.executor-zip}}",
|
||||
"JAVA_URI": "{{resource.assets.uris.jre-tar-gz}}",
|
||||
"KAFKA_ZOOKEEPER_URI" : "{{kafka.kafka_zookeeper_uri}}",
|
||||
"KAFKA_ADVERTISE_HOST_IP" : "{{kafka.kafka_advertise_host_ip}}",
|
||||
"KAFKA_OVERRIDE_RESERVED_BROKER_MAX_ID": "{{kafka.reserved_broker_max_id}}",
|
||||
"KAFKA_OVERRIDE_OFFSETS_TOPIC_COMPRESSION_CODEC": "{{kafka.offsets_topic_compression_codec}}",
|
||||
"KAFKA_OVERRIDE_REPLICA_FETCH_MIN_BYTES": "{{kafka.replica_fetch_min_bytes}}",
|
||||
"KAFKA_OVERRIDE_CONTROLLED_SHUTDOWN_RETRY_BACKOFF_MS": "{{kafka.controlled_shutdown_retry_backoff_ms}}",
|
||||
"KAFKA_OVERRIDE_LOG_FLUSH_OFFSET_CHECKPOINT_INTERVAL_MS": "{{kafka.log_flush_offset_checkpoint_interval_ms}}",
|
||||
"KAFKA_OVERRIDE_OFFSETS_TOPIC_NUM_PARTITIONS": "{{kafka.offsets_topic_num_partitions}}",
|
||||
"KAFKA_OVERRIDE_MAX_CONNECTIONS_PER_IP_OVERRIDES": "{{kafka.max_connections_per_ip_overrides}}",
|
||||
"KAFKA_OVERRIDE_LEADER_IMBALANCE_CHECK_INTERVAL_SECONDS": "{{kafka.leader_imbalance_check_interval_seconds}}",
|
||||
"KAFKA_OVERRIDE_INTER_BROKER_PROTOCOL_VERSION": "{{kafka.inter_broker_protocol_version}}",
|
||||
"KAFKA_OVERRIDE_LOG_MESSAGE_FORMAT_VERSION": "{{kafka.log_message_format_version}}",
|
||||
"KAFKA_OVERRIDE_REPLICA_SOCKET_TIMEOUT_MS": "{{kafka.replica_socket_timeout_ms}}",
|
||||
"KAFKA_OVERRIDE_GROUP_MAX_SESSION_TIMEOUT_MS": "{{kafka.group_max_session_timeout_ms}}",
|
||||
"KAFKA_OVERRIDE_METRICS_NUM_SAMPLES": "{{kafka.metrics_num_samples}}",
|
||||
"KAFKA_OVERRIDE_LOG_CLEANER_DELETE_RETENTION_MS": "{{kafka.log_cleaner_delete_retention_ms}}",
|
||||
"KAFKA_OVERRIDE_LOG_PREALLOCATE": "{{kafka.log_preallocate}}",
|
||||
"KAFKA_OVERRIDE_REPLICA_SOCKET_RECEIVE_BUFFER_BYTES": "{{kafka.replica_socket_receive_buffer_bytes}}",
|
||||
"KAFKA_OVERRIDE_OFFSET_METADATA_MAX_BYTES": "{{kafka.offset_metadata_max_bytes}}",
|
||||
"KAFKA_OVERRIDE_MESSAGE_MAX_BYTES": "{{kafka.message_max_bytes}}",
|
||||
"KAFKA_OVERRIDE_LOG_ROLL_JITTER_HOURS": "{{kafka.log_roll_jitter_hours}}",
|
||||
"KAFKA_OVERRIDE_OFFSETS_RETENTION_CHECK_INTERVAL_MS": "{{kafka.offsets_retention_check_interval_ms}}",
|
||||
"KAFKA_OVERRIDE_FETCH_PURGATORY_PURGE_INTERVAL_REQUESTS": "{{kafka.fetch_purgatory_purge_interval_requests}}",
|
||||
"KAFKA_OVERRIDE_LOG_RETENTION_CHECK_INTERVAL_MS": "{{kafka.log_retention_check_interval_ms}}",
|
||||
"KAFKA_OVERRIDE_LOG_INDEX_INTERVAL_BYTES": "{{kafka.log_index_interval_bytes}}",
|
||||
"KAFKA_OVERRIDE_NUM_NETWORK_THREADS": "{{kafka.num_network_threads}}",
|
||||
"KAFKA_OVERRIDE_OFFSETS_COMMIT_TIMEOUT_MS": "{{kafka.offsets_commit_timeout_ms}}",
|
||||
"KAFKA_OVERRIDE_OFFSETS_TOPIC_REPLICATION_FACTOR": "{{kafka.offsets_topic_replication_factor}}",
|
||||
"KAFKA_OVERRIDE_REPLICA_FETCH_MAX_BYTES": "{{kafka.replica_fetch_max_bytes}}",
|
||||
"KAFKA_OVERRIDE_CONNECTIONS_MAX_IDLE_MS": "{{kafka.connections_max_idle_ms}}",
|
||||
"KAFKA_OVERRIDE_SOCKET_REQUEST_MAX_BYTES": "{{kafka.socket_request_max_bytes}}",
|
||||
"KAFKA_OVERRIDE_METRICS_SAMPLE_WINDOW_MS": "{{kafka.metrics_sample_window_ms}}",
|
||||
"KAFKA_OVERRIDE_NUM_PARTITIONS": "{{kafka.num_partitions}}",
|
||||
"KAFKA_OVERRIDE_REPLICA_LAG_TIME_MAX_MS": "{{kafka.replica_lag_time_max_ms}}",
|
||||
"KAFKA_OVERRIDE_LOG_CLEANER_IO_BUFFER_LOAD_FACTOR": "{{kafka.log_cleaner_io_buffer_load_factor}}",
|
||||
"KAFKA_OVERRIDE_OFFSETS_COMMIT_REQUIRED_ACKS": "{{kafka.offsets_commit_required_acks}}",
|
||||
"KAFKA_OVERRIDE_AUTO_CREATE_TOPICS_ENABLE": "{{kafka.auto_create_topics_enable}}",
|
||||
"KAFKA_OVERRIDE_UNCLEAN_LEADER_ELECTION_ENABLE": "{{kafka.unclean_leader_election_enable}}",
|
||||
"KAFKA_OVERRIDE_REPLICA_FETCH_BACKOFF_MS": "{{kafka.replica_fetch_backoff_ms}}",
|
||||
"KAFKA_OVERRIDE_LOG_ROLL_HOURS": "{{kafka.log_roll_hours}}",
|
||||
"KAFKA_OVERRIDE_ZOOKEEPER_SESSION_TIMEOUT_MS": "{{kafka.zookeeper_session_timeout_ms}}",
|
||||
"KAFKA_OVERRIDE_PRODUCER_PURGATORY_PURGE_INTERVAL_REQUESTS": "{{kafka.producer_purgatory_purge_interval_requests}}",
|
||||
"KAFKA_OVERRIDE_GROUP_MIN_SESSION_TIMEOUT_MS": "{{kafka.group_min_session_timeout_ms}}",
|
||||
"KAFKA_OVERRIDE_LOG_INDEX_SIZE_MAX_BYTES": "{{kafka.log_index_size_max_bytes}}",
|
||||
"KAFKA_OVERRIDE_NUM_REPLICA_FETCHERS": "{{kafka.num_replica_fetchers}}",
|
||||
"KAFKA_OVERRIDE_MIN_INSYNC_REPLICAS": "{{kafka.min_insync_replicas}}",
|
||||
"KAFKA_OVERRIDE_LOG_FLUSH_INTERVAL_MESSAGES": "{{kafka.log_flush_interval_messages}}",
|
||||
"KAFKA_OVERRIDE_SOCKET_SEND_BUFFER_BYTES": "{{kafka.socket_send_buffer_bytes}}",
|
||||
"KAFKA_OVERRIDE_AUTO_LEADER_REBALANCE_ENABLE": "{{kafka.auto_leader_rebalance_enable}}",
|
||||
"KAFKA_OVERRIDE_LOG_CLEANER_ENABLE": "{{kafka.log_cleaner_enable}}",
|
||||
"KAFKA_OVERRIDE_QUEUED_MAX_REQUESTS": "{{kafka.queued_max_requests}}",
|
||||
"KAFKA_OVERRIDE_CONTROLLED_SHUTDOWN_MAX_RETRIES": "{{kafka.controlled_shutdown_max_retries}}",
|
||||
"KAFKA_OVERRIDE_OFFSETS_LOAD_BUFFER_SIZE": "{{kafka.offsets_load_buffer_size}}",
|
||||
"KAFKA_OVERRIDE_LOG_RETENTION_BYTES": "{{kafka.log_retention_bytes}}",
|
||||
"KAFKA_OVERRIDE_NUM_IO_THREADS": "{{kafka.num_io_threads}}",
|
||||
"KAFKA_OVERRIDE_CONTROLLER_SOCKET_TIMEOUT_MS": "{{kafka.controller_socket_timeout_ms}}",
|
||||
"KAFKA_OVERRIDE_LOG_RETENTION_HOURS": "{{kafka.log_retention_hours}}",
|
||||
"KAFKA_OVERRIDE_LOG_FLUSH_SCHEDULER_INTERVAL_MS": "{{kafka.log_flush_scheduler_interval_ms}}",
|
||||
"KAFKA_OVERRIDE_OFFSETS_RETENTION_MINUTES": "{{kafka.offsets_retention_minutes}}",
|
||||
"KAFKA_OVERRIDE_QUOTA_WINDOW_SIZE_SECONDS": "{{kafka.quota_window_size_seconds}}",
|
||||
"KAFKA_OVERRIDE_LOG_SEGMENT_BYTES": "{{kafka.log_segment_bytes}}",
|
||||
"KAFKA_OVERRIDE_LEADER_IMBALANCE_PER_BROKER_PERCENTAGE": "{{kafka.leader_imbalance_per_broker_percentage}}",
|
||||
"KAFKA_OVERRIDE_MAX_CONNECTIONS_PER_IP": "{{kafka.max_connections_per_ip}}",
|
||||
"KAFKA_OVERRIDE_LOG_CLEANER_DEDUPE_BUFFER_SIZE": "{{kafka.log_cleaner_dedupe_buffer_size}}",
|
||||
"KAFKA_OVERRIDE_LOG_CLEANER_MIN_CLEANABLE_RATIO": "{{kafka.log_cleaner_min_cleanable_ratio}}",
|
||||
"KAFKA_OVERRIDE_ZOOKEEPER_SYNC_TIME_MS": "{{kafka.zookeeper_sync_time_ms}}",
|
||||
"KAFKA_OVERRIDE_QUOTA_CONSUMER_DEFAULT": "{{kafka.quota_consumer_default}}",
|
||||
"KAFKA_OVERRIDE_DELETE_TOPIC_ENABLE": "{{kafka.delete_topic_enable}}",
|
||||
"KAFKA_OVERRIDE_LOG_CLEANUP_POLICY": "{{kafka.log_cleanup_policy}}",
|
||||
"KAFKA_OVERRIDE_DEFAULT_REPLICATION_FACTOR": "{{kafka.default_replication_factor}}",
|
||||
"KAFKA_OVERRIDE_NUM_RECOVERY_THREADS_PER_DATA_DIR": "{{kafka.num_recovery_threads_per_data_dir}}",
|
||||
"KAFKA_OVERRIDE_LOG_CLEANER_IO_BUFFER_SIZE": "{{kafka.log_cleaner_io_buffer_size}}",
|
||||
"KAFKA_OVERRIDE_BACKGROUND_THREADS": "{{kafka.background_threads}}",
|
||||
"KAFKA_OVERRIDE_LOG_SEGMENT_DELETE_DELAY_MS": "{{kafka.log_segment_delete_delay_ms}}",
|
||||
"KAFKA_OVERRIDE_QUOTA_WINDOW_NUM": "{{kafka.quota_window_num}}",
|
||||
"KAFKA_OVERRIDE_REQUEST_TIMEOUT_MS": "{{kafka.request_timeout_ms}}",
|
||||
"KAFKA_OVERRIDE_LOG_CLEANER_THREADS": "{{kafka.log_cleaner_threads}}",
|
||||
"KAFKA_OVERRIDE_QUOTA_PRODUCER_DEFAULT": "{{kafka.quota_producer_default}}",
|
||||
"KAFKA_OVERRIDE_LOG_CLEANER_BACKOFF_MS": "{{kafka.log_cleaner_backoff_ms}}",
|
||||
"KAFKA_OVERRIDE_CONTROLLED_SHUTDOWN_ENABLE": "{{kafka.controlled_shutdown_enable}}",
|
||||
"KAFKA_OVERRIDE_SOCKET_RECEIVE_BUFFER_BYTES": "{{kafka.socket_receive_buffer_bytes}}",
|
||||
"KAFKA_OVERRIDE_REPLICA_FETCH_WAIT_MAX_MS": "{{kafka.replica_fetch_wait_max_ms}}",
|
||||
"KAFKA_OVERRIDE_REPLICA_HIGH_WATERMARK_CHECKPOINT_INTERVAL_MS": "{{kafka.replica_high_watermark_checkpoint_interval_ms}}",
|
||||
"KAFKA_OVERRIDE_OFFSETS_TOPIC_SEGMENT_BYTES": "{{kafka.offsets_topic_segment_bytes}}",
|
||||
"KAFKA_OVERRIDE_LOG_CLEANER_IO_MAX_BYTES_PER_SECOND": "{{kafka.log_cleaner_io_max_bytes_per_second}}",
|
||||
"KAFKA_OVERRIDE_COMPRESSION_TYPE": "{{kafka.compression_type}}"
|
||||
{{#service.secret_name}}
|
||||
,"DCOS_SERVICE_ACCOUNT_CREDENTIAL": { "secret": "serviceCredential" },
|
||||
"MESOS_MODULES": "{\"libraries\": [{\"file\": \"libdcos_security.so\", \"modules\": [{\"name\": \"com_mesosphere_dcos_ClassicRPCAuthenticatee\"}]}]}",
|
||||
"MESOS_AUTHENTICATEE": "com_mesosphere_dcos_ClassicRPCAuthenticatee"
|
||||
{{/service.secret_name}}
|
||||
},
|
||||
{{#service.secret_name}}
|
||||
"secrets": {
|
||||
"serviceCredential": {
|
||||
"source": "{{service.secret_name}}"
|
||||
}
|
||||
},
|
||||
{{/service.secret_name}}
|
||||
"uris": [
|
||||
"{{resource.assets.uris.jre-7u79-openjdk-tgz}}",
|
||||
"{{resource.assets.uris.kafka_2-10-0-9-0-0-tgz}}",
|
||||
"{{resource.assets.uris.kafka-mesos-0-9-4-0-jar}}"
|
||||
"{{resource.assets.uris.jre-tar-gz}}",
|
||||
"{{resource.assets.uris.scheduler-zip}}",
|
||||
"{{resource.assets.uris.kafka_tgz}}",
|
||||
"{{resource.assets.uris.libmesos-bundle-tar-gz}}"
|
||||
],
|
||||
"ports": [0],
|
||||
"healthChecks": [
|
||||
{
|
||||
"protocol": "HTTP",
|
||||
"path": "/health",
|
||||
"gracePeriodSeconds": 120,
|
||||
"intervalSeconds": 60,
|
||||
"intervalSeconds": 30,
|
||||
"maxConsecutiveFailures": 0,
|
||||
"path": "/admin/healthcheck",
|
||||
"portIndex": 0,
|
||||
"timeoutSeconds": 30,
|
||||
"maxConsecutiveFailures": 3
|
||||
"protocol": "HTTP",
|
||||
"timeoutSeconds": 5
|
||||
}
|
||||
],
|
||||
"readinessChecks": [
|
||||
{
|
||||
"name": "kafkaUpdateProgress",
|
||||
"protocol": "HTTP",
|
||||
"path": "/v1/plan",
|
||||
"portName": "api",
|
||||
"interval": 10000,
|
||||
"timeout": 10000,
|
||||
"httpStatusCodesForReady": [200],
|
||||
"preserveLastResponse": true
|
||||
}
|
||||
],
|
||||
"upgradeStrategy":{
|
||||
"minimumHealthCapacity": 0,
|
||||
"maximumOverCapacity": 0
|
||||
},
|
||||
"portDefinitions": [
|
||||
{
|
||||
"port": 0,
|
||||
"protocol": "tcp",
|
||||
"name": "health",
|
||||
"labels": {}
|
||||
},
|
||||
{
|
||||
"protocol": "HTTP",
|
||||
"path": "/api/broker/list",
|
||||
"gracePeriodSeconds": 120,
|
||||
"intervalSeconds": 60,
|
||||
"portIndex": 0,
|
||||
"timeoutSeconds": 30,
|
||||
"maxConsecutiveFailures": 0
|
||||
"port": 1,
|
||||
"protocol": "tcp",
|
||||
"name": "api",
|
||||
"labels": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cmd": "LIBPROCESS_PORT=$PORT1 && ./bin/start --master zk://master.mesos:2181/mesos --checkpoint --decline_offer_duration 5000 --http_port $PORT0 --event_stream_max_outstanding_messages 50 --failover_timeout 604800 --framework_name marathon-user --ha --leader_proxy_connection_timeout 5000 --leader_proxy_read_timeout 10000 --local_port_max 20000 --local_port_min 10000 --marathon_store_timeout 2000 --max_tasks_per_offer 1 --max_tasks_per_offer_cycle 1000 --min_revive_offers_interval 5000 --revive_offers_for_new_apps --scale_apps_initial_delay 15000 --scale_apps_interval 300000 --zk_session_timeout 1800000 --zk zk://localhost:2181/mesos --mesos_leader_ui_url /mesos --zk_compression --zk_compression_threshold 65536 ",
|
||||
"cmd": "LIBPROCESS_PORT=$PORT1 && ./bin/start --checkpoint --decline_offer_duration \"120000\" --default_accepted_resource_roles \"*\" --enable_features \"vips,task_killing\" --event_stream_max_outstanding_messages \"50\" --executor \"//cmd\" --failover_timeout \"604800\" --framework_name marathon-user --ha --hostname $LIBPROCESS_IP --http_compression --http_event_callback_slow_consumer_timeout \"10000\" --http_event_request_timeout \"10000\" --http_port $PORT0 --http_realm \"Mesosphere\" --launch_token_refresh_interval \"30000\" --launch_tokens \"100\" --leader_proxy_connection_timeout \"5000\" --leader_proxy_read_timeout \"10000\" --local_port_max \"20000\" --local_port_min \"10000\" --master \"zk://master.mesos:2181/mesos\" --max_tasks_per_offer \"1\" --disable_mesos_authentication --mesos_authentication_principal marathon-user --mesos_leader_ui_url \"/mesos\" --mesos_role marathon-user --metrics --min_revive_offers_interval \"5000\" --offer_matching_timeout \"1000\" --on_elected_prepare_timeout \"180000\" --reconciliation_initial_delay \"15000\" --reconciliation_interval \"600000\" --revive_offers_repetitions \"3\" --save_tasks_to_launch_timeout \"3000\" --scale_apps_initial_delay \"15000\" --scale_apps_interval \"300000\" --store_cache --task_launch_confirm_timeout \"300000\" --task_launch_timeout \"300000\" --task_lost_expunge_gc \"75000\" --task_lost_expunge_initial_delay \"300000\" --task_lost_expunge_interval \"30000\" --task_reservation_timeout \"20000\" --disable_tracing --zk zk://localhost:2181/mesos --zk_compression --zk_compression_threshold \"65536\" --zk_max_node_size \"1024000\" --zk_max_versions \"25\" --zk_session_timeout \"10000\" --zk_timeout \"10000\"",
|
||||
"constraints": [
|
||||
[
|
||||
"hostname",
|
||||
@@ -8,7 +8,7 @@
|
||||
],
|
||||
"container": {
|
||||
"docker": {
|
||||
"image": "docker.io/mesosphere/marathon:v0.11.1",
|
||||
"image": "mesosphere/marathon:v1.4.1",
|
||||
"network": "HOST"
|
||||
},
|
||||
"type": "DOCKER"
|
||||
@@ -19,10 +19,10 @@
|
||||
},
|
||||
"healthChecks": [
|
||||
{
|
||||
"gracePeriodSeconds": 120,
|
||||
"gracePeriodSeconds": 1800,
|
||||
"intervalSeconds": 10,
|
||||
"maxConsecutiveFailures": 3,
|
||||
"path": "/v2/info",
|
||||
"path": "/ping",
|
||||
"portIndex": 0,
|
||||
"protocol": "HTTP",
|
||||
"timeoutSeconds": 5
|
||||
@@ -31,15 +31,19 @@
|
||||
"id": "marathon-user",
|
||||
"instances": 1,
|
||||
"labels": {
|
||||
"DCOS_PACKAGE_FRAMEWORK_NAME": "marathon-user",
|
||||
"DCOS_PACKAGE_IS_FRAMEWORK": "true",
|
||||
"DCOS_PACKAGE_METADATA": "eyJwYWNrYWdpbmdWZXJzaW9uIjoiMi4wIiwibmFtZSI6Im1hcmF0aG9uIiwidmVyc2lvbiI6IjAuMTEuMSIsIm1haW50YWluZXIiOiJzdXBwb3J0QG1lc29zcGhlcmUuaW8iLCJkZXNjcmlwdGlvbiI6IkEgY2x1c3Rlci13aWRlIGluaXQgYW5kIGNvbnRyb2wgc3lzdGVtIGZvciBzZXJ2aWNlcyBpbiBjZ3JvdXBzIG9yIERvY2tlciBjb250YWluZXJzLiIsInRhZ3MiOlsiaW5pdCIsImxvbmctcnVubmluZyJdLCJzZWxlY3RlZCI6ZmFsc2UsInNjbSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvc3BoZXJlL21hcmF0aG9uLmdpdCIsImZyYW1ld29yayI6dHJ1ZSwicHJlSW5zdGFsbE5vdGVzIjoiV2UgcmVjb21tZW5kIGEgbWluaW11bSBvZiBvbmUgbm9kZSB3aXRoIGF0IGxlYXN0IDIgQ1BVJ3MgYW5kIDFHQiBvZiBSQU0gYXZhaWxhYmxlIGZvciB0aGUgTWFyYXRob24gU2VydmljZS4iLCJwb3N0SW5zdGFsbE5vdGVzIjoiTWFyYXRob24gRENPUyBTZXJ2aWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQhXG5cblx0RG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9tZXNvc3BoZXJlLmdpdGh1Yi5pby9tYXJhdGhvblxuXHRJc3N1ZXM6IGh0dHBzOi9naXRodWIuY29tL21lc29zcGhlcmUvbWFyYXRob24vaXNzdWVzXG4iLCJwb3N0VW5pbnN0YWxsTm90ZXMiOiJUaGUgTWFyYXRob24gRENPUyBTZXJ2aWNlIGhhcyBiZWVuIHVuaW5zdGFsbGVkIGFuZCB3aWxsIG5vIGxvbmdlciBydW4uXG5QbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgYXQgaHR0cDovL2RvY3MubWVzb3NwaGVyZS5jb20vc2VydmljZXMvbWFyYXRob24vI3VuaW5zdGFsbCB0byBjbGVhbiB1cCBhbnkgcGVyc2lzdGVkIHN0YXRlIiwibGljZW5zZXMiOlt7Im5hbWUiOiJBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvc3BoZXJlL21hcmF0aG9uL2Jsb2IvbWFzdGVyL0xJQ0VOU0UifV0sImltYWdlcyI6eyJpY29uLXNtYWxsIjoiaHR0cHM6Ly9kb3dubG9hZHMubWVzb3NwaGVyZS5jb20vbWFyYXRob24vYXNzZXRzL2ljb24tc2VydmljZS1tYXJhdGhvbi1zbWFsbC5wbmciLCJpY29uLW1lZGl1bSI6Imh0dHBzOi8vZG93bmxvYWRzLm1lc29zcGhlcmUuY29tL21hcmF0aG9uL2Fzc2V0cy9pY29uLXNlcnZpY2UtbWFyYXRob24tbWVkaXVtLnBuZyIsImljb24tbGFyZ2UiOiJodHRwczovL2Rvd25sb2Fkcy5tZXNvc3BoZXJlLmNvbS9tYXJhdGhvbi9hc3NldHMvaWNvbi1zZXJ2aWNlLW1hcmF0aG9uLWxhcmdlLnBuZyJ9fQ==",
|
||||
"DCOS_PACKAGE_METADATA": "eyJwYWNrYWdpbmdWZXJzaW9uIjoiMy4wIiwibmFtZSI6Im1hcmF0aG9uIiwidmVyc2lvbiI6IjEuNC4xIiwibWFpbnRhaW5lciI6InN1cHBvcnRAbWVzb3NwaGVyZS5pbyIsImRlc2NyaXB0aW9uIjoiQSBjb250YWluZXIgb3JjaGVzdHJhdGlvbiBwbGF0Zm9ybSBmb3IgTWVzb3MgYW5kIERDT1MuIiwidGFncyI6WyJpbml0IiwibG9uZy1ydW5uaW5nIl0sInNlbGVjdGVkIjp0cnVlLCJzY20iOiJodHRwczovL2dpdGh1Yi5jb20vbWVzb3NwaGVyZS9tYXJhdGhvbi5naXQiLCJmcmFtZXdvcmsiOnRydWUsInByZUluc3RhbGxOb3RlcyI6IldlIHJlY29tbWVuZCBhIG1pbmltdW0gb2Ygb25lIG5vZGUgd2l0aCBhdCBsZWFzdCAyIENQVSBzaGFyZXMgYW5kIDFHQiBvZiBSQU0gYXZhaWxhYmxlIGZvciB0aGUgTWFyYXRob24gRENPUyBTZXJ2aWNlLiIsInBvc3RJbnN0YWxsTm90ZXMiOiJNYXJhdGhvbiBEQ09TIFNlcnZpY2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCFcblxuXHREb2N1bWVudGF0aW9uOiBodHRwczovL21lc29zcGhlcmUuZ2l0aHViLmlvL21hcmF0aG9uXG5cdElzc3VlczogaHR0cHM6Ly9naXRodWIuY29tL21lc29zcGhlcmUvbWFyYXRob24vaXNzdWVzXG4iLCJwb3N0VW5pbnN0YWxsTm90ZXMiOiJUaGUgTWFyYXRob24gRENPUyBTZXJ2aWNlIGhhcyBiZWVuIHVuaW5zdGFsbGVkIGFuZCB3aWxsIG5vIGxvbmdlciBydW4uXG5QbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgYXQgaHR0cDovL2RvY3MubWVzb3NwaGVyZS5jb20vc2VydmljZXMvbWFyYXRob24vI3VuaW5zdGFsbCB0byBjbGVhbiB1cCBhbnkgcGVyc2lzdGVkIHN0YXRlIiwibGljZW5zZXMiOlt7Im5hbWUiOiJBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvc3BoZXJlL21hcmF0aG9uL2Jsb2IvbWFzdGVyL0xJQ0VOU0UifV0sImltYWdlcyI6eyJpY29uLXNtYWxsIjoiaHR0cHM6Ly9kb3dubG9hZHMubWVzb3NwaGVyZS5jb20vbWFyYXRob24vYXNzZXRzL2ljb24tc2VydmljZS1tYXJhdGhvbi1zbWFsbC5wbmciLCJpY29uLW1lZGl1bSI6Imh0dHBzOi8vZG93bmxvYWRzLm1lc29zcGhlcmUuY29tL21hcmF0aG9uL2Fzc2V0cy9pY29uLXNlcnZpY2UtbWFyYXRob24tbWVkaXVtLnBuZyIsImljb24tbGFyZ2UiOiJodHRwczovL2Rvd25sb2Fkcy5tZXNvc3BoZXJlLmNvbS9tYXJhdGhvbi9hc3NldHMvaWNvbi1zZXJ2aWNlLW1hcmF0aG9uLWxhcmdlLnBuZyJ9fQ==",
|
||||
"DCOS_PACKAGE_NAME": "marathon",
|
||||
"DCOS_PACKAGE_REGISTRY_VERSION": "2.0",
|
||||
"DCOS_PACKAGE_RELEASE": "0",
|
||||
"DCOS_PACKAGE_REGISTRY_VERSION": "3.0",
|
||||
"DCOS_PACKAGE_RELEASE": "8",
|
||||
"DCOS_PACKAGE_SOURCE": "http://universe.marathon.mesos:8085/repo",
|
||||
"DCOS_PACKAGE_VERSION": "0.11.1"
|
||||
"DCOS_PACKAGE_VERSION": "1.4.1",
|
||||
"DCOS_SERVICE_NAME": "marathon-user",
|
||||
"DCOS_SERVICE_PORT_INDEX": "0",
|
||||
"DCOS_SERVICE_SCHEME": "http"
|
||||
},
|
||||
"mem": 1024,
|
||||
"mem": 1536,
|
||||
"ports": [
|
||||
0,
|
||||
0
|
||||
|
||||
@@ -1,5 +1,40 @@
|
||||
{
|
||||
"pip": [
|
||||
"https://s3-eu-west-1.amazonaws.com/downloads.mesosphere.com/kafka/dcos-kafka-0.2.1.tar.gz"
|
||||
]
|
||||
"binaries": {
|
||||
"darwin": {
|
||||
"x86-64": {
|
||||
"contentHash": [
|
||||
{
|
||||
"algo": "sha256",
|
||||
"value": "660f143852b6d3d2b0b2f787fab9e5e2927f4440502a89c9e1c08488cdacc34f"
|
||||
}
|
||||
],
|
||||
"kind": "executable",
|
||||
"url": "https://downloads.mesosphere.com/kafka/assets/1.1.19-0.10.1.0/dcos-kafka-darwin"
|
||||
}
|
||||
},
|
||||
"linux": {
|
||||
"x86-64": {
|
||||
"contentHash": [
|
||||
{
|
||||
"algo": "sha256",
|
||||
"value": "0b26409c9760fd4d75fca1114d01f25ec069147d578d6f337c88424ebc64c808"
|
||||
}
|
||||
],
|
||||
"kind": "executable",
|
||||
"url": "https://downloads.mesosphere.com/kafka/assets/1.1.19-0.10.1.0/dcos-kafka-linux"
|
||||
}
|
||||
},
|
||||
"windows": {
|
||||
"x86-64": {
|
||||
"contentHash": [
|
||||
{
|
||||
"algo": "sha256",
|
||||
"value": "60d6f802412b94833cf8db217af162e7dc35c0f5e0a1eb4b587268c361500c3b"
|
||||
}
|
||||
],
|
||||
"kind": "executable",
|
||||
"url": "https://downloads.mesosphere.com/kafka/assets/1.1.19-0.10.1.0/dcos-kafka.exe"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,38 @@
|
||||
[
|
||||
"1.1.19-0.10.1.0",
|
||||
"1.1.18-0.10.1.0",
|
||||
"1.1.17.1-0.10.1.0",
|
||||
"1.1.17-0.10.1.0",
|
||||
"1.1.16-0.10.0.0",
|
||||
"1.1.15-0.10.0.0",
|
||||
"1.1.14-0.10.0.0",
|
||||
"1.1.13-0.10.0.0",
|
||||
"1.1.11-0.10.0.0",
|
||||
"1.1.10-0.10.0.0",
|
||||
"1.1.9-0.10.0.0",
|
||||
"1.1.8-0.10.0.0",
|
||||
"1.1.7-0.10.0.0",
|
||||
"1.1.6-0.10.0.0",
|
||||
"1.1.5-0.10.0.0",
|
||||
"1.1.4-0.10.0.0",
|
||||
"1.1.3-0.10.0.0",
|
||||
"1.1.2-0.10.0.0",
|
||||
"1.1.1-0.10.0.0",
|
||||
"1.1.0-0.10.0.0",
|
||||
"1.0.9-0.10.0.0",
|
||||
"1.0.8-0.10.0.0",
|
||||
"1.0.7-0.9.0.1",
|
||||
"1.0.6-0.9.0.1",
|
||||
"1.0.5-0.9.0.1",
|
||||
"1.0.4-0.9.0.1",
|
||||
"1.0.3-0.9.0.1",
|
||||
"1.0.2-0.9.0.1",
|
||||
"1.0.1-0.9.0.1",
|
||||
"1.0.0-0.9.0.1",
|
||||
"0.2.4-0.9.0.1",
|
||||
"0.9.0-0.2.2",
|
||||
"0.2.0",
|
||||
"0.1.0",
|
||||
"0.9.4.0",
|
||||
"0.9.2.0"
|
||||
]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"description": "A cluster-wide init and control system for services in cgroups or Docker containers.",
|
||||
"description": "A container orchestration platform for Mesos and DCOS.",
|
||||
"framework": true,
|
||||
"licenses": [
|
||||
{
|
||||
@@ -8,16 +8,17 @@
|
||||
}
|
||||
],
|
||||
"maintainer": "support@mesosphere.io",
|
||||
"minDcosReleaseVersion": "1.9",
|
||||
"name": "marathon",
|
||||
"packagingVersion": "2.0",
|
||||
"postInstallNotes": "Marathon DCOS Service has been successfully installed!\n\n\tDocumentation: https://mesosphere.github.io/marathon\n\tIssues: https:/github.com/mesosphere/marathon/issues\n",
|
||||
"packagingVersion": "3.0",
|
||||
"postInstallNotes": "Marathon DCOS Service has been successfully installed!\n\n\tDocumentation: https://mesosphere.github.io/marathon\n\tIssues: https://github.com/mesosphere/marathon/issues\n",
|
||||
"postUninstallNotes": "The Marathon DCOS Service has been uninstalled and will no longer run.\nPlease follow the instructions at http://docs.mesosphere.com/services/marathon/#uninstall to clean up any persisted state",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 2 CPU's and 1GB of RAM available for the Marathon Service.",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 2 CPU shares and 1GB of RAM available for the Marathon DCOS Service.",
|
||||
"scm": "https://github.com/mesosphere/marathon.git",
|
||||
"selected": false,
|
||||
"selected": true,
|
||||
"tags": [
|
||||
"init",
|
||||
"long-running"
|
||||
],
|
||||
"version": "0.11.1"
|
||||
"version": "1.4.1"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cmd": "LIBPROCESS_PORT=$PORT1 && ./bin/start --master zk://master.mesos:2181/mesos --checkpoint --decline_offer_duration 5000 --http_port $PORT0 --event_stream_max_outstanding_messages 50 --failover_timeout 604800 --framework_name marathon-user --ha --leader_proxy_connection_timeout 5000 --leader_proxy_read_timeout 10000 --local_port_max 20000 --local_port_min 10000 --marathon_store_timeout 2000 --max_tasks_per_offer 1 --max_tasks_per_offer_cycle 1000 --min_revive_offers_interval 5000 --revive_offers_for_new_apps --scale_apps_initial_delay 15000 --scale_apps_interval 300000 --zk_session_timeout 1800000 --zk zk://master.mesos:2181/universe --mesos_leader_ui_url /mesos --zk_compression --zk_compression_threshold 65536 ",
|
||||
"cmd": "LIBPROCESS_PORT=$PORT1 && ./bin/start --checkpoint --decline_offer_duration \"120000\" --default_accepted_resource_roles \"*\" --enable_features \"vips,task_killing\" --event_stream_max_outstanding_messages \"50\" --executor \"//cmd\" --failover_timeout \"604800\" --framework_name marathon-user --ha --hostname $LIBPROCESS_IP --http_compression --http_event_callback_slow_consumer_timeout \"10000\" --http_event_request_timeout \"10000\" --http_port $PORT0 --http_realm \"Mesosphere\" --launch_token_refresh_interval \"30000\" --launch_tokens \"100\" --leader_proxy_connection_timeout \"5000\" --leader_proxy_read_timeout \"10000\" --local_port_max \"20000\" --local_port_min \"10000\" --master \"zk://master.mesos:2181/mesos\" --max_tasks_per_offer \"1\" --disable_mesos_authentication --mesos_authentication_principal marathon-user --mesos_leader_ui_url \"/mesos\" --mesos_role marathon-user --metrics --min_revive_offers_interval \"5000\" --offer_matching_timeout \"1000\" --on_elected_prepare_timeout \"180000\" --reconciliation_initial_delay \"15000\" --reconciliation_interval \"600000\" --revive_offers_repetitions \"3\" --save_tasks_to_launch_timeout \"3000\" --scale_apps_initial_delay \"15000\" --scale_apps_interval \"300000\" --store_cache --task_launch_confirm_timeout \"300000\" --task_launch_timeout \"300000\" --task_lost_expunge_gc \"75000\" --task_lost_expunge_initial_delay \"300000\" --task_lost_expunge_interval \"30000\" --task_reservation_timeout \"20000\" --disable_tracing --zk zk://master.mesos:2181/universe/marathon-user --zk_compression --zk_compression_threshold \"65536\" --zk_max_node_size \"1024000\" --zk_max_versions \"25\" --zk_session_timeout \"10000\" --zk_timeout \"10000\"",
|
||||
"constraints": [
|
||||
[
|
||||
"hostname",
|
||||
@@ -8,7 +8,7 @@
|
||||
],
|
||||
"container": {
|
||||
"docker": {
|
||||
"image": "docker.io/mesosphere/marathon:v0.11.1",
|
||||
"image": "mesosphere/marathon:v1.4.1",
|
||||
"network": "HOST"
|
||||
},
|
||||
"type": "DOCKER"
|
||||
@@ -19,10 +19,10 @@
|
||||
},
|
||||
"healthChecks": [
|
||||
{
|
||||
"gracePeriodSeconds": 120,
|
||||
"gracePeriodSeconds": 1800,
|
||||
"intervalSeconds": 10,
|
||||
"maxConsecutiveFailures": 3,
|
||||
"path": "/v2/info",
|
||||
"path": "/ping",
|
||||
"portIndex": 0,
|
||||
"protocol": "HTTP",
|
||||
"timeoutSeconds": 5
|
||||
@@ -31,15 +31,19 @@
|
||||
"id": "marathon-user",
|
||||
"instances": 1,
|
||||
"labels": {
|
||||
"DCOS_PACKAGE_FRAMEWORK_NAME": "marathon-user",
|
||||
"DCOS_PACKAGE_IS_FRAMEWORK": "true",
|
||||
"DCOS_PACKAGE_METADATA": "eyJwYWNrYWdpbmdWZXJzaW9uIjoiMi4wIiwibmFtZSI6Im1hcmF0aG9uIiwidmVyc2lvbiI6IjAuMTEuMSIsIm1haW50YWluZXIiOiJzdXBwb3J0QG1lc29zcGhlcmUuaW8iLCJkZXNjcmlwdGlvbiI6IkEgY2x1c3Rlci13aWRlIGluaXQgYW5kIGNvbnRyb2wgc3lzdGVtIGZvciBzZXJ2aWNlcyBpbiBjZ3JvdXBzIG9yIERvY2tlciBjb250YWluZXJzLiIsInRhZ3MiOlsiaW5pdCIsImxvbmctcnVubmluZyJdLCJzZWxlY3RlZCI6ZmFsc2UsInNjbSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvc3BoZXJlL21hcmF0aG9uLmdpdCIsImZyYW1ld29yayI6dHJ1ZSwicHJlSW5zdGFsbE5vdGVzIjoiV2UgcmVjb21tZW5kIGEgbWluaW11bSBvZiBvbmUgbm9kZSB3aXRoIGF0IGxlYXN0IDIgQ1BVJ3MgYW5kIDFHQiBvZiBSQU0gYXZhaWxhYmxlIGZvciB0aGUgTWFyYXRob24gU2VydmljZS4iLCJwb3N0SW5zdGFsbE5vdGVzIjoiTWFyYXRob24gRENPUyBTZXJ2aWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQhXG5cblx0RG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9tZXNvc3BoZXJlLmdpdGh1Yi5pby9tYXJhdGhvblxuXHRJc3N1ZXM6IGh0dHBzOi9naXRodWIuY29tL21lc29zcGhlcmUvbWFyYXRob24vaXNzdWVzXG4iLCJwb3N0VW5pbnN0YWxsTm90ZXMiOiJUaGUgTWFyYXRob24gRENPUyBTZXJ2aWNlIGhhcyBiZWVuIHVuaW5zdGFsbGVkIGFuZCB3aWxsIG5vIGxvbmdlciBydW4uXG5QbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgYXQgaHR0cDovL2RvY3MubWVzb3NwaGVyZS5jb20vc2VydmljZXMvbWFyYXRob24vI3VuaW5zdGFsbCB0byBjbGVhbiB1cCBhbnkgcGVyc2lzdGVkIHN0YXRlIiwibGljZW5zZXMiOlt7Im5hbWUiOiJBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvc3BoZXJlL21hcmF0aG9uL2Jsb2IvbWFzdGVyL0xJQ0VOU0UifV0sImltYWdlcyI6eyJpY29uLXNtYWxsIjoiaHR0cHM6Ly9kb3dubG9hZHMubWVzb3NwaGVyZS5jb20vbWFyYXRob24vYXNzZXRzL2ljb24tc2VydmljZS1tYXJhdGhvbi1zbWFsbC5wbmciLCJpY29uLW1lZGl1bSI6Imh0dHBzOi8vZG93bmxvYWRzLm1lc29zcGhlcmUuY29tL21hcmF0aG9uL2Fzc2V0cy9pY29uLXNlcnZpY2UtbWFyYXRob24tbWVkaXVtLnBuZyIsImljb24tbGFyZ2UiOiJodHRwczovL2Rvd25sb2Fkcy5tZXNvc3BoZXJlLmNvbS9tYXJhdGhvbi9hc3NldHMvaWNvbi1zZXJ2aWNlLW1hcmF0aG9uLWxhcmdlLnBuZyJ9fQ==",
|
||||
"DCOS_PACKAGE_METADATA": "eyJwYWNrYWdpbmdWZXJzaW9uIjoiMy4wIiwibmFtZSI6Im1hcmF0aG9uIiwidmVyc2lvbiI6IjEuNC4xIiwibWFpbnRhaW5lciI6InN1cHBvcnRAbWVzb3NwaGVyZS5pbyIsImRlc2NyaXB0aW9uIjoiQSBjb250YWluZXIgb3JjaGVzdHJhdGlvbiBwbGF0Zm9ybSBmb3IgTWVzb3MgYW5kIERDT1MuIiwidGFncyI6WyJpbml0IiwibG9uZy1ydW5uaW5nIl0sInNlbGVjdGVkIjp0cnVlLCJzY20iOiJodHRwczovL2dpdGh1Yi5jb20vbWVzb3NwaGVyZS9tYXJhdGhvbi5naXQiLCJmcmFtZXdvcmsiOnRydWUsInByZUluc3RhbGxOb3RlcyI6IldlIHJlY29tbWVuZCBhIG1pbmltdW0gb2Ygb25lIG5vZGUgd2l0aCBhdCBsZWFzdCAyIENQVSBzaGFyZXMgYW5kIDFHQiBvZiBSQU0gYXZhaWxhYmxlIGZvciB0aGUgTWFyYXRob24gRENPUyBTZXJ2aWNlLiIsInBvc3RJbnN0YWxsTm90ZXMiOiJNYXJhdGhvbiBEQ09TIFNlcnZpY2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCFcblxuXHREb2N1bWVudGF0aW9uOiBodHRwczovL21lc29zcGhlcmUuZ2l0aHViLmlvL21hcmF0aG9uXG5cdElzc3VlczogaHR0cHM6Ly9naXRodWIuY29tL21lc29zcGhlcmUvbWFyYXRob24vaXNzdWVzXG4iLCJwb3N0VW5pbnN0YWxsTm90ZXMiOiJUaGUgTWFyYXRob24gRENPUyBTZXJ2aWNlIGhhcyBiZWVuIHVuaW5zdGFsbGVkIGFuZCB3aWxsIG5vIGxvbmdlciBydW4uXG5QbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgYXQgaHR0cDovL2RvY3MubWVzb3NwaGVyZS5jb20vc2VydmljZXMvbWFyYXRob24vI3VuaW5zdGFsbCB0byBjbGVhbiB1cCBhbnkgcGVyc2lzdGVkIHN0YXRlIiwibGljZW5zZXMiOlt7Im5hbWUiOiJBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvc3BoZXJlL21hcmF0aG9uL2Jsb2IvbWFzdGVyL0xJQ0VOU0UifV0sImltYWdlcyI6eyJpY29uLXNtYWxsIjoiaHR0cHM6Ly9kb3dubG9hZHMubWVzb3NwaGVyZS5jb20vbWFyYXRob24vYXNzZXRzL2ljb24tc2VydmljZS1tYXJhdGhvbi1zbWFsbC5wbmciLCJpY29uLW1lZGl1bSI6Imh0dHBzOi8vZG93bmxvYWRzLm1lc29zcGhlcmUuY29tL21hcmF0aG9uL2Fzc2V0cy9pY29uLXNlcnZpY2UtbWFyYXRob24tbWVkaXVtLnBuZyIsImljb24tbGFyZ2UiOiJodHRwczovL2Rvd25sb2Fkcy5tZXNvc3BoZXJlLmNvbS9tYXJhdGhvbi9hc3NldHMvaWNvbi1zZXJ2aWNlLW1hcmF0aG9uLWxhcmdlLnBuZyJ9fQ==",
|
||||
"DCOS_PACKAGE_NAME": "marathon",
|
||||
"DCOS_PACKAGE_REGISTRY_VERSION": "2.0",
|
||||
"DCOS_PACKAGE_RELEASE": "0",
|
||||
"DCOS_PACKAGE_REGISTRY_VERSION": "3.0",
|
||||
"DCOS_PACKAGE_RELEASE": "8",
|
||||
"DCOS_PACKAGE_SOURCE": "http://universe.marathon.mesos:8085/repo",
|
||||
"DCOS_PACKAGE_VERSION": "0.11.1"
|
||||
"DCOS_PACKAGE_VERSION": "1.4.1",
|
||||
"DCOS_SERVICE_NAME": "marathon-user",
|
||||
"DCOS_SERVICE_PORT_INDEX": "0",
|
||||
"DCOS_SERVICE_SCHEME": "http"
|
||||
},
|
||||
"mem": 1024,
|
||||
"mem": 1536,
|
||||
"ports": [
|
||||
0,
|
||||
0
|
||||
|
||||
@@ -1,321 +1,462 @@
|
||||
{
|
||||
"additionalProperties": false,
|
||||
"description": "Marathon DCOS Service properties",
|
||||
"properties": {
|
||||
"marathon": {
|
||||
"jvm": {
|
||||
"additionalProperties": false,
|
||||
"description": "Marathon specific configuration properties",
|
||||
"description": "JVM configuration properties",
|
||||
"properties": {
|
||||
"heap-max": {
|
||||
"default": 768,
|
||||
"description": "Memory (MB) max size for the JVM heap. This number should be less than the memory allocated to the Marathon instance (General rule: 50%).",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"heap-min": {
|
||||
"default": 256,
|
||||
"description": "Memory (MB) start size for the JVM heap. This number should be be less or equals than the heap-max.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"heap-min",
|
||||
"heap-max"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"marathon": {
|
||||
"additionalProperties": true,
|
||||
"description": "Marathon command line flags. These are the same flags that are passed through to Marathon when launching manually from the command line. See details here: https://mesosphere.github.io/marathon/docs/command-line-flags.html",
|
||||
"properties": {
|
||||
"access-control-allow-origin": {
|
||||
"description": "The origin(s) to allow in Marathon. Not set by default. Example values are \"'*'\", or \"http://localhost:8888,http://domain.com\"",
|
||||
"description": "The origin(s) to allow in Marathon. Not set by default. Example values are \"*\", or \"http://localhost:8888, http://domain.com\"",
|
||||
"type": "string"
|
||||
},
|
||||
"artifact-store": {
|
||||
"description": "URL to the artifact store. Examples: \"hdfs://localhost:54310/path/to/store\", \"file:///var/log/store\". For details, see the artifact store docs: https://mesosphere.github.io/marathon/docs/artifact-store.html.",
|
||||
"description": "URL to the artifact store. Supported store types hdfs, file. Example: hdfs://localhost:54310/path/to/store, file:///var/log/store",
|
||||
"type": "string"
|
||||
},
|
||||
"checkpoint": {
|
||||
"default": true,
|
||||
"description": "Enable checkpointing of tasks. Requires checkpointing enabled on slaves. Allows tasks to continue running during mesos-slave restarts and Marathon scheduler failover.",
|
||||
"description": "Enabled: (Default) Enable checkpointing of tasks. Requires checkpointing enabled on slaves. Allows tasks to continue running during mesos-slave restarts and upgrades Disabled: Disable checkpointing of tasks.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"cpus": {
|
||||
"default": 2.0,
|
||||
"description": "CPU shares to allocate to each Marathon instance.",
|
||||
"minimum": 0.0,
|
||||
"type": "number"
|
||||
},
|
||||
"decline-offer-duration": {
|
||||
"default": 5000,
|
||||
"description": "The duration (milliseconds) for which to decline offers by default",
|
||||
"minimum": 100,
|
||||
"default": 120000,
|
||||
"description": "(Default: 120 seconds) The duration (milliseconds) for which to decline offers by default",
|
||||
"type": "integer"
|
||||
},
|
||||
"default-accepted-resource-roles": {
|
||||
"default": "*",
|
||||
"description": "Default for the defaultAcceptedResourceRoles attribute of all app definitions as a comma-separated list of strings. This defaults to all roles for which this Marathon instance is configured to receive offers.",
|
||||
"type": "string"
|
||||
},
|
||||
"default-network-name": {
|
||||
"description": "Network name, injected into applications' ipAddress{} specs that do not define their own networkName.",
|
||||
"type": "string"
|
||||
},
|
||||
"disable-http": {
|
||||
"default": false,
|
||||
"description": "Disable listening for HTTP requests completely. HTTPS is unaffected.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"disable_metrics": {
|
||||
"default": false,
|
||||
"description": "Disable metric measurement of service method calls",
|
||||
"type": "boolean"
|
||||
},
|
||||
"enable-https": {
|
||||
"default": false,
|
||||
"description": "Enables the HTTPS protocol. Use in conjunction with ssl-keystore-path and ssl-keystore-password.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"enable-tracing": {
|
||||
"default": false,
|
||||
"description": "Enable trace logging of service method calls",
|
||||
"type": "boolean"
|
||||
"enable-features": {
|
||||
"default": "vips,task_killing",
|
||||
"description": "A comma-separated list of features. Available features are: secrets - Enable support for secrets in Marathon (experimental), external_volumes - Enable external volumes support in Marathon, vips - Enable networking VIPs UI, gpu_resources - Enable support for GPU in Marathon (experimental), task_killing - Enable the optional TASK_KILLING state, available in Mesos 0.28 and later",
|
||||
"type": "string"
|
||||
},
|
||||
"env-vars-prefix": {
|
||||
"default": "",
|
||||
"description": "Prefix to use for environment variables",
|
||||
"description": "Prefix to use for environment variables injected automatically into all started tasks.",
|
||||
"type": "string"
|
||||
},
|
||||
"event-stream-max-outstanding-messages": {
|
||||
"default": 50,
|
||||
"description": "The event stream buffers events, that are not already consumed by clients. This number defines the number of events that get buffered on the server side, before messages are dropped.",
|
||||
"minimum": 10,
|
||||
"type": "integer"
|
||||
},
|
||||
"event-subscriber": {
|
||||
"description": "Event subscriber module to enable. Currently the only valid value is \"http_callback\".",
|
||||
"description": "The event subscription module to use. E.g. http_callback.",
|
||||
"type": "string"
|
||||
},
|
||||
"executor": {
|
||||
"description": "Executor to use when none is specified.",
|
||||
"default": "//cmd",
|
||||
"description": "Executor to use when none is specified. If not defined the Mesos command executor is used by default.",
|
||||
"type": "string"
|
||||
},
|
||||
"failover-timeout": {
|
||||
"default": 604800,
|
||||
"description": "The failover_timeout for Mesos in seconds. If a new Marathon instance has not re-registered with Mesos this long after a failover, Mesos will shut down all running tasks started by Marathon. Requires checkpointing to be enabled.",
|
||||
"minimum": 0,
|
||||
"description": "(Default: 1 week) The failover_timeout for mesos in seconds.",
|
||||
"type": "integer"
|
||||
},
|
||||
"framework-name": {
|
||||
"default": "marathon-user",
|
||||
"description": "The framework name to register with Mesos.",
|
||||
"pattern": "^/?(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$",
|
||||
"description": "(Default: service.name) Framework name to register with Mesos.",
|
||||
"type": "string"
|
||||
},
|
||||
"ha": {
|
||||
"default": true,
|
||||
"description": "Runs Marathon in high-availability mode with leader election. Allows starting an arbitrary number of other Marathons but all need to be started in HA mode. This mode requires a running ZooKeeper.",
|
||||
"description": "Enabled: (Default) Run Marathon in HA mode with leader election. Allows starting an arbitrary number of other Marathons but all need to be started in HA mode. This mode requires a running ZooKeeper Disabled: Run Marathon in single node mode.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"hostname": {
|
||||
"description": "The advertised hostname that is used for the communication with the Mesos master. The value is also stored in the persistent store so another standby host can redirect to the elected leader.",
|
||||
"type": "string"
|
||||
},
|
||||
"http-address": {
|
||||
"description": "The address to listen on for HTTP requests",
|
||||
"type": "string"
|
||||
},
|
||||
"http-compression": {
|
||||
"default": true,
|
||||
"description": "Enabled: (Default) Enable http compression. Disabled: Disable http compression. ",
|
||||
"type": "boolean"
|
||||
},
|
||||
"http-credentials": {
|
||||
"description": "Credentials for accessing the HTTP service in the format of username:password. The username may not contain a colon (:).",
|
||||
"description": "Credentials for accessing the http service. If empty, anyone can access the HTTP endpoint. A username:password pair is expected where the username must not contain ':'. May also be specified with the `MESOSPHERE_HTTP_CREDENTIALS` environment variable. ",
|
||||
"type": "string"
|
||||
},
|
||||
"http-endpoints": {
|
||||
"description": "Pre-configured http callback URLs. Valid only in conjunction with --event_subscriber http_callback. Additional callback URLs may also be set dynamically via the REST API.",
|
||||
"description": "The URLs of the event endpoints added to the current list of subscribers on startup. You can manage this list during runtime by using the /v2/eventSubscriptions API endpoint.",
|
||||
"type": "string"
|
||||
},
|
||||
"http-event-callback-slow-consumer-timeout": {
|
||||
"default": 10000,
|
||||
"description": "A http event callback consumer is considered slow, if the delivery takes longer than this timeout (ms)",
|
||||
"type": "integer"
|
||||
},
|
||||
"http-event-request-timeout": {
|
||||
"default": 10000,
|
||||
"description": "A http event request timeout (ms)",
|
||||
"type": "integer"
|
||||
},
|
||||
"http-max-concurrent-requests": {
|
||||
"description": "The number of concurrent http requests, that are allowed before rejecting.",
|
||||
"minimum": 1,
|
||||
"description": "The number of concurrent HTTP requests that are allowed before rejecting.",
|
||||
"type": "integer"
|
||||
},
|
||||
"http-port": {
|
||||
"default": 0,
|
||||
"description": "The port on which to listen for HTTP requests.",
|
||||
"minimum": 0,
|
||||
"description": "The port to listen on for HTTP requests",
|
||||
"type": "integer"
|
||||
},
|
||||
"http-realm": {
|
||||
"default": "Mesosphere",
|
||||
"description": "The security realm (aka 'area') associated with the credentials",
|
||||
"type": "string"
|
||||
},
|
||||
"https-address": {
|
||||
"description": "The address to listen on for HTTPS requests.",
|
||||
"type": "string"
|
||||
},
|
||||
"https-port": {
|
||||
"default": 0,
|
||||
"description": "The port on which to listen for HTTPS requests.",
|
||||
"minimum": 0,
|
||||
"description": "The port to listen on for HTTPS requests",
|
||||
"type": "integer"
|
||||
},
|
||||
"launch-token-refresh-interval": {
|
||||
"default": 30000,
|
||||
"description": "The interval (ms) in which to refresh the launch tokens to --launch_token_count",
|
||||
"type": "integer"
|
||||
},
|
||||
"launch-tokens": {
|
||||
"default": 100,
|
||||
"description": "Launch tokens per interval",
|
||||
"type": "integer"
|
||||
},
|
||||
"leader-proxy-connection-timeout": {
|
||||
"default": 5000,
|
||||
"description": "Maximum time, in milliseconds, to wait for connecting to the current Marathon leader from another Marathon instance.",
|
||||
"type": "integer"
|
||||
},
|
||||
"leader-proxy-read-timeout": {
|
||||
"default": 10000,
|
||||
"description": "Maximum time, in milliseconds, for reading from the current Marathon leader.",
|
||||
"type": "integer"
|
||||
},
|
||||
"leader-proxy-ssl-ignore-hostname": {
|
||||
"default": false,
|
||||
"description": "Do not verify that the hostname of the Marathon leader matches the one in the SSL certificate when proxying API requests to the current leader.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"local-port-max": {
|
||||
"default": 20000,
|
||||
"description": "Max port number to use when assigning globally unique service ports to apps.",
|
||||
"type": "integer"
|
||||
},
|
||||
"local-port-min": {
|
||||
"default": 10000,
|
||||
"description": "Min port number to use when assigning globally unique service ports to apps.",
|
||||
"type": "integer"
|
||||
},
|
||||
"logging-level": {
|
||||
"description": "Set logging level to one of: off, error, warn, info, debug, trace, all",
|
||||
"type": "string"
|
||||
},
|
||||
"logstash": {
|
||||
"description": "Logs destination URI in format (udp|tcp|ssl)://<host>:<port>",
|
||||
"type": "string"
|
||||
},
|
||||
"marathon-store-timeout": {
|
||||
"description": "(deprecated) Maximum time, in milliseconds, to wait for persistent storage operations to complete. This option is no longer used and will be removed in a later release.",
|
||||
"type": "integer"
|
||||
},
|
||||
"master": {
|
||||
"default": "zk://master.mesos:2181/mesos",
|
||||
"description": "The URL of the Mesos master",
|
||||
"type": "string"
|
||||
},
|
||||
"max-apps": {
|
||||
"description": "The maximum number of applications that may be created.",
|
||||
"type": "integer"
|
||||
},
|
||||
"max-tasks-per-offer": {
|
||||
"default": 1,
|
||||
"description": "Maximum tasks per offer. Do not start more than this number of tasks on a single offer.",
|
||||
"type": "integer"
|
||||
},
|
||||
"mesos-authentication": {
|
||||
"default": false,
|
||||
"description": "Enabled: Will use framework authentication while registering with Mesos with principal and optional secret. Disabled: (Default) will not use framework authentication while registering with Mesos.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"mesos-authentication-principal": {
|
||||
"description": "(Default: service.name) Mesos Authentication Principal.",
|
||||
"type": "string"
|
||||
},
|
||||
"mesos-authentication-secret": {
|
||||
"description": "Mesos Authentication Secret.",
|
||||
"type": "string"
|
||||
},
|
||||
"mesos-authentication-secret-file": {
|
||||
"description": "Path to a file containing the Mesos Authentication Secret.",
|
||||
"type": "string"
|
||||
},
|
||||
"mesos-leader-ui-url": {
|
||||
"default": "/mesos",
|
||||
"description": "The host and port (e.g. \"http://mesos_host:5050\") of the Mesos master.",
|
||||
"type": "string"
|
||||
},
|
||||
"mesos-role": {
|
||||
"description": "(Default: service.name) Mesos role for this framework. If set, Marathon receives resource offers for the specified role in addition to resources with the role designation '*'.",
|
||||
"type": "string"
|
||||
},
|
||||
"mesos-user": {
|
||||
"description": "Mesos user for this framework.",
|
||||
"type": "string"
|
||||
},
|
||||
"metrics": {
|
||||
"default": true,
|
||||
"description": "Enabled: (Default) Expose the execution time of service method calls using code instrumentation via the metrics endpoint (/metrics). This might noticeably degrade performance but can help finding performance problems. Disabled: Disable exposing execution time of service method calls using code instrumentation via the metrics endpoing (/metrics). This does not turn off reporting of other metrics.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"min-revive-offers-interval": {
|
||||
"default": 5000,
|
||||
"description": "Do not ask for all offers (also already seen ones) more often than this interval (ms).",
|
||||
"type": "integer"
|
||||
},
|
||||
"offer-matching-timeout": {
|
||||
"default": 1000,
|
||||
"description": "Offer matching timeout (ms). Stop trying to match additional tasks for this offer after this time.",
|
||||
"type": "integer"
|
||||
},
|
||||
"on-elected-prepare-timeout": {
|
||||
"default": 180000,
|
||||
"description": "The timeout for preparing the Marathon instance when elected as leader.",
|
||||
"type": "integer"
|
||||
},
|
||||
"plugin-conf": {
|
||||
"description": "The plugin configuration file.",
|
||||
"type": "string"
|
||||
},
|
||||
"plugin-dir": {
|
||||
"description": "Path to a local directory containing plugin jars.",
|
||||
"type": "string"
|
||||
},
|
||||
"reconciliation-initial-delay": {
|
||||
"default": 15000,
|
||||
"description": "This is the length of time, in milliseconds, before Marathon begins to periodically perform task reconciliation operations",
|
||||
"type": "integer"
|
||||
},
|
||||
"reconciliation-interval": {
|
||||
"default": 600000,
|
||||
"description": "This is the length of time, in milliseconds, between task reconciliation operations.",
|
||||
"type": "integer"
|
||||
},
|
||||
"reporter-datadog": {
|
||||
"description": "URL to dogstatsd agent. e.g. udp://localhost:8125?prefix=marathon-test&tags=marathon&interval=10",
|
||||
"type": "string"
|
||||
},
|
||||
"reporter-graphite": {
|
||||
"description": "URL to graphite agent. e.g. tcp://localhost:2003?prefix=marathon-test&interval=10",
|
||||
"type": "string"
|
||||
},
|
||||
"revive-offers-repetitions": {
|
||||
"default": 3,
|
||||
"description": "Repeat every reviveOffer request this many times, delayed by the --min_revive_offers_interval.",
|
||||
"type": "integer"
|
||||
},
|
||||
"save-tasks-to-launch-timeout": {
|
||||
"default": 3000,
|
||||
"description": "Timeout (ms) after matching an offer for saving all matched tasks that we are about to launch. When reaching the timeout, only the tasks that we could save within the timeout are also launched. All other task launches are temporarily rejected and retried later.",
|
||||
"type": "integer"
|
||||
},
|
||||
"scale-apps-initial-delay": {
|
||||
"default": 15000,
|
||||
"description": "This is the length of time, in milliseconds, before Marathon begins to periodically attempt to scale apps.",
|
||||
"type": "integer"
|
||||
},
|
||||
"scale-apps-interval": {
|
||||
"default": 300000,
|
||||
"description": "This is the length of time, in milliseconds, between task scale apps.",
|
||||
"type": "integer"
|
||||
},
|
||||
"sentry": {
|
||||
"description": "URI for sentry, e.g. https://<public>:<private>@sentryserver/",
|
||||
"type": "string"
|
||||
},
|
||||
"sentry-tags": {
|
||||
"description": "Tags to post to sentry with, e.g: tag1:value1,tag2:value2",
|
||||
"type": "string"
|
||||
},
|
||||
"ssl-keystore-password": {
|
||||
"description": "Password for the keystore supplied with the `ssl_keystore_path` option. Required if `ssl_keystore_path` is supplied. May also be specified with the `MESOSPHERE_KEYSTORE_PASS` environment variable.",
|
||||
"type": "string"
|
||||
},
|
||||
"ssl-keystore-path": {
|
||||
"description": "Path to the SSL keystore. HTTPS (SSL) will be enabled if this option is supplied. Requires `--ssl_keystore_password`. May also be specified with the `MESOSPHERE_KEYSTORE_PATH` environment variable.",
|
||||
"type": "string"
|
||||
},
|
||||
"store-cache": {
|
||||
"default": true,
|
||||
"description": "Enabled: (Default) Enable an in-memory cache for the storage layer. Disabled: Disable the in-memory cache for the storage layer. ",
|
||||
"type": "boolean"
|
||||
},
|
||||
"task-launch-confirm-timeout": {
|
||||
"default": 300000,
|
||||
"description": "Time, in milliseconds, to wait for a task to enter the TASK_STAGING state before killing it.",
|
||||
"type": "integer"
|
||||
},
|
||||
"task-launch-timeout": {
|
||||
"default": 300000,
|
||||
"description": "Time, in milliseconds, to wait for a task to enter the TASK_RUNNING state before killing it.",
|
||||
"type": "integer"
|
||||
},
|
||||
"task-lost-expunge-gc": {
|
||||
"default": 75000,
|
||||
"description": "This is the length of time in milliseconds, until a lost task is garbage collected and expunged from the task tracker and task repository.",
|
||||
"type": "integer"
|
||||
},
|
||||
"task-lost-expunge-initial-delay": {
|
||||
"default": 300000,
|
||||
"description": "This is the length of time, in milliseconds, before Marathon begins to periodically perform task expunge gc operations",
|
||||
"type": "integer"
|
||||
},
|
||||
"task-lost-expunge-interval": {
|
||||
"default": 30000,
|
||||
"description": "This is the length of time in milliseconds, for lost task gc operations.",
|
||||
"type": "integer"
|
||||
},
|
||||
"task-reservation-timeout": {
|
||||
"default": 20000,
|
||||
"description": "Time, in milliseconds, to wait for a new reservation to be acknowledged via a received offer before deleting it.",
|
||||
"type": "integer"
|
||||
},
|
||||
"tracing": {
|
||||
"default": false,
|
||||
"description": "Enabled: Enable trace logging of service method calls. Disabled: (Default) Disable trace logging of service method calls.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"webui-url": {
|
||||
"description": "The HTTP(S) url of the web ui, defaulting to the advertised hostname.",
|
||||
"type": "string"
|
||||
},
|
||||
"zk": {
|
||||
"description": "ZooKeeper URL for storing state. Format: zk://host1:port1,host2:port2,.../path",
|
||||
"type": "string"
|
||||
},
|
||||
"zk-compression": {
|
||||
"default": true,
|
||||
"description": "Enabled: (Default) Enable compression of zk nodes, if the size of the node is bigger than the configured threshold. Disabled: Disable compression of zk nodes",
|
||||
"type": "boolean"
|
||||
},
|
||||
"zk-compression-threshold": {
|
||||
"default": 65536,
|
||||
"description": "(Default: 64 KB) Threshold in bytes, when compression is applied to the ZooKeeper node.",
|
||||
"type": "integer"
|
||||
},
|
||||
"zk-max-node-size": {
|
||||
"default": 1024000,
|
||||
"description": "(Default: 1 MiB) Maximum allowed ZooKeeper node size (in bytes).",
|
||||
"type": "integer"
|
||||
},
|
||||
"zk-max-versions": {
|
||||
"default": 25,
|
||||
"description": "Limit the number of versions, stored for one entity.",
|
||||
"type": "integer"
|
||||
},
|
||||
"zk-session-timeout": {
|
||||
"default": 10000,
|
||||
"description": "The timeout for ZooKeeper sessions in milliseconds",
|
||||
"type": "integer"
|
||||
},
|
||||
"zk-timeout": {
|
||||
"default": 10000,
|
||||
"description": "The timeout for ZooKeeper in milliseconds.",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"master"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"service": {
|
||||
"additionalProperties": false,
|
||||
"description": "Marathon app configuration properties.",
|
||||
"properties": {
|
||||
"cpus": {
|
||||
"default": 2,
|
||||
"description": "CPU shares to allocate to each Marathon instance.",
|
||||
"minimum": 0,
|
||||
"type": "number"
|
||||
},
|
||||
"instances": {
|
||||
"default": 1,
|
||||
"description": "Number of Marathon instances to run.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"jvm-heap-max": {
|
||||
"default": 768,
|
||||
"description": "Memory (MB) max size for the JVM heap. This number should be be less than the absolute memory.",
|
||||
"minimum": 0,
|
||||
"type": "number"
|
||||
},
|
||||
"jvm-heap-min": {
|
||||
"default": 256,
|
||||
"description": "Memory (MB) start size for the JVM heap. This number should be be less or equals than the jvm-heap-max.",
|
||||
"minimum": 0,
|
||||
"type": "number"
|
||||
},
|
||||
"leader-proxy-connection-timeout": {
|
||||
"default": 5000,
|
||||
"description": "Maximum time, in milliseconds, to wait for connecting to the current Marathon leader from another Marathon instance.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"leader-proxy-read-timeout": {
|
||||
"default": 10000,
|
||||
"description": "Maximum time, in milliseconds, for reading from the current Marathon leader.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"local-port-max": {
|
||||
"default": 20000,
|
||||
"description": "Maximum port number to use when assigning service ports to apps.",
|
||||
"maximum": 65535,
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"local-port-min": {
|
||||
"default": 10000,
|
||||
"description": "Minimum port number to use when assigning service ports to apps.",
|
||||
"maximum": 65535,
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"marathon-store-timeout": {
|
||||
"default": 2000,
|
||||
"description": "Maximum time in milliseconds, to wait for persistent storage operations to complete.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"max-apps": {
|
||||
"description": "The maximum number of applications that may be created.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"max-tasks-per-offer": {
|
||||
"default": 1,
|
||||
"description": "Maximally launch this number of tasks per offer.",
|
||||
"minimum": 1,
|
||||
"type": "integer"
|
||||
},
|
||||
"max-tasks-per-offer-cycle": {
|
||||
"default": 1000,
|
||||
"description": "Maximally launch this number of tasks per offer cycle.",
|
||||
"minimum": 1,
|
||||
"type": "integer"
|
||||
},
|
||||
"mem": {
|
||||
"default": 1024.0,
|
||||
"description": "Memory (MB) to allocate to each Marathon task.",
|
||||
"minimum": 512.0,
|
||||
"default": 1536,
|
||||
"description": "Memory (MB) to allocate to each Marathon instance.",
|
||||
"minimum": 512,
|
||||
"type": "number"
|
||||
},
|
||||
"mesos-authentication-principal": {
|
||||
"description": "The Mesos principal used for authentication.",
|
||||
"type": "string"
|
||||
},
|
||||
"mesos-authentication-secret-file": {
|
||||
"description": "The path to the Mesos secret file containing the authentication secret.",
|
||||
"type": "string"
|
||||
},
|
||||
"mesos-leader-ui-url": {
|
||||
"default": "/mesos",
|
||||
"description": "The host and port (e.g. http://mesos_host:5050) of the Mesos master.",
|
||||
"type": "string"
|
||||
},
|
||||
"mesos-role": {
|
||||
"description": "Mesos role for this framework.",
|
||||
"type": "string"
|
||||
},
|
||||
"min-revive-offers-interval": {
|
||||
"default": 5000,
|
||||
"description": "Do not ask for all offers (also already seen ones) more often than this interval (ms).",
|
||||
"minimum": 200,
|
||||
"type": "integer"
|
||||
},
|
||||
"reconciliation-initial-delay": {
|
||||
"description": "The delay, in milliseconds, before Marathon begins to periodically perform task reconciliation operations.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"reconciliation-interval": {
|
||||
"description": "The period, in milliseconds, between task reconciliation operations.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"revive-offers-for-new-apps": {
|
||||
"default": true,
|
||||
"description": "Whether to call reviveOffers for new or changed apps.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"scale-apps-initial-delay": {
|
||||
"default": 15000,
|
||||
"description": "This is the length of time, in milliseconds, before Marathon begins to periodically attempt to scale apps",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"scale-apps-interval": {
|
||||
"default": 300000,
|
||||
"description": "This is the length of time, in milliseconds, between task scale apps.",
|
||||
"minimum": 1000,
|
||||
"type": "integer"
|
||||
},
|
||||
"ssl-keystore-password": {
|
||||
"description": "Password for the keystore supplied with the marathon/ssl-keystore-path option.",
|
||||
"type": "string"
|
||||
},
|
||||
"ssl-keystore-path": {
|
||||
"description": "Path to the SSL keystore. SSL will be enabled if this option is supplied. The keystore can be downloaded into Marathon's working directory by using the uris property.",
|
||||
"name": {
|
||||
"default": "marathon-user",
|
||||
"description": "The ID of this Marathon service inside DCOS base Marathon.",
|
||||
"pattern": "^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$",
|
||||
"type": "string"
|
||||
},
|
||||
"uris": {
|
||||
"default": [],
|
||||
"description": "List of URIs that will be download and made available in the current working directory of Marathon. For example this can be used to download a Java keystore file for SSL configuration.",
|
||||
"description": "List of URIs that will be downloaded and made available in the current working directory of Marathon. For example this can be used to download a Java keystore file for SSL configuration.",
|
||||
"items": {
|
||||
"pattern": "^[\\s]+",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"zk": {
|
||||
"default": "zk://master.mesos:2181/universe",
|
||||
"description": "Parent ZooKeeper URL for storing state. The framework name is joined to the path of this value. Format: zk://host1:port1,host2:port2,.../path",
|
||||
"type": "string"
|
||||
},
|
||||
"zk-compression": {
|
||||
"default": true,
|
||||
"description": "Enable compression of zk nodes, if the size of the node is bigger than the configured threshold.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"zk-compression-threshold": {
|
||||
"default": 65536,
|
||||
"description": "Threshold in bytes, when compression is applied to the zk node (Default: 64 KB).",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"zk-max-versions": {
|
||||
"description": "Limit the number of versions stored for one entity.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"zk-session-timeout": {
|
||||
"default": 1800000,
|
||||
"description": "The timeout for zookeeper sessions in milliseconds.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"zk-timeout": {
|
||||
"description": "Timeout for ZooKeeper in milliseconds.",
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"cpus",
|
||||
"framework-name",
|
||||
"http-port",
|
||||
"instances",
|
||||
"mem",
|
||||
"uris",
|
||||
"zk"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"mesos": {
|
||||
"description": "Mesos specific configuration properties",
|
||||
"properties": {
|
||||
"master": {
|
||||
"default": "zk://master.mesos:2181/mesos",
|
||||
"description": "The URL of the Mesos master. The format is a comma-delimited list of hosts like zk://host1:port,host2:port/mesos. If using ZooKeeper, pay particular attention to the leading zk:// and trailing /mesos! If not using ZooKeeper, standard host:port patterns, like localhost:5050 or 10.0.0.5:5050,10.0.0.6:5050, are also acceptable.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"master"
|
||||
"instances"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"marathon",
|
||||
"mesos"
|
||||
"service",
|
||||
"jvm",
|
||||
"marathon"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"description": "A cluster-wide init and control system for services in cgroups or Docker containers.",
|
||||
"description": "A container orchestration platform for Mesos and DCOS.",
|
||||
"framework": true,
|
||||
"licenses": [
|
||||
{
|
||||
@@ -8,16 +8,17 @@
|
||||
}
|
||||
],
|
||||
"maintainer": "support@mesosphere.io",
|
||||
"minDcosReleaseVersion": "1.8",
|
||||
"name": "marathon",
|
||||
"packagingVersion": "2.0",
|
||||
"postInstallNotes": "Marathon DCOS Service has been successfully installed!\n\n\tDocumentation: https://mesosphere.github.io/marathon\n\tIssues: https:/github.com/mesosphere/marathon/issues\n",
|
||||
"packagingVersion": "3.0",
|
||||
"postInstallNotes": "Marathon DCOS Service has been successfully installed!\n\n\tDocumentation: https://mesosphere.github.io/marathon\n\tIssues: https://github.com/mesosphere/marathon/issues\n",
|
||||
"postUninstallNotes": "The Marathon DCOS Service has been uninstalled and will no longer run.\nPlease follow the instructions at http://docs.mesosphere.com/services/marathon/#uninstall to clean up any persisted state",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 2 CPU's and 1GB of RAM available for the Marathon Service.",
|
||||
"selected": false,
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 2 CPU shares and 1GB of RAM available for the Marathon DCOS Service.",
|
||||
"scm": "https://github.com/mesosphere/marathon.git",
|
||||
"selected": true,
|
||||
"tags": [
|
||||
"init",
|
||||
"long-running"
|
||||
],
|
||||
"version": "0.11.1"
|
||||
"version": "1.3.10"
|
||||
}
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
"name": "chronos",
|
||||
"packagingVersion": "2.0",
|
||||
"postInstallNotes": "Chronos DCOS Service has been successfully installed!\n\n\tDocumentation: http://mesos.github.io/chronos\n\tIssues: https://github.com/mesos/chronos/issues",
|
||||
"postUninstallNotes": "The Chronos DCOS Service has been uninstalled and will no longer run.\nPlease follow the instructions at http://docs.mesosphere.com/services/chronos/#uninstall to clean up any persisted state",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 1 CPU and 2GB of RAM available for the Chronos Service.",
|
||||
"postUninstallNotes": "The Chronos DCOS Service has been uninstalled and will no longer run.\nPlease follow the instructions at https://docs.mesosphere.com/current/usage/service-guides/chronos/#uninstall to clean up any persisted state.",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 2 CPUs and 2.5GiB of RAM available for the Chronos Service.",
|
||||
"scm": "https://github.com/mesos/chronos.git",
|
||||
"selected": false,
|
||||
"tags": [
|
||||
@@ -24,6 +24,6 @@
|
||||
"analytics",
|
||||
"batch"
|
||||
],
|
||||
"version": "2.4.0"
|
||||
"version": "3.0.1"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
"name": "chronos",
|
||||
"packagingVersion": "2.0",
|
||||
"postInstallNotes": "Chronos DCOS Service has been successfully installed!\n\n\tDocumentation: http://mesos.github.io/chronos\n\tIssues: https://github.com/mesos/chronos/issues",
|
||||
"postUninstallNotes": "The Chronos DCOS Service has been uninstalled and will no longer run.\nPlease follow the instructions at http://docs.mesosphere.com/services/chronos/#uninstall to clean up any persisted state",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 1 CPU and 2GB of RAM available for the Chronos Service.",
|
||||
"postUninstallNotes": "The Chronos DCOS Service has been uninstalled and will no longer run.\nPlease follow the instructions at https://docs.mesosphere.com/current/usage/service-guides/chronos/#uninstall to clean up any persisted state.",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 2 CPUs and 2.5GiB of RAM available for the Chronos Service.",
|
||||
"scm": "https://github.com/mesos/chronos.git",
|
||||
"selected": false,
|
||||
"tags": [
|
||||
@@ -25,6 +25,6 @@
|
||||
"analytics",
|
||||
"batch"
|
||||
],
|
||||
"version": "2.4.0"
|
||||
"version": "3.0.1"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
"name": "chronos",
|
||||
"packagingVersion": "2.0",
|
||||
"postInstallNotes": "Chronos DCOS Service has been successfully installed!\n\n\tDocumentation: http://mesos.github.io/chronos\n\tIssues: https://github.com/mesos/chronos/issues",
|
||||
"postUninstallNotes": "The Chronos DCOS Service has been uninstalled and will no longer run.\nPlease follow the instructions at http://docs.mesosphere.com/services/chronos/#uninstall to clean up any persisted state",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 1 CPU and 2GB of RAM available for the Chronos Service.",
|
||||
"postUninstallNotes": "The Chronos DCOS Service has been uninstalled and will no longer run.\nPlease follow the instructions at https://docs.mesosphere.com/current/usage/service-guides/chronos/#uninstall to clean up any persisted state.",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 2 CPUs and 2.5GiB of RAM available for the Chronos Service.",
|
||||
"scm": "https://github.com/mesos/chronos.git",
|
||||
"selected": false,
|
||||
"tags": [
|
||||
@@ -24,6 +24,6 @@
|
||||
"analytics",
|
||||
"batch"
|
||||
],
|
||||
"version": "2.4.0"
|
||||
"version": "3.0.1"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
"name": "chronos",
|
||||
"packagingVersion": "2.0",
|
||||
"postInstallNotes": "Chronos DCOS Service has been successfully installed!\n\n\tDocumentation: http://mesos.github.io/chronos\n\tIssues: https://github.com/mesos/chronos/issues",
|
||||
"postUninstallNotes": "The Chronos DCOS Service has been uninstalled and will no longer run.\nPlease follow the instructions at http://docs.mesosphere.com/services/chronos/#uninstall to clean up any persisted state",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 1 CPU and 2GB of RAM available for the Chronos Service.",
|
||||
"postUninstallNotes": "The Chronos DCOS Service has been uninstalled and will no longer run.\nPlease follow the instructions at https://docs.mesosphere.com/current/usage/service-guides/chronos/#uninstall to clean up any persisted state.",
|
||||
"preInstallNotes": "We recommend a minimum of one node with at least 2 CPUs and 2.5GiB of RAM available for the Chronos Service.",
|
||||
"scm": "https://github.com/mesos/chronos.git",
|
||||
"selected": false,
|
||||
"tags": [
|
||||
@@ -24,6 +24,6 @@
|
||||
"analytics",
|
||||
"batch"
|
||||
],
|
||||
"version": "2.4.0"
|
||||
"version": "3.0.1"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"framework": false,
|
||||
"maintainer": "support@mesosphere.io",
|
||||
"name": "helloworld",
|
||||
"packagingVersion": "2.0",
|
||||
"packagingVersion": "3.0",
|
||||
"postInstallNotes": "A sample post-installation message",
|
||||
"preInstallNotes": "A sample pre-installation message",
|
||||
"selected": false,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"framework": false,
|
||||
"maintainer": "support@mesosphere.io",
|
||||
"name": "helloworld",
|
||||
"packagingVersion": "2.0",
|
||||
"packagingVersion": "3.0",
|
||||
"postInstallNotes": "A sample post-installation message",
|
||||
"preInstallNotes": "A sample pre-installation message",
|
||||
"selected": false,
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
{
|
||||
"name": "test-universe",
|
||||
"uri": "http://universe.marathon.mesos:8085/repo"
|
||||
},
|
||||
{
|
||||
"name": "helloworld-universe",
|
||||
"uri": "http://helloworld-universe.marathon.mesos:8086/repo"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -26,14 +26,14 @@
|
||||
"containerPort": 80
|
||||
}
|
||||
],
|
||||
"image": "mesosphere/universe-server:20161006T215648Z-cli-test-v3-941b817f88",
|
||||
"image": "mesosphere/universe-server:20170326T170201Z-version-3.x-34bf4c095b",
|
||||
"network": "BRIDGE"
|
||||
},
|
||||
"type": "DOCKER"
|
||||
},
|
||||
"requirePorts": true,
|
||||
"mem": 128,
|
||||
"cpus": 0.25,
|
||||
"cpus": 0.1,
|
||||
"instances": 1,
|
||||
"id": "/universe"
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ def delete_zk_nodes():
|
||||
:rtype: None
|
||||
"""
|
||||
|
||||
for znode in ['universe', 'cassandra-mesos', 'chronos']:
|
||||
for znode in ['universe', 'dcos-service-cassandra', 'chronos']:
|
||||
delete_zk_node(znode)
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import collections
|
||||
import contextlib
|
||||
import time
|
||||
|
||||
@@ -34,19 +35,28 @@ def package(package_name, deploy=False, args=[]):
|
||||
|
||||
|
||||
UNIVERSE_REPO = "https://universe.mesosphere.com/repo"
|
||||
UNIVERSE_TEST_REPO = "http://universe.marathon.mesos:8085/repo"
|
||||
UNIVERSE_TEST_REPOS = collections.OrderedDict(
|
||||
[
|
||||
("test-universe", "http://universe.marathon.mesos:8085/repo"),
|
||||
(
|
||||
"helloworld-universe",
|
||||
"http://helloworld-universe.marathon.mesos:8086/repo"
|
||||
)
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def setup_universe_server():
|
||||
# add universe-server with static packages
|
||||
# add both Unvierse servers with static packages
|
||||
add_app('tests/data/universe-v3-stub.json', True)
|
||||
add_app('tests/data/helloworld-v3-stub.json', True)
|
||||
|
||||
assert_command(
|
||||
['dcos', 'package', 'repo', 'remove', 'Universe'])
|
||||
|
||||
assert_command(
|
||||
['dcos', 'package', 'repo', 'add', 'test-universe', UNIVERSE_TEST_REPO]
|
||||
)
|
||||
# Add the two test repos to Cosmos
|
||||
for name, url in UNIVERSE_TEST_REPOS.items():
|
||||
assert_command(['dcos', 'package', 'repo', 'add', name, url])
|
||||
|
||||
watch_all_deployments()
|
||||
# Give the test universe some time to become available
|
||||
@@ -65,12 +75,21 @@ def setup_universe_server():
|
||||
|
||||
|
||||
def teardown_universe_server():
|
||||
assert_command(
|
||||
['dcos', 'package', 'repo', 'remove', 'test-universe'])
|
||||
# Remove the test Universe repos from Cosmos
|
||||
for name, url in UNIVERSE_TEST_REPOS.items():
|
||||
assert_command(['dcos', 'package', 'repo', 'remove', name])
|
||||
|
||||
assert_command(
|
||||
['dcos', 'package', 'repo', 'add', 'Universe', UNIVERSE_REPO])
|
||||
|
||||
# Remove the Marathon tasks running our two test Universe
|
||||
assert_command(
|
||||
['dcos', 'marathon', 'app', 'remove', '/universe', '--force'])
|
||||
assert_command(
|
||||
['dcos', 'marathon', 'app', 'remove', '/helloworld-universe',
|
||||
'--force']
|
||||
)
|
||||
|
||||
watch_all_deployments()
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ from .helpers.common import (assert_command, assert_lines, base64_to_dict,
|
||||
from .helpers.marathon import watch_all_deployments
|
||||
from .helpers.package import (package_install, package_uninstall,
|
||||
setup_universe_server, teardown_universe_server,
|
||||
UNIVERSE_REPO, UNIVERSE_TEST_REPO)
|
||||
UNIVERSE_REPO, UNIVERSE_TEST_REPOS)
|
||||
from .helpers.service import get_services, service_shutdown
|
||||
from ..common import file_bytes
|
||||
|
||||
@@ -69,13 +69,24 @@ def test_version():
|
||||
|
||||
def test_repo_list():
|
||||
repo_list = bytes(
|
||||
"test-universe: {}\n".format(UNIVERSE_TEST_REPO), 'utf-8')
|
||||
(
|
||||
"test-universe: {test-universe}\n"
|
||||
"helloworld-universe: {helloworld-universe}\n"
|
||||
).format(**UNIVERSE_TEST_REPOS),
|
||||
'utf-8'
|
||||
)
|
||||
assert_command(['dcos', 'package', 'repo', 'list'], stdout=repo_list)
|
||||
|
||||
|
||||
def test_repo_add():
|
||||
repo_list = bytes("test-universe: {}\nUniverse: {}\n".format(
|
||||
UNIVERSE_TEST_REPO, UNIVERSE_REPO), 'utf-8')
|
||||
repo_list = bytes(
|
||||
(
|
||||
"test-universe: {test-universe}\n"
|
||||
"helloworld-universe: {helloworld-universe}\n"
|
||||
"Universe: {0}\n"
|
||||
).format(UNIVERSE_REPO, **UNIVERSE_TEST_REPOS),
|
||||
'utf-8'
|
||||
)
|
||||
|
||||
args = ["Universe", UNIVERSE_REPO]
|
||||
_repo_add(args, repo_list)
|
||||
@@ -84,46 +95,80 @@ def test_repo_add():
|
||||
def test_repo_add_index():
|
||||
repo17 = "http://universe.mesosphere.com/repo-1.7"
|
||||
repo_list = bytes(
|
||||
"test-universe: {}\n1.7-universe: {}\nUniverse: {}\n".format(
|
||||
UNIVERSE_TEST_REPO, repo17, UNIVERSE_REPO), 'utf-8')
|
||||
(
|
||||
"test-universe: {test-universe}\n"
|
||||
"1.7-universe: {0}\n"
|
||||
"helloworld-universe: {helloworld-universe}\n"
|
||||
"Universe: {1}\n"
|
||||
).format(repo17, UNIVERSE_REPO, **UNIVERSE_TEST_REPOS),
|
||||
'utf-8'
|
||||
)
|
||||
|
||||
args = ["1.7-universe", repo17, '--index=1']
|
||||
_repo_add(args, repo_list)
|
||||
|
||||
|
||||
def test_repo_remove():
|
||||
repo_list = bytes("test-universe: {}\nUniverse: {}\n".format(
|
||||
UNIVERSE_TEST_REPO, UNIVERSE_REPO), 'utf-8')
|
||||
repo_list = bytes(
|
||||
(
|
||||
"test-universe: {test-universe}\n"
|
||||
"helloworld-universe: {helloworld-universe}\n"
|
||||
"Universe: {0}\n"
|
||||
).format(UNIVERSE_REPO, **UNIVERSE_TEST_REPOS),
|
||||
'utf-8'
|
||||
)
|
||||
_repo_remove(['1.7-universe'], repo_list)
|
||||
|
||||
repo_list = bytes(
|
||||
"test-universe: {}\n".format(UNIVERSE_TEST_REPO), 'utf-8')
|
||||
(
|
||||
"test-universe: {test-universe}\n"
|
||||
"helloworld-universe: {helloworld-universe}\n"
|
||||
).format(**UNIVERSE_TEST_REPOS),
|
||||
'utf-8'
|
||||
)
|
||||
_repo_remove(['Universe'], repo_list)
|
||||
|
||||
|
||||
def test_repo_remove_multi():
|
||||
# Add "Universe" repo so we can test removing it
|
||||
repo_list = bytes("test-universe: {}\nUniverse: {}\n".format(
|
||||
UNIVERSE_TEST_REPO, UNIVERSE_REPO), 'utf-8')
|
||||
repo_list = bytes(
|
||||
(
|
||||
"test-universe: {test-universe}\n"
|
||||
"helloworld-universe: {helloworld-universe}\n"
|
||||
"Universe: {0}\n"
|
||||
).format(UNIVERSE_REPO, **UNIVERSE_TEST_REPOS),
|
||||
'utf-8'
|
||||
)
|
||||
args = ["Universe", UNIVERSE_REPO]
|
||||
_repo_add(args, repo_list)
|
||||
|
||||
# Add "1.7-universe" repo so we can test removing it
|
||||
repo17 = "http://universe.mesosphere.com/repo-1.7"
|
||||
repo_list = bytes(
|
||||
"test-universe: {}\n1.7-universe: {}\nUniverse: {}\n".format(
|
||||
UNIVERSE_TEST_REPO, repo17, UNIVERSE_REPO), 'utf-8')
|
||||
(
|
||||
"test-universe: {test-universe}\n"
|
||||
"1.7-universe: {1}\n"
|
||||
"helloworld-universe: {helloworld-universe}\n"
|
||||
"Universe: {0}\n"
|
||||
).format(UNIVERSE_REPO, repo17, **UNIVERSE_TEST_REPOS),
|
||||
'utf-8'
|
||||
)
|
||||
args = ["1.7-universe", repo17, '--index=1']
|
||||
_repo_add(args, repo_list)
|
||||
|
||||
repo_list = bytes(
|
||||
"test-universe: {}\n".format(UNIVERSE_TEST_REPO), 'utf-8')
|
||||
(
|
||||
"test-universe: {test-universe}\n"
|
||||
"helloworld-universe: {helloworld-universe}\n"
|
||||
).format(**UNIVERSE_TEST_REPOS),
|
||||
'utf-8'
|
||||
)
|
||||
_repo_remove(['1.7-universe', 'Universe'], repo_list)
|
||||
|
||||
|
||||
def test_repo_empty():
|
||||
assert_command(
|
||||
['dcos', 'package', 'repo', 'remove', 'test-universe'])
|
||||
for name in UNIVERSE_TEST_REPOS.keys():
|
||||
assert_command(['dcos', 'package', 'repo', 'remove', name])
|
||||
|
||||
returncode, stdout, stderr = exec_command(
|
||||
['dcos', 'package', 'repo', 'list'])
|
||||
@@ -133,10 +178,8 @@ def test_repo_empty():
|
||||
assert stdout == b''
|
||||
assert stderr == stderr_msg
|
||||
|
||||
repo_list = bytes(
|
||||
"test-universe: {}\n".format(UNIVERSE_TEST_REPO), 'utf-8')
|
||||
|
||||
_repo_add(["test-universe", UNIVERSE_TEST_REPO], repo_list)
|
||||
for name, url in UNIVERSE_TEST_REPOS.items():
|
||||
assert_command(['dcos', 'package', 'repo', 'add', name, url])
|
||||
|
||||
|
||||
def test_describe_nonexistent():
|
||||
@@ -206,7 +249,7 @@ def test_describe_package_version():
|
||||
|
||||
returncode_, stdout_, stderr_ = exec_command(
|
||||
['dcos', 'package', 'describe', 'marathon',
|
||||
'--package-version=0.11.1'])
|
||||
'--package-version=1.3.10'])
|
||||
|
||||
assert returncode_ == 0
|
||||
output = json.loads(stdout_.decode('utf-8'))
|
||||
@@ -265,20 +308,6 @@ def test_describe_app_cli():
|
||||
stdout=stdout)
|
||||
|
||||
|
||||
def test_describe_specific_version():
|
||||
stdout = file_bytes(
|
||||
'tests/data/package/json/test_describe_marathon_0.11.1.json')
|
||||
|
||||
returncode_, stdout_, stderr_ = exec_command(
|
||||
['dcos', 'package', 'describe', '--package-version=0.11.1',
|
||||
'marathon'])
|
||||
|
||||
assert returncode_ == 0
|
||||
output = json.loads(stdout_.decode('utf-8'))
|
||||
assert output == json.loads(stdout.decode('utf-8'))
|
||||
assert stderr_ == b''
|
||||
|
||||
|
||||
def test_bad_install():
|
||||
args = ['--options=tests/data/package/chronos-bad.json', '--yes']
|
||||
stdout = b""
|
||||
@@ -291,7 +320,7 @@ Please create a JSON file with the appropriate options, and pass the \
|
||||
stderr=stderr)
|
||||
|
||||
|
||||
def test_bad_install_marathon_msg():
|
||||
def test_bad_install_helloworld_msg():
|
||||
stdout = (b'A sample pre-installation message\n'
|
||||
b'Installing Marathon app for package [helloworld] version '
|
||||
b'[0.1.0] with app id [/foo]\n'
|
||||
@@ -336,7 +365,7 @@ def test_install_specific_version():
|
||||
b'version [0.11.1]\n'
|
||||
b'Marathon DCOS Service has been successfully installed!\n\n'
|
||||
b'\tDocumentation: https://mesosphere.github.io/marathon\n'
|
||||
b'\tIssues: https:/github.com/mesosphere/marathon/issues\n\n')
|
||||
b'\tIssues: https://github.com/mesosphere/marathon/issues\n\n')
|
||||
|
||||
uninstall_stderr = (
|
||||
b'Uninstalled package [marathon] version [0.11.1]\n'
|
||||
@@ -376,7 +405,7 @@ def test_package_metadata():
|
||||
'framework': False,
|
||||
'name': 'helloworld',
|
||||
'version': '0.1.0',
|
||||
'packagingVersion': '2.0',
|
||||
'packagingVersion': '3.0',
|
||||
'preInstallNotes': 'A sample pre-installation message',
|
||||
'selected': False,
|
||||
'website': 'https://github.com/mesosphere/dcos-helloworld',
|
||||
@@ -393,10 +422,13 @@ def test_package_metadata():
|
||||
]
|
||||
}
|
||||
|
||||
expected_source = bytes(UNIVERSE_TEST_REPO, 'utf-8')
|
||||
expected_source = bytes(
|
||||
UNIVERSE_TEST_REPOS['helloworld-universe'],
|
||||
'utf-8'
|
||||
)
|
||||
|
||||
expected_labels = {
|
||||
'DCOS_PACKAGE_REGISTRY_VERSION': b'2.0',
|
||||
'DCOS_PACKAGE_REGISTRY_VERSION': b'3.0',
|
||||
'DCOS_PACKAGE_NAME': b'helloworld',
|
||||
'DCOS_PACKAGE_VERSION': b'0.1.0',
|
||||
'DCOS_PACKAGE_SOURCE': expected_source,
|
||||
@@ -418,7 +450,7 @@ def test_package_metadata():
|
||||
"framework": False,
|
||||
"maintainer": "support@mesosphere.io",
|
||||
"name": "helloworld",
|
||||
"packagingVersion": "2.0",
|
||||
"packagingVersion": "3.0",
|
||||
"postInstallNotes": "A sample post-installation message",
|
||||
"preInstallNotes": "A sample pre-installation message",
|
||||
"selected": False,
|
||||
@@ -439,7 +471,7 @@ def test_package_metadata():
|
||||
def test_images_in_metadata():
|
||||
package_install('cassandra')
|
||||
|
||||
labels = _get_app_labels('/cassandra/dcos')
|
||||
labels = _get_app_labels('/cassandra')
|
||||
dcos_package_metadata = labels.get("DCOS_PACKAGE_METADATA")
|
||||
images = json.loads(
|
||||
base64.b64decode(dcos_package_metadata).decode('utf-8'))["images"]
|
||||
@@ -448,27 +480,32 @@ def test_images_in_metadata():
|
||||
assert images.get("icon-large") is not None
|
||||
|
||||
# uninstall
|
||||
stderr = (b'Uninstalled package [cassandra] version [0.2.0-1]\n'
|
||||
b'The Apache Cassandra DCOS Service has been uninstalled and '
|
||||
b'will no longer run.\n'
|
||||
b'Please follow the instructions at http://docs.mesosphere.com/'
|
||||
b'services/cassandra/#uninstall to clean up any persisted '
|
||||
b'state\n')
|
||||
stderr = (
|
||||
b'Uninstalled package [cassandra] version [1.0.25-3.0.10]\n'
|
||||
b'DC/OS Apache Cassandra service has been uninstalled.\n'
|
||||
b'Please follow the instructions at https://docs.mesosphere.com/'
|
||||
b'current/usage/service-guides/cassandra/uninstall to remove any '
|
||||
b'persistent state if required.\n'
|
||||
)
|
||||
|
||||
package_uninstall('cassandra', stderr=stderr)
|
||||
assert_command(['dcos', 'marathon', 'group', 'remove', '/cassandra'])
|
||||
delete_zk_node('cassandra-mesos')
|
||||
delete_zk_node('dcos-service-cassandra')
|
||||
|
||||
|
||||
def test_install_with_id(zk_znode):
|
||||
args = ['--app-id=chronos-1', '--yes']
|
||||
stdout = (b'Installing Marathon app for package [chronos] version [2.4.0] '
|
||||
b'with app id [chronos-1]\n')
|
||||
stdout = (
|
||||
b'Installing Marathon app for package [chronos] version [3.0.1] with '
|
||||
b'app id [chronos-1]\n'
|
||||
)
|
||||
|
||||
_install_chronos(args=args, stdout=stdout)
|
||||
|
||||
args = ['--app-id=chronos-2', '--yes']
|
||||
stdout = (b'Installing Marathon app for package [chronos] version [2.4.0] '
|
||||
b'with app id [chronos-2]\n')
|
||||
stdout = (
|
||||
b'Installing Marathon app for package [chronos] version [3.0.1] with '
|
||||
b'app id [chronos-2]\n'
|
||||
)
|
||||
_install_chronos(args=args, stdout=stdout)
|
||||
|
||||
|
||||
@@ -508,34 +545,33 @@ def test_uninstall_cli():
|
||||
_install_helloworld()
|
||||
_uninstall_cli_helloworld(args=['--cli'])
|
||||
|
||||
stdout = b"""
|
||||
{
|
||||
"apps": [
|
||||
"/helloworld"
|
||||
],
|
||||
"description": "Example DCOS application package",
|
||||
"framework": false,
|
||||
"maintainer": "support@mesosphere.io",
|
||||
"name": "helloworld",
|
||||
"packagingVersion": "2.0",
|
||||
"postInstallNotes": "A sample post-installation message",
|
||||
"preInstallNotes": "A sample pre-installation message",
|
||||
"selected": false,
|
||||
"tags": [
|
||||
"mesosphere",
|
||||
"example",
|
||||
"subcommand"
|
||||
],
|
||||
"version": "0.1.0",
|
||||
"website": "https://github.com/mesosphere/dcos-helloworld"
|
||||
}
|
||||
"""
|
||||
stdout_json = {
|
||||
"apps": [
|
||||
"/helloworld"
|
||||
],
|
||||
"description": "Example DCOS application package",
|
||||
"framework": False,
|
||||
"maintainer": "support@mesosphere.io",
|
||||
"name": "helloworld",
|
||||
"packagingVersion": "3.0",
|
||||
"postInstallNotes": "A sample post-installation message",
|
||||
"preInstallNotes": "A sample pre-installation message",
|
||||
"selected": False,
|
||||
"tags": [
|
||||
"mesosphere",
|
||||
"example",
|
||||
"subcommand"
|
||||
],
|
||||
"version": "0.1.0",
|
||||
"website": "https://github.com/mesosphere/dcos-helloworld"
|
||||
}
|
||||
|
||||
returncode_, stdout_, stderr_ = exec_command(
|
||||
['dcos', 'package', 'list', '--json'])
|
||||
assert stderr_ == b''
|
||||
assert returncode_ == 0
|
||||
output = json.loads(stdout_.decode('utf-8'))[0]
|
||||
assert output == json.loads(stdout.decode('utf-8'))
|
||||
assert output == stdout_json
|
||||
_uninstall_helloworld()
|
||||
|
||||
|
||||
@@ -685,7 +721,7 @@ def test_uninstall_multiple_frameworknames(zk_znode):
|
||||
_uninstall_chronos(
|
||||
args=['--app-id=chronos-user-1'],
|
||||
returncode=1,
|
||||
stderr='Uninstalled package [chronos] version [2.4.0]\n'
|
||||
stderr='Uninstalled package [chronos] version [3.0.1]\n'
|
||||
'Unable to shutdown [chronos] service framework with name '
|
||||
'[chronos-user] because there are multiple framework ids '
|
||||
'matching this name: ')
|
||||
@@ -693,7 +729,7 @@ def test_uninstall_multiple_frameworknames(zk_znode):
|
||||
_uninstall_chronos(
|
||||
args=['--app-id=chronos-user-2'],
|
||||
returncode=1,
|
||||
stderr='Uninstalled package [chronos] version [2.4.0]\n'
|
||||
stderr='Uninstalled package [chronos] version [3.0.1]\n'
|
||||
'Unable to shutdown [chronos] service framework with name '
|
||||
'[chronos-user] because there are multiple framework ids '
|
||||
'matching this name: ')
|
||||
@@ -783,7 +819,7 @@ def test_search_middle_with_wildcard():
|
||||
assert stderr == b''
|
||||
|
||||
registries = json.loads(stdout.decode('utf-8'))
|
||||
assert len(registries['packages']) == 1
|
||||
assert len(registries['packages']) == 4
|
||||
|
||||
|
||||
def _get_app_labels(app_id):
|
||||
@@ -866,8 +902,8 @@ def _install_bad_chronos(args=['--yes'],
|
||||
returncode_, stdout_, stderr_ = exec_command(cmd)
|
||||
assert returncode_ == 1
|
||||
assert stderr in stderr_.decode('utf-8')
|
||||
pre_install_notes = (b'We recommend a minimum of one node with at least 1 '
|
||||
b'CPU and 2GB of RAM available for the Chronos '
|
||||
pre_install_notes = (b'We recommend a minimum of one node with at least 2 '
|
||||
b'CPUs and 2.5GiB of RAM available for the Chronos '
|
||||
b'Service.\n')
|
||||
assert stdout_ == pre_install_notes
|
||||
|
||||
@@ -876,16 +912,17 @@ def _install_chronos(
|
||||
args=['--yes'],
|
||||
returncode=0,
|
||||
stdout=b'Installing Marathon app for package [chronos] '
|
||||
b'version [2.4.0]\n',
|
||||
b'version [3.0.1]\n',
|
||||
stderr=b'',
|
||||
pre_install_notes=b'We recommend a minimum of one node with at least '
|
||||
b'1 CPU and 2GB of RAM available for the Chronos '
|
||||
b'Service.\n',
|
||||
b'2 CPUs and 2.5GiB of RAM available for the '
|
||||
b'Chronos Service.\n',
|
||||
post_install_notes=b'Chronos DCOS Service has been successfully '
|
||||
b'''installed!
|
||||
|
||||
\tDocumentation: http://mesos.github.io/chronos
|
||||
\tIssues: https://github.com/mesos/chronos/issues\n''',
|
||||
b'installed!\n\n'
|
||||
b'\tDocumentation: http://mesos.github.io/'
|
||||
b'chronos\n'
|
||||
b'\tIssues: https://github.com/mesos/chronos/'
|
||||
b'issues\n',
|
||||
stdin=None):
|
||||
|
||||
cmd = ['dcos', 'package', 'install', 'chronos'] + args
|
||||
@@ -902,16 +939,17 @@ def _chronos_package(
|
||||
args=['--yes'],
|
||||
returncode=0,
|
||||
stdout=b'Installing Marathon app for package [chronos] '
|
||||
b'version [2.4.0]\n',
|
||||
b'version [3.0.1]\n',
|
||||
stderr=b'',
|
||||
pre_install_notes=b'We recommend a minimum of one node with at least '
|
||||
b'1 CPU and 2GB of RAM available for the Chronos '
|
||||
b'Service.\n',
|
||||
b'2 CPUs and 2.5GiB of RAM available for the '
|
||||
b'Chronos Service.\n',
|
||||
post_install_notes=b'Chronos DCOS Service has been successfully '
|
||||
b'''installed!
|
||||
|
||||
\tDocumentation: http://mesos.github.io/chronos
|
||||
\tIssues: https://github.com/mesos/chronos/issues\n''',
|
||||
b'installed!\n\n'
|
||||
b'\tDocumentation: http://mesos.github.io/'
|
||||
b'chronos\n'
|
||||
b'\tIssues: https://github.com/mesos/chronos/'
|
||||
b'issues\n',
|
||||
stdin=None):
|
||||
|
||||
_install_chronos(
|
||||
|
||||
@@ -50,16 +50,25 @@ def test_service_table():
|
||||
assert_lines(['dcos', 'service'], 3)
|
||||
|
||||
|
||||
def test_service_inactive():
|
||||
def test_service_inactive_and_completed():
|
||||
package_install('kafka', True, ['--app'])
|
||||
wait_for_service('kafka')
|
||||
|
||||
# get kafka's framework ID
|
||||
kafka_id = None
|
||||
for service in get_services():
|
||||
if service['name'] == 'kafka':
|
||||
kafka_id = service['id']
|
||||
break
|
||||
|
||||
assert kafka_id is not None
|
||||
|
||||
# assert kafka is listed
|
||||
services = get_services()
|
||||
assert any(
|
||||
service['name'] == 'kafka' for service in services)
|
||||
|
||||
# stop the kafka task
|
||||
# kill scheduler and test for inactive...
|
||||
exec_command(['dcos', 'marathon', 'app', 'stop', '/kafka', '--force'])
|
||||
|
||||
time.sleep(5)
|
||||
@@ -71,53 +80,37 @@ def test_service_inactive():
|
||||
inactive = get_services(args=['--inactive'])
|
||||
assert any(service['name'] == 'kafka' for service in inactive)
|
||||
|
||||
delete_zk_node('kafka-mesos')
|
||||
exec_command(['dcos', 'package', 'uninstall', 'kafka'])
|
||||
|
||||
|
||||
def test_service_completed():
|
||||
package_install('kafka', True, ['--app'])
|
||||
wait_for_service('kafka')
|
||||
|
||||
services = get_services()
|
||||
|
||||
# get kafka's framework ID
|
||||
kafka_id = None
|
||||
for service in services:
|
||||
if service['name'] == 'kafka':
|
||||
kafka_id = service['id']
|
||||
break
|
||||
|
||||
assert kafka_id is not None
|
||||
|
||||
# teardown framework and test for completed...
|
||||
service_shutdown(kafka_id)
|
||||
delete_zk_node('kafka-mesos')
|
||||
|
||||
# assert kafka is not running
|
||||
services = get_services()
|
||||
assert not any(service['id'] == kafka_id for service in services)
|
||||
# assert kafka is not listed
|
||||
assert not any(
|
||||
service['name'] == 'kafka' for service in get_services())
|
||||
|
||||
# assert kafka is completed
|
||||
services = get_services(args=['--completed'])
|
||||
assert len(services) >= 3
|
||||
assert any(service['id'] == kafka_id for service in services)
|
||||
|
||||
delete_zk_node('kafka-mesos')
|
||||
exec_command(['dcos', 'package', 'uninstall', 'kafka'])
|
||||
|
||||
|
||||
def test_log():
|
||||
with package('cassandra', deploy=True, args=['--package-version=0.2.0-1']):
|
||||
|
||||
with package(
|
||||
'cassandra',
|
||||
deploy=True,
|
||||
args=['--package-version=1.0.25-3.0.10']
|
||||
):
|
||||
returncode, stdout, stderr = exec_command(
|
||||
['dcos', 'service', 'log', 'cassandra.dcos'])
|
||||
['dcos', 'service', 'log', 'cassandra'])
|
||||
|
||||
assert returncode == 0
|
||||
assert len(stdout.decode('utf-8').split('\n')) > 1
|
||||
assert stderr == b''
|
||||
|
||||
returncode, stdout, stderr = exec_command(
|
||||
['dcos', 'service', 'log', 'cassandra.dcos', 'stderr'])
|
||||
['dcos', 'service', 'log', 'cassandra', 'stderr'])
|
||||
|
||||
assert returncode == 0
|
||||
assert len(stdout.decode('utf-8').split('\n')) > 1
|
||||
|
||||
@@ -184,6 +184,9 @@ def test_log_two_tasks():
|
||||
|
||||
lines = stdout.decode('utf-8').split('\n')
|
||||
assert len(lines) == 19
|
||||
assert len(
|
||||
[line for line in lines if line.startswith('===> task:test-app')]
|
||||
) == 2
|
||||
|
||||
|
||||
@pytest.mark.skipif(sys.platform == 'win32',
|
||||
|
||||
@@ -20,6 +20,7 @@ passenv =
|
||||
CLI_TEST_SSH_KEY_PATH
|
||||
CLI_TEST_MASTER_PROXY
|
||||
TEAMCITY_VERSION
|
||||
PYTHONIOENCODING
|
||||
|
||||
[testenv:py35-syntax]
|
||||
deps =
|
||||
|
||||
Reference in New Issue
Block a user