{"action":"created","issue":{"url":"https://api.github.com/repos/weaveworks/scope/issues/315","labels_url":"https://api.github.com/repos/weaveworks/scope/issues/315/labels{/name}","comments_url":"https://api.github.com/repos/weaveworks/scope/issues/315/comments","events_url":"https://api.github.com/repos/weaveworks/scope/issues/315/events","html_url":"https://github.com/weaveworks/scope/issues/315","id":94738609,"number":315,"title":"Add capabilities to nodes","user":{"login":"tomwilkie","id":444037,"avatar_url":"https://avatars.githubusercontent.com/u/444037?v=3","gravatar_id":"","url":"https://api.github.com/users/tomwilkie","html_url":"https://github.com/tomwilkie","followers_url":"https://api.github.com/users/tomwilkie/followers","following_url":"https://api.github.com/users/tomwilkie/following{/other_user}","gists_url":"https://api.github.com/users/tomwilkie/gists{/gist_id}","starred_url":"https://api.github.com/users/tomwilkie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomwilkie/subscriptions","organizations_url":"https://api.github.com/users/tomwilkie/orgs","repos_url":"https://api.github.com/users/tomwilkie/repos","events_url":"https://api.github.com/users/tomwilkie/events{/privacy}","received_events_url":"https://api.github.com/users/tomwilkie/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"tomwilkie","id":444037,"avatar_url":"https://avatars.githubusercontent.com/u/444037?v=3","gravatar_id":"","url":"https://api.github.com/users/tomwilkie","html_url":"https://github.com/tomwilkie","followers_url":"https://api.github.com/users/tomwilkie/followers","following_url":"https://api.github.com/users/tomwilkie/following{/other_user}","gists_url":"https://api.github.com/users/tomwilkie/gists{/gist_id}","starred_url":"https://api.github.com/users/tomwilkie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomwilkie/subscriptions","organizations_url":"https://api.github.com/users/tomwilkie/orgs","repos_url":"https://api.github.com/users/tomwilkie/repos","events_url":"https://api.github.com/users/tomwilkie/events{/privacy}","received_events_url":"https://api.github.com/users/tomwilkie/received_events","type":"User","site_admin":false},"milestone":null,"comments":5,"created_at":"2015-07-13T14:49:10Z","updated_at":"2015-07-14T09:29:30Z","closed_at":null,"body":"Want to have the ability for the UI to send actions all the way back to the probe.  Example is the \"quarantine\" action.\r\n\r\nRough plan (up for discussion):\r\n- Change NodeMetadata to a struct, existing metadata will live in ndm.metadata field.\r\n- Add \"capabilities\" field to this struct; plan for just a []string of capability identifiers\r\n- Have WeaveTagger add quarantine capability to the Container topology\r\n- Add a \"capabilities\" field to top-level Report (or topology?) struct, containing the i18n info\r\n- Have app render all this out into the detailed node struct, using the i18n data\r\n- Have the UI stick this in the details panel (any maybe a right click menu?)\r\n- Add new /api/topology/{topology}/{id}/{action} handler, which will use the originhost NDM info to route the action back to the right probe\r\n- In xfer, keep a map of probe -> connection.\r\n- Have actions travel the other way down the app<->probe connection; reuse existing connection.\r\n- In probe, have a map of capability id -> function, have various modules register in this map, and when we get a action just lookup and run said function\r\n\r\nOpen questions:\r\n- Do we want to support actions on nodes that are merges from multiple probes (eg container images?)  I think no, for now\r\n- Do we want actions to have responses?  I think yes.\r\n- Do we want actions to have parameters?  I think no for now."},"comment":{"url":"https://api.github.com/repos/weaveworks/scope/issues/comments/121179402","html_url":"https://github.com/weaveworks/scope/issues/315#issuecomment-121179402","issue_url":"https://api.github.com/repos/weaveworks/scope/issues/315","id":121179402,"user":{"login":"peterbourgon","id":114509,"avatar_url":"https://avatars.githubusercontent.com/u/114509?v=3","gravatar_id":"","url":"https://api.github.com/users/peterbourgon","html_url":"https://github.com/peterbourgon","followers_url":"https://api.github.com/users/peterbourgon/followers","following_url":"https://api.github.com/users/peterbourgon/following{/other_user}","gists_url":"https://api.github.com/users/peterbourgon/gists{/gist_id}","starred_url":"https://api.github.com/users/peterbourgon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/peterbourgon/subscriptions","organizations_url":"https://api.github.com/users/peterbourgon/orgs","repos_url":"https://api.github.com/users/peterbourgon/repos","events_url":"https://api.github.com/users/peterbourgon/events{/privacy}","received_events_url":"https://api.github.com/users/peterbourgon/received_events","type":"User","site_admin":false},"created_at":"2015-07-14T09:29:30Z","updated_at":"2015-07-14T09:29:30Z","body":"I'd like to know more about the initial set of capabilities. What do we intend to include, and what will they do, concretely?"}}