You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ti...@apache.org on 2018/01/31 02:45:25 UTC
[3/5] mesos git commit: Updated example frameworks to make use of
added flags.
Updated example frameworks to make use of added flags.
The example frameworks now consistently rely on a set of common flags
for parameterizing. This unifies parameter names, descriptions and
validation for those examples.
Review: https://reviews.apache.org/r/64848/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/2d2806ae
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/2d2806ae
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/2d2806ae
Branch: refs/heads/master
Commit: 2d2806ae5e037c5f2809f9e2cdd49c2c5cf36d71
Parents: ef6447b
Author: Till Toenshoff <to...@me.com>
Authored: Wed Jan 31 03:40:52 2018 +0100
Committer: Till Toenshoff <to...@me.com>
Committed: Wed Jan 31 03:40:52 2018 +0100
----------------------------------------------------------------------
src/examples/balloon_framework.cpp | 54 ++++------
src/examples/disk_full_framework.cpp | 50 ++++------
src/examples/docker_no_executor_framework.cpp | 78 ++++++++-------
src/examples/dynamic_reservation_framework.cpp | 45 +++------
src/examples/load_generator_framework.cpp | 103 +++++---------------
src/examples/long_lived_framework.cpp | 58 +++--------
src/examples/no_executor_framework.cpp | 78 +++++----------
src/examples/persistent_volume_framework.cpp | 36 ++-----
src/examples/test_framework.cpp | 56 +++--------
9 files changed, 176 insertions(+), 382 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/2d2806ae/src/examples/balloon_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/balloon_framework.cpp b/src/examples/balloon_framework.cpp
index b466e76..1938510 100644
--- a/src/examples/balloon_framework.cpp
+++ b/src/examples/balloon_framework.cpp
@@ -45,6 +45,8 @@
#include "common/parse.hpp"
+#include "examples/flags.hpp"
+
#include "logging/logging.hpp"
using namespace mesos;
@@ -66,11 +68,10 @@ const double CPUS_PER_EXECUTOR = 0.1;
const int32_t MEM_PER_EXECUTOR = 64;
constexpr char EXECUTOR_BINARY[] = "balloon-executor";
-constexpr char FRAMEWORK_PRINCIPAL[] = "balloon-framework-cpp";
constexpr char FRAMEWORK_METRICS_PREFIX[] = "balloon_framework";
-class Flags : public virtual flags::FlagsBase
+class Flags : public virtual mesos::internal::examples::Flags
{
public:
Flags()
@@ -80,10 +81,6 @@ public:
"Name to be used by the framework.",
"Balloon Framework");
- add(&Flags::master,
- "master",
- "Master to connect to.");
-
add(&Flags::task_memory_usage_limit,
"task_memory_usage_limit",
None(),
@@ -143,11 +140,6 @@ public:
"The command that should be used to start the executor.\n"
"This will override the value set by `--build_dir`.");
- add(&Flags::checkpoint,
- "checkpoint",
- "Whether this framework should be checkpointed.\n",
- false);
-
add(&Flags::long_running,
"long_running",
"Whether this framework should launch tasks repeatedly\n"
@@ -156,7 +148,6 @@ public:
}
string name;
- string master;
Bytes task_memory_usage_limit;
Bytes task_memory;
@@ -169,7 +160,6 @@ public:
Option<JSON::Array> executor_uris;
Option<string> executor_command;
- bool checkpoint;
bool long_running;
};
@@ -569,9 +559,10 @@ int main(int argc, char** argv)
FrameworkInfo framework;
framework.set_user(os::user().get());
+ framework.set_principal(flags.principal);
framework.set_name(flags.name);
framework.set_checkpoint(flags.checkpoint);
- framework.add_roles("*");
+ framework.add_roles(flags.role);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::MULTI_ROLE);
framework.add_capabilities()->set_type(
@@ -581,36 +572,25 @@ int main(int argc, char** argv)
MesosSchedulerDriver* driver;
- // TODO(josephw): Refactor these into a common set of flags.
- Option<string> value = os::getenv("MESOS_AUTHENTICATE_FRAMEWORKS");
- if (value.isSome()) {
+ if (flags.authenticate) {
LOG(INFO) << "Enabling authentication for the framework";
- value = os::getenv("DEFAULT_PRINCIPAL");
- if (value.isNone()) {
- EXIT(EXIT_FAILURE)
- << "Expecting authentication principal in the environment";
- }
-
Credential credential;
- credential.set_principal(value.get());
-
- framework.set_principal(value.get());
-
- value = os::getenv("DEFAULT_SECRET");
- if (value.isNone()) {
- EXIT(EXIT_FAILURE)
- << "Expecting authentication secret in the environment";
+ credential.set_principal(flags.principal);
+ if (flags.secret.isSome()) {
+ credential.set_secret(flags.secret.get());
}
- credential.set_secret(value.get());
-
driver = new MesosSchedulerDriver(
- &scheduler, framework, flags.master, credential);
+ &scheduler,
+ framework,
+ flags.master,
+ credential);
} else {
- framework.set_principal(FRAMEWORK_PRINCIPAL);
-
- driver = new MesosSchedulerDriver(&scheduler, framework, flags.master);
+ driver = new MesosSchedulerDriver(
+ &scheduler,
+ framework,
+ flags.master);
}
int status = driver->run() == DRIVER_STOPPED ? 0 : 1;
http://git-wip-us.apache.org/repos/asf/mesos/blob/2d2806ae/src/examples/disk_full_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/disk_full_framework.cpp b/src/examples/disk_full_framework.cpp
index fbe1ab0..2ad5ede 100644
--- a/src/examples/disk_full_framework.cpp
+++ b/src/examples/disk_full_framework.cpp
@@ -38,6 +38,8 @@
#include <stout/os.hpp>
#include <stout/try.hpp>
+#include "examples/flags.hpp"
+
#include "logging/logging.hpp"
using namespace mesos;
@@ -54,11 +56,10 @@ const double CPUS_PER_TASK = 0.1;
const int MEMORY_PER_TASK = 16;
const Bytes DISK_PER_TASK = Megabytes(5);
-constexpr char FRAMEWORK_PRINCIPAL[] = "disk-full-framework-cpp";
constexpr char FRAMEWORK_METRICS_PREFIX[] = "disk_full_framework";
-class Flags : public virtual flags::FlagsBase
+class Flags : public virtual mesos::internal::examples::Flags
{
public:
Flags()
@@ -68,10 +69,6 @@ public:
"Name to be used by the framework.",
"Disk Full Framework");
- add(&Flags::master,
- "master",
- "Master to connect to.");
-
add(&Flags::run_once,
"run_once",
"Whether this framework should exit after running a single task.\n"
@@ -105,7 +102,6 @@ public:
}
string name;
- string master;
bool run_once;
Duration pre_sleep_duration;
Duration post_sleep_duration;
@@ -466,9 +462,10 @@ int main(int argc, char** argv)
FrameworkInfo framework;
framework.set_user(""); // Have Mesos fill the current user.
+ framework.set_principal(flags.principal);
framework.set_name(flags.name);
- framework.set_checkpoint(true);
- framework.add_roles("*");
+ framework.set_checkpoint(flags.checkpoint);
+ framework.add_roles(flags.role);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::MULTI_ROLE);
framework.add_capabilities()->set_type(
@@ -478,36 +475,25 @@ int main(int argc, char** argv)
MesosSchedulerDriver* driver;
- // TODO(hartem): Refactor these into a common set of flags.
- Option<string> value = os::getenv("MESOS_AUTHENTICATE_FRAMEWORKS");
- if (value.isSome()) {
+ if (flags.authenticate) {
LOG(INFO) << "Enabling authentication for the framework";
- value = os::getenv("DEFAULT_PRINCIPAL");
- if (value.isNone()) {
- EXIT(EXIT_FAILURE)
- << "Expecting authentication principal in the environment";
- }
-
Credential credential;
- credential.set_principal(value.get());
-
- framework.set_principal(value.get());
-
- value = os::getenv("DEFAULT_SECRET");
- if (value.isNone()) {
- EXIT(EXIT_FAILURE)
- << "Expecting authentication secret in the environment";
+ credential.set_principal(flags.principal);
+ if (flags.secret.isSome()) {
+ credential.set_secret(flags.secret.get());
}
- credential.set_secret(value.get());
-
driver = new MesosSchedulerDriver(
- &scheduler, framework, flags.master, credential);
+ &scheduler,
+ framework,
+ flags.master,
+ credential);
} else {
- framework.set_principal(FRAMEWORK_PRINCIPAL);
-
- driver = new MesosSchedulerDriver(&scheduler, framework, flags.master);
+ driver = new MesosSchedulerDriver(
+ &scheduler,
+ framework,
+ flags.master);
}
int status = driver->run() == DRIVER_STOPPED ? 0 : 1;
http://git-wip-us.apache.org/repos/asf/mesos/blob/2d2806ae/src/examples/docker_no_executor_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/docker_no_executor_framework.cpp b/src/examples/docker_no_executor_framework.cpp
index d1bdce9..85a2e9c 100644
--- a/src/examples/docker_no_executor_framework.cpp
+++ b/src/examples/docker_no_executor_framework.cpp
@@ -25,14 +25,14 @@
#include <stout/option.hpp>
#include <stout/os.hpp>
+#include "examples/flags.hpp"
+
+#include "logging/logging.hpp"
+
using namespace mesos;
using boost::lexical_cast;
-using std::cout;
-using std::cerr;
-using std::endl;
-using std::flush;
using std::string;
using std::vector;
@@ -40,7 +40,6 @@ const int32_t CPUS_PER_TASK = 1;
const int32_t MEM_PER_TASK = 32;
constexpr char FRAMEWORK_NAME[] = "Docker No Executor Framework (C++)";
-constexpr char FRAMEWORK_PRINCIPAL[] = "no-executor-framework-cpp";
class DockerNoExecutorScheduler : public Scheduler
@@ -55,7 +54,7 @@ public:
const FrameworkID&,
const MasterInfo&)
{
- cout << "Registered!" << endl;
+ LOG(INFO) << "Registered!";
}
virtual void reregistered(SchedulerDriver*, const MasterInfo& masterInfo) {}
@@ -65,7 +64,8 @@ public:
virtual void resourceOffers(SchedulerDriver* driver,
const vector<Offer>& offers)
{
- cout << "." << flush;
+ LOG(INFO) << ".";
+
for (size_t i = 0; i < offers.size(); i++) {
const Offer& offer = offers[i];
@@ -93,8 +93,7 @@ public:
mem >= MEM_PER_TASK) {
int taskId = tasksLaunched++;
- cout << "Starting task " << taskId << " on "
- << offer.hostname() << endl;
+ LOG(INFO) << "Starting task " << taskId << " on " << offer.hostname();
TaskInfo task;
task.set_name("Task " + lexical_cast<string>(taskId));
@@ -141,7 +140,7 @@ public:
{
int taskId = lexical_cast<int>(status.task_id().value());
- cout << "Task " << taskId << " is in state " << status.state() << endl;
+ LOG(INFO) << "Task " << taskId << " is in state " << status.state();
if (status.state() == TASK_FINISHED) {
tasksFinished++;
@@ -173,51 +172,58 @@ private:
};
+class Flags : public virtual mesos::internal::examples::Flags {};
+
+
int main(int argc, char** argv)
{
- if (argc != 2) {
- cerr << "Usage: " << argv[0] << " <master>" << endl;
- return -1;
+ Flags flags;
+ Try<flags::Warnings> load = flags.load("MESOS_EXAMPLE_", argc, argv);
+
+ if (flags.help) {
+ std::cout << flags.usage() << std::endl;
+ return EXIT_SUCCESS;
}
- DockerNoExecutorScheduler scheduler;
+ if (load.isError()) {
+ std::cerr << flags.usage(load.error()) << std::endl;
+ return EXIT_FAILURE;
+ }
+
+ internal::logging::initialize(argv[0], false);
FrameworkInfo framework;
framework.set_user(""); // Have Mesos fill in the current user.
+ framework.set_principal(flags.principal);
framework.set_name(FRAMEWORK_NAME);
- framework.set_checkpoint(true);
+ framework.set_checkpoint(flags.checkpoint);
+ framework.add_roles(flags.role);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::RESERVATION_REFINEMENT);
+ DockerNoExecutorScheduler scheduler;
+
MesosSchedulerDriver* driver;
- if (os::getenv("MESOS_EXAMPLE_AUTHENTICATE").isSome()) {
- cout << "Enabling authentication for the framework" << endl;
- Option<string> value = os::getenv("MESOS_EXAMPLE_PRINCIPAL");
- if (value.isNone()) {
- EXIT(EXIT_FAILURE)
- << "Expecting authentication principal in the environment";
- }
+ if (flags.authenticate) {
+ LOG(INFO) << "Enabling authentication for the framework";
Credential credential;
- credential.set_principal(value.get());
-
- framework.set_principal(value.get());
-
- value = os::getenv("MESOS_EXAMPLE_SECRET");
- if (value.isNone()) {
- EXIT(EXIT_FAILURE)
- << "Expecting authentication secret in the environment";
+ credential.set_principal(flags.principal);
+ if (flags.secret.isSome()) {
+ credential.set_secret(flags.secret.get());
}
- credential.set_secret(value.get());
-
driver = new MesosSchedulerDriver(
- &scheduler, framework, argv[1], credential);
+ &scheduler,
+ framework,
+ argv[1],
+ credential);
} else {
- framework.set_principal(FRAMEWORK_PRINCIPAL);
-
- driver = new MesosSchedulerDriver(&scheduler, framework, argv[1]);
+ driver = new MesosSchedulerDriver(
+ &scheduler,
+ framework,
+ argv[1]);
}
int status = driver->run() == DRIVER_STOPPED ? 0 : 1;
http://git-wip-us.apache.org/repos/asf/mesos/blob/2d2806ae/src/examples/dynamic_reservation_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/dynamic_reservation_framework.cpp b/src/examples/dynamic_reservation_framework.cpp
index 781863a..15f3ec5 100644
--- a/src/examples/dynamic_reservation_framework.cpp
+++ b/src/examples/dynamic_reservation_framework.cpp
@@ -34,6 +34,8 @@
#include "logging/logging.hpp"
+#include "examples/flags.hpp"
+
using namespace mesos;
using std::cerr;
@@ -327,26 +329,16 @@ private:
};
-class Flags : public virtual flags::FlagsBase
+class Flags : public virtual mesos::internal::examples::Flags
{
public:
Flags()
{
- add(&Flags::master,
- "master",
- "The master to connect to. May be one of:\n"
- " master@addr:port (The PID of the master)\n"
- " zk://host1:port1,host2:port2,.../path\n"
- " zk://username:password@host1:port1,host2:port2,.../path\n"
- " file://path/to/file (where file contains one of the above)");
-
+ // Using non unified role flag as this framework needs a non "*"
+ // default role.
add(&Flags::role,
"role",
- "Role to use when registering");
-
- add(&Flags::principal,
- "principal",
- "The principal used to identify this framework",
+ "Role to use when registering.",
"test");
add(&Flags::command,
@@ -355,12 +347,11 @@ public:
"echo hello");
}
- Option<string> master;
- Option<string> role;
- string principal;
+ string role;
string command;
};
+
int main(int argc, char** argv)
{
Flags flags;
@@ -376,13 +367,7 @@ int main(int argc, char** argv)
return EXIT_FAILURE;
}
- if (flags.master.isNone()) {
- cerr << flags.usage("Missing --master") << endl;
- return EXIT_FAILURE;
- } else if (flags.role.isNone()) {
- cerr << flags.usage("Missing --role") << endl;
- return EXIT_FAILURE;
- } else if (flags.role.get() == "*") {
+ if (flags.role == "*") {
cerr << flags.usage(
"Role is incorrect; the default '*' role cannot be used")
<< endl;
@@ -398,34 +383,34 @@ int main(int argc, char** argv)
FrameworkInfo framework;
framework.set_user(""); // Mesos'll fill in the current user.
+ framework.set_principal(flags.principal);
framework.set_name(FRAMEWORK_NAME);
- framework.add_roles(flags.role.get());
+ framework.add_roles(flags.role);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::MULTI_ROLE);
- framework.set_principal(flags.principal);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::RESERVATION_REFINEMENT);
DynamicReservationScheduler scheduler(
flags.command,
- flags.role.get(),
+ flags.role,
flags.principal);
- if (flags.master.get() == "local") {
+ if (flags.master == "local") {
// Configure master.
os::setenv("MESOS_AUTHENTICATE_FRAMEWORKS", "false");
ACLs acls;
ACL::RegisterFramework* acl = acls.add_register_frameworks();
acl->mutable_principals()->set_type(ACL::Entity::ANY);
- acl->mutable_roles()->add_values(flags.role.get());
+ acl->mutable_roles()->add_values(flags.role);
os::setenv("MESOS_ACLS", stringify(JSON::protobuf(acls)));
}
MesosSchedulerDriver* driver = new MesosSchedulerDriver(
&scheduler,
framework,
- flags.master.get());
+ flags.master);
int status = driver->run() == DRIVER_STOPPED ? 0 : 1;
http://git-wip-us.apache.org/repos/asf/mesos/blob/2d2806ae/src/examples/load_generator_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/load_generator_framework.cpp b/src/examples/load_generator_framework.cpp
index 29ddddf..665dd57 100644
--- a/src/examples/load_generator_framework.cpp
+++ b/src/examples/load_generator_framework.cpp
@@ -29,15 +29,13 @@
#include <stout/stopwatch.hpp>
#include <stout/strings.hpp>
-#include "logging/flags.hpp"
+#include "examples/flags.hpp"
+
#include "logging/logging.hpp"
using namespace mesos;
using namespace process;
-using std::cerr;
-using std::cout;
-using std::endl;
using std::string;
using std::vector;
@@ -226,36 +224,11 @@ private:
};
-class Flags : public virtual mesos::internal::logging::Flags
+class Flags : public virtual mesos::internal::examples::Flags
{
public:
Flags()
{
- add(&Flags::master,
- "master",
- "Required. The master to connect to. May be one of:\n"
- " master@addr:port (The PID of the master)\n"
- " zk://host1:port1,host2:port2,.../path\n"
- " zk://username:password@host1:port1,host2:port2,.../path\n"
- " file://path/to/file (where file contains one of the above)");
-
- add(&Flags::authenticate,
- "authenticate",
- "Set to 'true' to enable framework authentication",
- false);
-
- add(&Flags::principal,
- "principal",
- "The principal used to identify this framework",
- "load-generator-framework");
-
- add(&Flags::secret,
- "secret",
- "The secret used to authenticate this framework.\n"
- "If the value starts with '/' or 'file://' it will be parsed as the\n"
- "path to a file containing the secret. Otherwise the string value is\n"
- "treated as the secret");
-
add(&Flags::qps,
"qps",
"Required. Generate load at this specified rate (queries per second).\n"
@@ -273,11 +246,7 @@ public:
"forever as long as it is connected to the master");
}
- Option<string> master;
- string principal;
- Option<string> secret;
- bool authenticate;
- Option<double> qps;
+ double qps;
Option<Duration> duration;
};
@@ -288,76 +257,58 @@ int main(int argc, char** argv)
Try<flags::Warnings> load = flags.load("MESOS_EXAMPLE_", argc, argv);
if (load.isError()) {
- cerr << flags.usage(load.error()) << endl;
+ std::cerr << flags.usage(load.error()) << std::endl;
return EXIT_FAILURE;
}
if (flags.help) {
- cout << flags.usage() << endl;
+ std::cout << flags.usage() << std::endl;
return EXIT_SUCCESS;
}
- if (flags.master.isNone()) {
- cerr << flags.usage("Missing required option --master") << endl;
- return EXIT_FAILURE;
- }
-
- if (flags.qps.isNone()) {
- cerr << flags.usage("Missing required option --qps") << endl;
- return EXIT_FAILURE;
- }
-
- if (flags.qps.get() <= 0) {
- cerr << flags.usage("--qps needs to be greater than zero") << endl;
- return EXIT_FAILURE;
- }
-
- // We want the logger to catch failure signals.
- mesos::internal::logging::initialize(argv[0], true, flags);
+ mesos::internal::logging::initialize(argv[0], false);
// Log any flag warnings (after logging is initialized).
foreach (const flags::Warning& warning, load->warnings) {
LOG(WARNING) << warning.message;
}
- LoadGeneratorScheduler scheduler(flags.qps.get(), flags.duration);
+ if (flags.qps <= 0.0) {
+ EXIT(EXIT_FAILURE) << "Flag '--qps' needs to be greater than zero";
+ }
+
+ LoadGeneratorScheduler scheduler(flags.qps, flags.duration);
FrameworkInfo framework;
framework.set_user(""); // Have Mesos fill in the current user.
+ framework.set_principal(flags.principal);
framework.set_name(FRAMEWORK_NAME);
+ framework.set_checkpoint(flags.checkpoint);
+ framework.add_roles(flags.role);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::RESERVATION_REFINEMENT);
-
- const Option<string> checkpoint = os::getenv("MESOS_CHECKPOINT");
- if (checkpoint.isSome()) {
- framework.set_checkpoint(
- numify<bool>(checkpoint.get()).get());
- }
+ framework.set_checkpoint(flags.checkpoint);
MesosSchedulerDriver* driver;
if (flags.authenticate) {
- cout << "Enabling authentication for the framework" << endl;
-
- if (flags.secret.isNone()) {
- cerr << "Expecting --secret when --authenticate is set" << endl;
- return EXIT_FAILURE;
- }
-
- string secret = flags.secret.get();
+ LOG(INFO) << "Enabling authentication for the framework";
Credential credential;
credential.set_principal(flags.principal);
- credential.set_secret(strings::trim(secret));
-
- framework.set_principal(flags.principal);
+ if (flags.secret.isSome()) {
+ credential.set_secret(flags.secret.get());
+ }
driver = new MesosSchedulerDriver(
- &scheduler, framework, flags.master.get(), credential);
+ &scheduler,
+ framework,
+ flags.master,
+ credential);
} else {
- framework.set_principal(flags.principal);
-
driver = new MesosSchedulerDriver(
- &scheduler, framework, flags.master.get());
+ &scheduler,
+ framework,
+ flags.master);
}
int status = driver->run() == DRIVER_STOPPED ? EXIT_SUCCESS : EXIT_FAILURE;
http://git-wip-us.apache.org/repos/asf/mesos/blob/2d2806ae/src/examples/long_lived_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/long_lived_framework.cpp b/src/examples/long_lived_framework.cpp
index a142199..1dc8dd4 100644
--- a/src/examples/long_lived_framework.cpp
+++ b/src/examples/long_lived_framework.cpp
@@ -49,6 +49,8 @@
#include "common/parse.hpp"
+#include "examples/flags.hpp"
+
#include "logging/logging.hpp"
using std::queue;
@@ -496,22 +498,11 @@ private:
};
-class Flags : public virtual flags::FlagsBase
+class Flags : public virtual mesos::internal::examples::Flags
{
public:
Flags()
{
- add(&Flags::master,
- "master",
- "Master to connect to.",
- [](const Option<string>& value) -> Option<Error> {
- if (value.isNone()) {
- return Error("Missing --master");
- }
-
- return None();
- });
-
add(&Flags::build_dir,
"build_dir",
"The build directory of Mesos. If set, the framework will assume\n"
@@ -548,23 +539,8 @@ public:
"executor_command",
"The command that should be used to start the executor.\n"
"This will override the value set by `--build_dir`.");
-
- add(&Flags::checkpoint,
- "checkpoint",
- "Whether this framework should be checkpointed.",
- false);
-
- add(&Flags::principal,
- "principal",
- "The principal to use for framework authentication.");
-
- add(&Flags::secret,
- "secret",
- "The secret to use for framework authentication.");
}
- Option<string> master;
-
// Flags for specifying the executor binary and other URIs.
//
// TODO(armand): Remove the `--executor_uri` flag after the
@@ -573,10 +549,6 @@ public:
Option<string> executor_uri;
Option<JSON::Array> executor_uris;
Option<string> executor_command;
-
- bool checkpoint;
- Option<string> principal;
- Option<string> secret;
};
@@ -662,9 +634,10 @@ int main(int argc, char** argv)
FrameworkInfo framework;
framework.set_user(os::user().get());
+ framework.set_principal(flags.principal);
framework.set_name(FRAMEWORK_NAME);
framework.set_checkpoint(flags.checkpoint);
- framework.add_roles("*");
+ framework.add_roles(flags.role);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::MULTI_ROLE);
framework.add_capabilities()->set_type(
@@ -672,23 +645,20 @@ int main(int argc, char** argv)
Option<Credential> credential = None();
- if (flags.principal.isSome()) {
- framework.set_principal(flags.principal.get());
-
+ if (flags.authenticate) {
+ Credential credential_;
+ credential_.set_principal(flags.principal);
if (flags.secret.isSome()) {
- Credential credential_;
- credential_.set_principal(flags.principal.get());
credential_.set_secret(flags.secret.get());
- credential = credential_;
}
+ credential = credential_;
}
- Owned<LongLivedScheduler> scheduler(
- new LongLivedScheduler(
- flags.master.get(),
- framework,
- executor,
- credential));
+ Owned<LongLivedScheduler> scheduler(new LongLivedScheduler(
+ flags.master,
+ framework,
+ executor,
+ credential));
process::spawn(scheduler.get());
process::wait(scheduler.get());
http://git-wip-us.apache.org/repos/asf/mesos/blob/2d2806ae/src/examples/no_executor_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/no_executor_framework.cpp b/src/examples/no_executor_framework.cpp
index 061b8b8..02aaf07 100644
--- a/src/examples/no_executor_framework.cpp
+++ b/src/examples/no_executor_framework.cpp
@@ -32,7 +32,8 @@
#include "common/protobuf_utils.hpp"
#include "common/status_utils.hpp"
-#include "logging/flags.hpp"
+#include "examples/flags.hpp"
+
#include "logging/logging.hpp"
using namespace mesos;
@@ -227,34 +228,11 @@ private:
};
-class Flags : public virtual logging::Flags
+class Flags : public virtual mesos::internal::examples::Flags
{
public:
Flags()
{
- add(&Flags::master,
- "master",
- "The master to connect to. May be one of:\n"
- " master@addr:port (The PID of the master)\n"
- " zk://host1:port1,host2:port2,.../path\n"
- " zk://username:password@host1:port1,host2:port2,.../path\n"
- " file://path/to/file (where file contains one of the above)");
-
- add(&Flags::checkpoint,
- "checkpoint",
- "Whether to enable checkpointing (true by default).",
- true);
-
- add(&Flags::principal,
- "principal",
- "To enable authentication, both --principal and --secret\n"
- "must be supplied.");
-
- add(&Flags::secret,
- "secret",
- "To enable authentication, both --principal and --secret\n"
- "must be supplied.");
-
add(&Flags::command,
"command",
"The command to run for each task.",
@@ -278,10 +256,6 @@ public:
"If unset, as many tasks as possible will be launched.");
}
- Option<string> master;
- bool checkpoint;
- Option<string> principal;
- Option<string> secret;
string command;
string task_resources;
Option<string> task_revocable_resources;
@@ -304,19 +278,6 @@ int main(int argc, char** argv)
return EXIT_FAILURE;
}
- if (flags.master.isNone()) {
- cerr << flags.usage("Missing required option --master") << endl;
- return EXIT_FAILURE;
- }
-
- if (flags.principal.isSome() != flags.secret.isSome()) {
- cerr << flags.usage(
- "Both --principal and --secret are required"
- " to enable authentication")
- << endl;
- return EXIT_FAILURE;
- }
-
logging::initialize(argv[0], true, flags); // Catch signals.
// Log any flag warnings.
@@ -326,9 +287,10 @@ int main(int argc, char** argv)
FrameworkInfo framework;
framework.set_user(""); // Have Mesos fill in the current user.
+ framework.set_principal(flags.principal);
framework.set_name(FRAMEWORK_NAME);
framework.set_checkpoint(flags.checkpoint);
- framework.add_roles("*");
+ framework.add_roles(flags.role);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::MULTI_ROLE);
framework.add_capabilities()->set_type(
@@ -339,15 +301,10 @@ int main(int argc, char** argv)
FrameworkInfo::Capability::REVOCABLE_RESOURCES);
}
- if (flags.principal.isSome()) {
- framework.set_principal(flags.principal.get());
- }
-
Try<Resources> resources = Resources::parse(flags.task_resources);
if (resources.isError()) {
- EXIT(EXIT_FAILURE) << flags.usage(
- "Invalid --task_resources: " + resources.error());
+ EXIT(EXIT_FAILURE) << "Invalid '--task_resources': " << resources.error();
}
Resources taskResources = resources.get();
@@ -357,8 +314,8 @@ int main(int argc, char** argv)
Resources::parse(flags.task_revocable_resources.get());
if (revocableResources.isError()) {
- EXIT(EXIT_FAILURE) << flags.usage(
- "Invalid --task_revocable_resources: " + revocableResources.error());
+ EXIT(EXIT_FAILURE) << "Invalid '--task_revocable_resources': "
+ << revocableResources.error();
}
foreach (Resource revocable, revocableResources.get()) {
@@ -377,16 +334,25 @@ int main(int argc, char** argv)
MesosSchedulerDriver* driver;
- if (flags.principal.isSome() && flags.secret.isSome()) {
+ if (flags.authenticate) {
+ LOG(INFO) << "Enabling authentication for the framework";
+
Credential credential;
- credential.set_principal(flags.principal.get());
- credential.set_secret(flags.secret.get());
+ credential.set_principal(flags.principal);
+ if (flags.secret.isSome()) {
+ credential.set_secret(flags.secret.get());
+ }
driver = new MesosSchedulerDriver(
- &scheduler, framework, flags.master.get(), credential);
+ &scheduler,
+ framework,
+ flags.master,
+ credential);
} else {
driver = new MesosSchedulerDriver(
- &scheduler, framework, flags.master.get());
+ &scheduler,
+ framework,
+ flags.master);
}
int status = driver->run() == DRIVER_STOPPED ? 0 : 1;
http://git-wip-us.apache.org/repos/asf/mesos/blob/2d2806ae/src/examples/persistent_volume_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/persistent_volume_framework.cpp b/src/examples/persistent_volume_framework.cpp
index b4dee96..0339af9 100644
--- a/src/examples/persistent_volume_framework.cpp
+++ b/src/examples/persistent_volume_framework.cpp
@@ -42,6 +42,8 @@
#include "logging/flags.hpp"
#include "logging/logging.hpp"
+#include "examples/flags.hpp"
+
using namespace mesos;
using namespace mesos::internal;
@@ -490,29 +492,19 @@ private:
};
-class Flags : public virtual logging::Flags
+class Flags : public virtual mesos::internal::examples::Flags,
+ public virtual logging::Flags
{
public:
Flags()
{
- add(&Flags::master,
- "master",
- "The master to connect to. May be one of:\n"
- " master@addr:port (The PID of the master)\n"
- " zk://host1:port1,host2:port2,.../path\n"
- " zk://username:password@host1:port1,host2:port2,.../path\n"
- " file://path/to/file (where file contains one of the above)");
-
+ // Using non unified role flag as this framework needs a non "*"
+ // default role.
add(&Flags::role,
"role",
"Role to use when registering",
"test");
- add(&Flags::principal,
- "principal",
- "The principal used to identify this framework",
- "test");
-
add(&Flags::num_shards,
"num_shards",
"The number of shards the framework will run using regular volume.",
@@ -529,9 +521,7 @@ public:
2);
}
- Option<string> master;
string role;
- string principal;
size_t num_shards;
size_t num_shared_shards;
size_t tasks_per_shard;
@@ -553,11 +543,6 @@ int main(int argc, char** argv)
return EXIT_FAILURE;
}
- if (flags.master.isNone()) {
- cerr << flags.usage("Missing required option --master") << endl;
- return EXIT_FAILURE;
- }
-
logging::initialize(argv[0], true, flags); // Catch signals.
// Log any flag warnings (after logging is initialized).
@@ -567,27 +552,26 @@ int main(int argc, char** argv)
FrameworkInfo framework;
framework.set_user(""); // Have Mesos fill in the current user.
+ framework.set_principal(flags.principal);
framework.set_name(FRAMEWORK_NAME);
framework.add_roles(flags.role);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::MULTI_ROLE);
framework.set_checkpoint(true);
- framework.set_principal(flags.principal);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::SHARED_RESOURCES);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::RESERVATION_REFINEMENT);
- if (flags.master.get() == "local") {
+ if (flags.master == "local") {
// Configure master.
os::setenv("MESOS_ROLES", flags.role);
- os::setenv("MESOS_AUTHENTICATE_FRAMEWORKS", "false");
+ os::setenv("MESOS_AUTHENTICATE_FRAMEWORKS", stringify(flags.authenticate));
ACLs acls;
ACL::RegisterFramework* acl = acls.add_register_frameworks();
acl->mutable_principals()->set_type(ACL::Entity::ANY);
acl->mutable_roles()->add_values(flags.role);
-
os::setenv("MESOS_ACLS", stringify(JSON::protobuf(acls)));
// Configure agent.
@@ -603,7 +587,7 @@ int main(int argc, char** argv)
MesosSchedulerDriver* driver = new MesosSchedulerDriver(
&scheduler,
framework,
- flags.master.get());
+ flags.master);
int status = driver->run() == DRIVER_STOPPED ? EXIT_SUCCESS : EXIT_FAILURE;
http://git-wip-us.apache.org/repos/asf/mesos/blob/2d2806ae/src/examples/test_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/test_framework.cpp b/src/examples/test_framework.cpp
index 2f48bf2..c8e4bb4 100644
--- a/src/examples/test_framework.cpp
+++ b/src/examples/test_framework.cpp
@@ -37,6 +37,8 @@
#include "logging/flags.hpp"
#include "logging/logging.hpp"
+#include "examples/flags.hpp"
+
using namespace mesos;
using boost::lexical_cast;
@@ -56,8 +58,6 @@ const int32_t MEM_PER_TASK = 128;
constexpr char EXECUTOR_BINARY[] = "test-executor";
constexpr char EXECUTOR_NAME[] = "Test Executor (C++)";
constexpr char FRAMEWORK_NAME[] = "Test Framework (C++)";
-constexpr char FRAMEWORK_PRINCIPAL[] = "test-framework-cpp";
-
class TestScheduler : public Scheduler
{
@@ -211,18 +211,7 @@ void usage(const char* argv0, const flags::FlagsBase& flags)
}
-class Flags : public virtual mesos::internal::logging::Flags
-{
-public:
- Flags()
- {
- add(&Flags::role, "role", "Role to use when registering", "*");
- add(&Flags::master, "master", "ip:port of master to connect");
- }
-
- string role;
- Option<string> master;
-};
+class Flags : public virtual mesos::internal::examples::Flags {};
int main(int argc, char** argv)
@@ -251,11 +240,6 @@ int main(int argc, char** argv)
return EXIT_FAILURE;
}
- if (flags.master.isNone()) {
- cerr << flags.usage("Missing --master") << endl;
- return EXIT_FAILURE;
- }
-
internal::logging::initialize(argv[0], true, flags); // Catch signals.
// Log any flag warnings (after logging is initialized).
@@ -270,17 +254,14 @@ int main(int argc, char** argv)
FrameworkInfo framework;
framework.set_user(""); // Have Mesos fill in the current user.
+ framework.set_principal(flags.principal);
framework.set_name(FRAMEWORK_NAME);
framework.add_roles(flags.role);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::MULTI_ROLE);
framework.add_capabilities()->set_type(
FrameworkInfo::Capability::RESERVATION_REFINEMENT);
-
- value = os::getenv("MESOS_CHECKPOINT");
- if (value.isSome()) {
- framework.set_checkpoint(numify<bool>(value.get()).get());
- }
+ framework.set_checkpoint(flags.checkpoint);
bool implicitAcknowledgements = true;
if (os::getenv("MESOS_EXPLICIT_ACKNOWLEDGEMENTS").isSome()) {
@@ -292,41 +273,26 @@ int main(int argc, char** argv)
MesosSchedulerDriver* driver;
TestScheduler scheduler(implicitAcknowledgements, executor, flags.role);
- if (os::getenv("MESOS_AUTHENTICATE_FRAMEWORKS").isSome()) {
+ if (flags.authenticate) {
cout << "Enabling authentication for the framework" << endl;
- value = os::getenv("DEFAULT_PRINCIPAL");
- if (value.isNone()) {
- EXIT(EXIT_FAILURE)
- << "Expecting authentication principal in the environment";
- }
-
Credential credential;
- credential.set_principal(value.get());
-
- framework.set_principal(value.get());
-
- value = os::getenv("DEFAULT_SECRET");
- if (value.isNone()) {
- EXIT(EXIT_FAILURE)
- << "Expecting authentication secret in the environment";
+ credential.set_principal(flags.principal);
+ if (flags.secret.isSome()) {
+ credential.set_secret(flags.secret.get());
}
- credential.set_secret(value.get());
-
driver = new MesosSchedulerDriver(
&scheduler,
framework,
- flags.master.get(),
+ flags.master,
implicitAcknowledgements,
credential);
} else {
- framework.set_principal(FRAMEWORK_PRINCIPAL);
-
driver = new MesosSchedulerDriver(
&scheduler,
framework,
- flags.master.get(),
+ flags.master,
implicitAcknowledgements);
}