diff --git a/clusters.go b/clusters.go index 49e93f6..c5bf325 100644 --- a/clusters.go +++ b/clusters.go @@ -65,3 +65,14 @@ func GetDefaultClusterFromZKUrl(zkURL string) *Cluster { AgentRoot: "/var/lib/mesos", } } + +func GetDefaultMesosClusterFromZKUrl(zkURL string) *Cluster { + return &Cluster{ + Name: "defaultCluster", + AuthMechanism: "UNAUTHENTICATED", + ZK: zkURL, + SchedZKPath: "/mesos", + AgentRunDir: "latest", + AgentRoot: "/var/lib/mesos", + } +} diff --git a/realis_e2e_test.go b/realis_e2e_test.go index bf95f72..a3439b3 100644 --- a/realis_e2e_test.go +++ b/realis_e2e_test.go @@ -180,6 +180,35 @@ func TestLeaderFromZK(t *testing.T) { assert.Equal(t, "http://192.168.33.7:8081", url) } + +func TestMasterFromZK(t *testing.T) { + cluster := realis.GetDefaultClusterFromZKUrl("192.168.33.2:2181") + masterNodesMap, err := realis.MasterNodesFromZK(*cluster) + + assert.NoError(t, err) + + for _, hostnames := range masterNodesMap { + for _, hostname := range hostnames { + assert.NoError(t, err) + assert.Equal(t, "192.168.33.7", hostname) + } + } +} + +func TestMesosMasterFromZK(t *testing.T) { + cluster := realis.GetDefaultMesosClusterFromZKUrl("192.168.33.2:2181") + masterNodesMap, err := realis.MesosMasterNodesFromZK(*cluster) + + assert.NoError(t, err) + + for _, hostnames := range masterNodesMap { + for _, hostname := range hostnames { + assert.NoError(t, err) + assert.Equal(t, "localhost", hostname) + } + } +} + func TestInvalidAuroraURL(t *testing.T) { for _, url := range []string{ "http://doesntexist.com:8081/apitest", diff --git a/zk.go b/zk.go index f67c907..44aa5e2 100644 --- a/zk.go +++ b/zk.go @@ -287,6 +287,11 @@ func MesosFromZKOpts(options ...ZKOpt) (string, error) { return mesosURL, nil } +// Retrieves current Aurora master nodes from ZK. +func MasterNodesFromZK(cluster Cluster) (map[string][]string, error) { + return MasterNodesFromZKOpts(ZKEndpoints(strings.Split(cluster.ZK, ",")...), ZKPath(cluster.SchedZKPath)) +} + // Retrieves current Mesos master nodes/leader from ZK with a custom configuration. func MasterNodesFromZKOpts(options ...ZKOpt) (map[string][]string, error) { result := make(map[string][]string) @@ -382,6 +387,11 @@ func MasterNodesFromZKOpts(options ...ZKOpt) (map[string][]string, error) { return result, nil } +// Retrieves current Mesos Aurora master nodes from ZK. +func MesosMasterNodesFromZK(cluster Cluster) (map[string][]string, error) { + return MesosMasterNodesFromZKOpts(ZKEndpoints(strings.Split(cluster.ZK, ",")...), ZKPath(cluster.SchedZKPath)) +} + // Retrieves current mesos master nodes/leader from ZK with a custom configuration. func MesosMasterNodesFromZKOpts(options ...ZKOpt) (map[string][]string, error) { result := make(map[string][]string)