{"url":"https://api.github.com/gists/6f18827f08d82f71522f592451d537c2","forks_url":"https://api.github.com/gists/6f18827f08d82f71522f592451d537c2/forks","commits_url":"https://api.github.com/gists/6f18827f08d82f71522f592451d537c2/commits","id":"6f18827f08d82f71522f592451d537c2","node_id":"MDQ6R2lzdDZmMTg4MjdmMDhkODJmNzE1MjJmNTkyNDUxZDUzN2My","git_pull_url":"https://gist.github.com/6f18827f08d82f71522f592451d537c2.git","git_push_url":"https://gist.github.com/6f18827f08d82f71522f592451d537c2.git","html_url":"https://gist.github.com/michaellihs/6f18827f08d82f71522f592451d537c2","files":{"devopska-2016-05-31.md":{"filename":"devopska-2016-05-31.md","type":"text/markdown","language":"Markdown","raw_url":"https://gist.githubusercontent.com/michaellihs/6f18827f08d82f71522f592451d537c2/raw/6800a18feb88824a1a17b825d499e55de9de9bff/devopska-2016-05-31.md","size":2456,"truncated":false,"content":"DevOps KA 2016-05-31: ChatOps\n=============================\n\nHosted by [@synyx_ka](https://twitter.com/synyx_ka)\n\nPresenters [@verschdl](https://twitter.com/verschdl) [@cyxchris](https://twitter.com/cyxchris)\n\nChatOps = Kommunikation + Kollaboration + DevOps\n\nKlassische Admin Arbeit: Dev --> Anfrage (z.B. Telefon) nach Admin --> macht was --> Antwort\n\n* --> \"synchrone Requests\"\n* Evtl. Redundanz, weil nur die direkt an Kommunikation Beteiligten etwas mitkriegen (A ruft B an, C hat die gleiche Anfrage, kriegt aber nichts davon mit)\n\nErste \"Verbesserung\" --> Kommunikation für Teams (Chat, IRC...)\n\n* Anfrage (über Chat) nach Admin --> Admin erledigt Anfrage, schreibt im Chat --> alle kriegen's mit\n\nNächste Verbesserung: Chatbot, der über Chat-Befehle z.B. Accounts anlegt `demobot: gitlab add john:cust1`\n\n* \"Seiteneffekt\": Doku ohne extra Aufwand\n\nNächste Verbesserung: shared shell / Scriptsammlung --> Bot\n\n* \"private Script Sammlung\" --> in Git --> bei updates muss jeder pullen...\n* Script Sammlung \"in Bot werfen\" --> keiner muss mehr Code sehen\n* Befehle sind jetzt unabhängig vom ausführenden System (Mac Win Linux...) (weil vom Bot ausgeführt)\n* Bot reagiert nur auf \"bekanntes\" Befehlsset\n* User brauchen keinen Zugriff auf Server / Shell, nur Zugriff auf IRC\n\nWissensverteilung im Team\n\n* geschieht \"nebenher\" durch \"Mitlesen\" im Chat\n* \"einfache Tasks\" können auf User verlagert werden\n\nSicherheit\n\n* Bot ist sehr mächtig --> Sicherheitskonzept notwendig\n* ACLs notwendig, geregelt über chat-nickname und Anmeldung am Chat\n* Bot mit Befehlen anreichern, die Zugriffsrechte an Bot Kommandos vergeben können\n\nZukunftsvision\n\n* SSH Daemon abschalten\n* Zugriff auf Server nur noch über definierte APIs durch Bot\n\nWebhooks im Bot\n\n* Bot hat webhooks mit denen er von \"aussen\" angesprochen werden kann\n* z.B. für den Versand von Jenkins-Notifications\n* Bot kann auch auf \"severities\" reagieren --> wichtige Nachrichten entsprechend hervorheben\n* webhook für Infos von Vorgängen, die nicht von Bot getriggert wurden\n\nVerwendetes Tools:\n\n* Hubot https://hubot.github.com/ (JS, coffeescript)\n** https://npmjs.com/search?q=hubot (hubot-script)\n** github.com/hubot/hubot-scripts\n** Hubot synyx\n* Lita (Ruby) https://www.lita.io/\n* Eggdrop (Tcl) (scheisse)\n* Slack chat integration\n\nDon't s:\n\n* offtopic scripte (z.B. Wetterdienste...)\n* offtopic chat\n\nCommands:\n\n`set -uf -o pipefail` - get exit code of first error in shell scripts","encoding":"utf-8"}},"public":true,"created_at":"2016-05-31T17:20:29Z","updated_at":"2016-06-01T20:17:50Z","description":"DevOps Meetup Karlsruhe - ChatOps","comments":4,"user":null,"comments_enabled":true,"comments_url":"https://api.github.com/gists/6f18827f08d82f71522f592451d537c2/comments","owner":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"forks":[],"history":[{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"bc9fa25ef5fc7aecd27417e816c29777cb08dcb9","committed_at":"2016-06-01T14:00:42Z","change_status":{"total":2,"additions":1,"deletions":1},"url":"https://api.github.com/gists/6f18827f08d82f71522f592451d537c2/bc9fa25ef5fc7aecd27417e816c29777cb08dcb9"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"f708335dcc016185cc2a983122258a9f94f83156","committed_at":"2016-05-31T18:22:43Z","change_status":{"total":8,"additions":4,"deletions":4},"url":"https://api.github.com/gists/6f18827f08d82f71522f592451d537c2/f708335dcc016185cc2a983122258a9f94f83156"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"cae0dd91f76f24e2ca78010f6472901e6fa27ba5","committed_at":"2016-05-31T18:16:34Z","change_status":{"total":8,"additions":8,"deletions":0},"url":"https://api.github.com/gists/6f18827f08d82f71522f592451d537c2/cae0dd91f76f24e2ca78010f6472901e6fa27ba5"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"9853e0945ab9dfcbcf81ac5e589f4557e1d85195","committed_at":"2016-05-31T17:59:17Z","change_status":{"total":50,"additions":47,"deletions":3},"url":"https://api.github.com/gists/6f18827f08d82f71522f592451d537c2/9853e0945ab9dfcbcf81ac5e589f4557e1d85195"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"86f12780bf760ea92f27c6450f9b9091e9d5d49b","committed_at":"2016-05-31T17:31:11Z","change_status":{"total":20,"additions":19,"deletions":1},"url":"https://api.github.com/gists/6f18827f08d82f71522f592451d537c2/86f12780bf760ea92f27c6450f9b9091e9d5d49b"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"8b03f3bc2f5571491b7a9f7439580d2773e2aa39","committed_at":"2016-05-31T17:20:29Z","change_status":{"total":1,"additions":1,"deletions":0},"url":"https://api.github.com/gists/6f18827f08d82f71522f592451d537c2/8b03f3bc2f5571491b7a9f7439580d2773e2aa39"}],"truncated":false}