{"id":13507583,"url":"https://github.com/okeuday/nodefinder","last_synced_at":"2025-03-30T09:32:58.300Z","repository":{"id":3854633,"uuid":"4939306","full_name":"okeuday/nodefinder","owner":"okeuday","description":"Strategies For Automatic Node Discovery","archived":false,"fork":true,"pushed_at":"2024-02-15T01:31:51.000Z","size":186,"stargazers_count":60,"open_issues_count":0,"forks_count":11,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-27T20:25:44.122Z","etag":null,"topics":["aws","aws-ec2","distributed-erlang","erlang","multicast"],"latest_commit_sha":null,"homepage":"","language":"Erlang","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"Licenser/nodefinder","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/okeuday.png","metadata":{"files":{"readme":"README.markdown","changelog":"ChangeLog","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2012-07-07T16:35:57.000Z","updated_at":"2023-10-04T10:28:06.000Z","dependencies_parsed_at":"2023-07-05T17:00:17.216Z","dependency_job_id":null,"html_url":"https://github.com/okeuday/nodefinder","commit_stats":{"total_commits":95,"total_committers":4,"mean_commits":23.75,"dds":0.2421052631578947,"last_synced_commit":"5d6d6acdcbe32b7e4cb5308ef51299a0262736e1"},"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okeuday%2Fnodefinder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okeuday%2Fnodefinder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okeuday%2Fnodefinder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okeuday%2Fnodefinder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/okeuday","download_url":"https://codeload.github.com/okeuday/nodefinder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246301963,"owners_count":20755512,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-ec2","distributed-erlang","erlang","multicast"],"created_at":"2024-08-01T02:00:36.519Z","updated_at":"2025-03-30T09:32:58.006Z","avatar_url":"https://github.com/okeuday.png","language":"Erlang","funding_links":[],"categories":["Cloud Infrastructure and Management","Erlang"],"sub_categories":[],"readme":"nodefinder: Strategies for automatic node discovery in Erlang\n=============================================================\n\nDescription\n-----------\n\nAll strategies have been combined into this Erlang application after being\nrefactored.\n\n(The source code is a fork of http://code.google.com/p/nodefinder/)\n\nEC2 tags and groups selection are selected with the following syntax\n(if a tuple doesn't make the boolean expression\n explicitly AND or OR the list is implicitly an OR):\n\n    [Entry... |\n     {'AND', [Entry...]} |\n     {'OR', [Entry...]}]\n     \n      tags: Entry == \"key\" |\n                     [\"key1\", \"key2\"] |\n                     {\"key3\", \"value3\"} |\n                     {[\"key4\", \"key5\"], \"value4\"} |\n                     {\"key6\", [\"value6\", \"value7\"]} |\n                     {[\"key8\", \"key9\"], [\"value9\", \"value8\"]}\n     \n    groups: Entry == \"security_group_name\"\n\n\nBuild\n-----\n\n    rebar compile\n\nExample\n-------\n\n**LAN multicast (requires that ntpd is running)**\n\n    $ erl -sname foo1@localhost -pz ebin/\n    (foo1@localhost)1\u003e application:ensure_all_started(nodefinder).\n    {ok,[inets,xmerl,crypto,asn1,public_key,ssl,nodefinder]}\n    (foo1@localhost)2\u003e nodes(). \n    []\n    (foo1@localhost)3\u003e nodefinder:multicast_start().\n    {ok,\u003c0.52.0\u003e}\n    (foo1@localhost)4\u003e nodes().\n    [foo2@localhost]\n    (foo1@localhost)5\u003e nodefinder:multicast_discover(5000).\n    ok\n    (foo1@localhost)6\u003e nodes().\n    [foo2@localhost]\n    (foo1@localhost)7\u003e nodefinder:multicast_stop().\n    ok\n    (foo1@localhost)8\u003e nodefinder:multicast_stop().\n    {error,not_found}\n    \n    $ erl -sname foo2@localhost -pz ebin/\n    (foo2@localhost)1\u003e application:ensure_all_started(nodefinder).\n    {ok,[inets,xmerl,crypto,asn1,public_key,ssl,nodefinder]}\n    (foo2@localhost)2\u003e nodes(). \n    []\n    (foo2@localhost)3\u003e nodefinder:multicast_start().\n    {ok,\u003c0.52.0\u003e}\n    (foo2@localhost)4\u003e nodes().\n    [foo1@localhost]\n    (foo2@localhost)5\u003e nodefinder:multicast_discover(5000).\n    ok\n    (foo2@localhost)6\u003e nodes().\n    [foo1@localhost]\n    (foo2@localhost)7\u003e nodefinder:multicast_stop().\n    ok\n\n\n**EC2**\n\nFunctionality details:\n\n* The same Erlang distributed node name is used\n  (separate Erlang VMs must be on separate EC2 instances)\n* Connections between regions are not supported due to the high latency\n\nAdd security group TCP rules for:\n\n* port 4369 (`epmd`) [10.0.0.0/8](http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html)\n* ports 4374-4474 (`inet_dist_listen`) [10.0.0.0/8](http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html)\n\nExample:\n\n    $ cat \u003c\u003c EOF \u003e sys.config\n    [{kernel, [\n        {inet_dist_listen_min, 4374},\n        {inet_dist_listen_max, 4474}]}].\n    EOF\n    $ erl -name test -config sys.config -pz ebin/\n    \u003e application:ensure_all_started(nodefinder).\n    \u003e nodes().\n    \u003e Host = \"ec2.amazonaws.com\".\n    \u003e Key = \"\".\n    \u003e SecretKey = \"\".\n    \u003e nodefinder:ec2_start(Key, SecretKey, Host, [\"www\"], []).\n    \u003e nodefinder:ec2_stop().\n    \u003e nodes().\n    \u003e [net_kernel:disconnect(N) || N \u003c- nodes()].\n    \u003e nodefinder:ec2_start(Key, SecretKey, Host, [], [{\"Tag1\", \"Value1\"}]).\n    \u003e nodefinder:ec2_stop().\n    \u003e nodes().\n    \u003e [net_kernel:disconnect(N) || N \u003c- nodes()].\n    \u003e nodefinder:ec2_start(Key, SecretKey, Host, [], [\"Tag1\"]).\n    \u003e nodefinder:ec2_stop().\n    \u003e nodes().\n    \u003e [net_kernel:disconnect(N) || N \u003c- nodes()].\n    \n\n* First, connect to all EC2 instances in the \"www\" security group\n  that are running with a 'test' node name\n* Second, connect to all EC2 instances with a tag Tag1=Value1\n  that are running with a 'test' node name\n* Third, connect to all EC2 instances with a tag Tag1\n  that are running with a 'test' node name\n\nTests\n-----\n\n    rebar compile\n    rebar eunit skip_deps=true\n\nLicense\n-------\n\nMIT License\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fokeuday%2Fnodefinder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fokeuday%2Fnodefinder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fokeuday%2Fnodefinder/lists"}