{"id":477,"date":"2015-07-30T10:41:24","date_gmt":"2015-07-30T10:41:24","guid":{"rendered":"http:\/\/blogs.nd.edu\/devops\/?p=477"},"modified":"2015-07-30T10:41:24","modified_gmt":"2015-07-30T10:41:24","slug":"automating-configuration-managment","status":"publish","type":"post","link":"https:\/\/sites.nd.edu\/devops\/2015\/07\/30\/automating-configuration-managment\/","title":{"rendered":"Automating Configuration Managment"},"content":{"rendered":"<div>So many choices! \u00a0Puppet, Chef, Salt, Ansible! \u00a0What&#8217;s an organization to do?<\/div>\n<div><\/div>\n<div>We initially went down the Puppet path, as one of our distributed IT organizations invested lots of time in getting Puppet going.\u00a0 We ended up not going too far down the path as we started using Ansible.<\/div>\n<div><\/div>\n<div>The biggest reason is that Ansible is agentless.\u00a0 All the commands go over ssh, and there is nothing to install on destination servers.\u00a0 We&#8217;ve run into a couple of issues where the documentation doesn&#8217;t match the behavior when developing an Ansible playbook, but nothing insurmountable.<\/div>\n<div><\/div>\n<div>We realize many benefits from\u00a0having a fully self-documenting infrastructure, and find that it, in concert with git (we use BitBucket b\/c of free unlimited private repos for educational institutions), enables the adoption of devops principles.<\/div>\n<div><\/div>\n<div>At a high level, we have a playbook we call Ansible-Core which contains a variety of roles, maintained by our Platform team.\u00a0 These roles correspond to specific configurations, including:<\/div>\n<div>\n<ul>\n<li>Ensuring that our traditional Platform\/OS engineers have accounts\/sudo<\/li>\n<li>Account integration with central authentication<\/li>\n<li>Common software installation\n<ul>\n<li>NGINX, configuration of our wildcard SSL certificate chain, etc<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div>When developing a playbook for an individual service, the developer\u00a0scripting software installation\/configuration may encounter a dependency which is not specific to the service.\u00a0 For example, installation of the AWS CLI (not there by default if you start with a minimal machine config).\u00a0 Upon realizing that, it leads to a conversation with the Platform team to incorporate the addition of that role into Ansible-Core.\u00a0 That can happen two ways:<\/div>\n<div>\n<ul>\n<li>By the dev, who issues a pull request to the Platform team.\u00a0 That team reviews the change and merges as appropriate.<\/li>\n<li>By a member of the Platform team<\/li>\n<\/ul>\n<div>In the process of creating Ansible scripts, conversation between traditional operations folks and developers flows naturally, and we end up with truly reusable chunks of infrastructure code. \u00a0Everyone wins, and more importantly, everyone learns!<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>So many choices! \u00a0Puppet, Chef, Salt, Ansible! \u00a0What&#8217;s an organization to do? We initially went down the Puppet path, as one of our distributed IT organizations invested lots of time in getting Puppet going.\u00a0 We ended up not going too &hellip; <a href=\"https:\/\/sites.nd.edu\/devops\/2015\/07\/30\/automating-configuration-managment\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1551,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-477","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/posts\/477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/users\/1551"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/comments?post=477"}],"version-history":[{"count":1,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/posts\/477\/revisions"}],"predecessor-version":[{"id":478,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/posts\/477\/revisions\/478"}],"wp:attachment":[{"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/media?parent=477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/categories?post=477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sites.nd.edu\/devops\/wp-json\/wp\/v2\/tags?post=477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}