[{"data":1,"prerenderedAt":256},["ShallowReactive",2],{"project-17933628":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":34,"aspects":35,"strip":39,"post_text":42,"what":43,"said":58,"maker_in_thread":150,"shape":157,"grid":162,"attempts":218,"same_week":219,"maker_shows":248,"maker_hidden":249,"reader_version":250,"card":251},"17933628","deployr","A simple Go utility to ease deployments via SSH and SCP","title","Show HN: A simple Go utility to ease deployments via SSH and SCP","https:\u002F\u002Fgithub.com\u002Fskx\u002Fdeployr\u002F","github.com","stevekemp",1536322385,2018,50,24,793,2155,37,"notable","dev_tools","deployment tool","cli",[24,25,26,27,28],"deployment","ssh","scp","go","configuration management","curious",0,{"positive":32,"neutral":33,"mixed":30,"critical":32},1,13,15,{"idea":36,"design":37,"docs":38},{"positive":30,"critical":32},{"positive":32,"critical":30},{"positive":30,"critical":30},[40,40,40,32,30,30,30,30,40,40,30,30,40,40,41,40,30,40,40,40,30,40,30,40],3,5,null,{"problem":44,"audience":42,"pricing":42,"motivation":42,"time_to_build":42,"stack":51,"openness":57,"stage":57,"team_size":57},{"value":45,"source":46,"evidence":47},"Deploying files and running commands on remote servers over SSH","maker",[48],{"id":49,"by":11,"text":50},"17935503","That's a good point. Ansible is robust, well-known, well-supported, and has support for doing anything and everything from creating users, to setting cron-jobs, MySQL users, and…",[52],{"value":53,"source":46,"evidence":54},"Go",[55],{"id":56},"post","unknown",{"praise":59,"objections":68,"requests":76,"questions":98,"alternatives":110},[60],{"value":61,"source":62,"evidence":63},"Go binaries are self-contained with no runtime dependencies","commenter",[64],{"id":65,"by":66,"text":67},"17937236","otterley","Go binaries are self-contained, unlike Ansible, which is a Python module. There are no runtime dependencies, and no worries about which version of Python and module version…",[69],{"value":70,"source":62,"evidence":71},"Less capable than Ansible for broad configuration tasks",[72],{"id":73,"by":74,"text":75},"17934993","tyingq","A comparison to Ansible might be helpful to help clarify why you would choose this instead.",[77,88],{"value":78,"source":62,"evidence":79},"Add rsync as a transfer option",[80,84],{"id":81,"by":82,"text":83},"17935704","yunyu","This definitely looks interesting, have you considered an option to use rsync instead of scp?",{"id":85,"by":86,"text":87},"17937351","silverglass","Yes, rsync communicates with the rsync at the other end automatically over SSH. You could use rsync by default and then fallback to scp if rsync isn't usable.",{"value":89,"source":62,"evidence":90},"Add conditionals and looping in the template language",[91,95],{"id":92,"by":93,"text":94},"17935334","techntoke","This. I think Go Templates can be nearly or equally as powerful as Jinja2, but there may need to be additional filters and shortcodes added like Hugo.",{"id":96,"by":11,"text":97},"17935556","To make this useful I guess you'd probably want more filters in the \"language\", to allow conditionals, looping, etc. Those are things I deliberately left out, but I could be open…",[99],{"value":100,"source":62,"evidence":101},"Why redirect stderr to \u002Fdev\u002Fnull in the adduser example",[102,106],{"id":103,"by":104,"text":105},"17937920","hexmiles","Small question: In the readme (first section) you use, as an example, the command: \"Run adduser bob 2>\u002Fdev\u002Fnull\" why do you add the \"2>\u002Fdev\u002Fnull\" part? I see a lot of…",{"id":107,"by":108,"text":109},"17940490","stevekemp2","Adduser will fail a second time, and show \"user already exists\" or similar. We hide that via the redirect",[111,115,122,129,136,143],{"value":112,"source":62,"evidence":113},"Ansible",[114],{"id":73,"by":74,"text":75},{"value":116,"source":62,"evidence":117},"Python Fabric",[118],{"id":119,"by":120,"text":121},"17936996","Braxton_Hicks","So perhaps this is most comparable to Python's fabric library.",{"value":123,"source":62,"evidence":124},"sup",[125],{"id":126,"by":127,"text":128},"17937866","atmosx","Looks a lot like sup[1]. [1]: https:\u002F\u002Fgithub.com\u002Fpressly\u002Fsup",{"value":130,"source":62,"evidence":131},"Capistrano",[132],{"id":133,"by":134,"text":135},"17938429","mooreds","So, capistrano? https:\u002F\u002Fcapistranorb.com\u002F But you don't need Ruby installed?",{"value":137,"source":62,"evidence":138},"shipitjs",[139],{"id":140,"by":141,"text":142},"17937356","mahesh_rm","A similar tool, but npm\u002Fjs, I successfully use in a few apps: https:\u002F\u002Fgithub.com\u002Fshipitjs\u002Fshipit",{"value":144,"source":62,"evidence":145},"judo",[146],{"id":147,"by":148,"text":149},"17937851","rollcat","> I believe that we are getting to a point where config management might as well be in a programming language instead of a bunch of ad-hoc scripts in templates that defer to…",{"comments":40,"answered":32,"key":151},[152,153,154],{"id":96,"text":97},{"id":49,"text":50},{"id":155,"text":156},"17935978","No, I had not. Interesting idea. Presumably over the existing SSH, rather than using the rsynd-deamon? Not a bad idea, but I guess I'd need to think about it. Mostly the \"large\"…",{"commenters":158,"max_depth":159,"maker_replies":40,"first_comment_mins":160,"lifespan_hours":161},20,4,193,81,[163,167,170,172,176,180,182,186,190,191,193,195,197,198,200,202,204,208,210,211,212,213,214,216],[164,30,40,165,166,30],"17935815","project\u002Fneutral\u002Fidea","kodablah",[168,30,40,165,169,30],"17936849","akhilcacharya",[171,30,40,165,166,30],"17936928",[173,30,32,174,175,30],"17938364","project\u002Fcritical\u002Fidea","tenken",[177,30,30,178,179,30],"17937339","commenter\u002Fneutral\u002Fperformance","drbawb",[147,30,30,181,148,30],"other\u002Fneutral\u002Fidea",[183,30,30,184,185,30],"17939796","commenter\u002Fpositive\u002Fidea","Kimitri",[187,30,30,188,189,30],"17955293","other\u002Fneutral\u002Fnone","kchhina",[73,32,40,165,74,30],[92,32,40,192,93,30],"project\u002Fneutral\u002Fdesign",[96,32,30,194,11,32],"maker\u002Fneutral\u002Fdesign",[49,32,30,196,11,32],"maker\u002Fneutral\u002Fidea",[119,32,40,165,120,30],[199,32,40,196,108,30],"17940494",[65,32,41,201,66,30],"project\u002Fpositive\u002Fdesign",[126,203,40,165,127,30],2,[205,40,30,206,207,30],"17937004","commenter\u002Fneutral\u002Fnone","finaliteration",[103,159,40,209,104,30],"maker\u002Fneutral\u002Fdocs",[107,159,40,209,108,30],[81,41,40,165,82,30],[155,41,30,196,11,32],[85,41,40,165,86,30],[140,215,30,206,141,30],6,[133,217,40,165,134,30],7,[],[220,224,229,234,239,244],{"id":221,"name":222,"points":223,"category":20},"17927200","Py-spy",286,{"id":225,"name":226,"points":227,"category":228},"17952355","Hacklily",285,"creative",{"id":230,"name":231,"points":232,"category":233},"17948287","Zero",252,"infrastructure",{"id":235,"name":236,"points":237,"category":238},"17942032","Reminiscence",213,"productivity",{"id":240,"name":241,"points":242,"category":243},"17930669","BitMidi",168,"consumer_social",{"id":245,"name":246,"points":247,"category":20},"17951478","Ghuser.io",157,14,false,"v2",{"id":252,"name":5,"line":6,"ai":249,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":30,"top":18,"kw":253,"maker":11,"domain":10,"tier":19,"attempts":30,"strip":254,"url":9,"mix":255,"praise":61,"objection":70,"sub":21},17933628,[24,25,26,27,28],"333100003300335303330303",[32,33,30,32],1794036569289]