{"id":15517235,"url":"https://github.com/pcfens/mabug2016","last_synced_at":"2026-02-12T02:38:57.622Z","repository":{"id":145586685,"uuid":"70122547","full_name":"pcfens/mabug2016","owner":"pcfens","description":null,"archived":false,"fork":false,"pushed_at":"2016-10-06T04:37:15.000Z","size":112,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-05T16:55:12.371Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pcfens.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-06T04:25:36.000Z","updated_at":"2016-10-06T04:25:36.000Z","dependencies_parsed_at":"2023-09-14T02:09:50.585Z","dependency_job_id":null,"html_url":"https://github.com/pcfens/mabug2016","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pcfens/mabug2016","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcfens%2Fmabug2016","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcfens%2Fmabug2016/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcfens%2Fmabug2016/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcfens%2Fmabug2016/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pcfens","download_url":"https://codeload.github.com/pcfens/mabug2016/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcfens%2Fmabug2016/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29355213,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T01:03:07.613Z","status":"online","status_checked_at":"2026-02-12T02:00:06.911Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-10-02T10:12:13.464Z","updated_at":"2026-02-12T02:38:57.609Z","avatar_url":"https://github.com/pcfens.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"## Configuration Management to Encourage Collaboration and Avoid Repetition\n\nPhil Fenstermacher\n\npcfens@wm.edu\n\n---\n\n## Who am I?\n\nSystems Engineer for ~6 years\n\nFan of automation and old keyboards \u003c!-- .element: class=\"fragment\" --\u003e\n\n---\n\n## Configuration Management\n* A tool to manage and enforce server/software configurations\n* Popular options include Chef, Salt, Ansible, and Puppet (we use Puppet).\n* For the sake of this discussion, they're kept in code \u003c!-- .element: class=\"fragment\" --\u003e\n\n---\n\n![Model M](keyboard.jpg \"Model M\")\nThe only clicky-clicky that goes on\n\n---\n\n## Collaboration\nWorking across traditional silos (e.g. Banner Software Team and operations)\n\nNote:\nNext piece is discuss why we need these things\n\n---\n\n## Configuration Management\nKeeping configuration in code lets us:\n* keep it in SCM\n* test it\n* roll back when I break something\n\nNote: Testing is important because it lets you move faster with greater confidence\n\n---\n\n## Collaboration/Shared Risks\n\n* Shared risks reduce overall risks\n* Fewer issues\n* Faster recovery from issues\n\nNote: State of devops report is an interesting read on how IT performance can be\nmeasured in terms of these things\n\n---\n\n## Repetition\n* It's boring: when people get bored they start to make mistakes\n* Time spent not solving problems you still have\n\nNote:\n* Computers are good at repeating things without fatigue\n\n* Banner web tier machines were set up manually, supposedly identically,\nbut they were different, one was broken, and nobody knew why\n\n---\n\n## On the ops team\n* Configuration Management data is kept in git\n* On a push to git, tests are run\n* If tests pass, the new config is deployed to our puppet server for enforcement\n* Failure is announced in the group chat\n\n---\n\n## On other teams\n* A change is proposed using a git merge request\n* Operations looks at the code to see if it should be merged\n* Tests are run on the MR\n* Merged code that passes tests are deployed automatically\n\n---\n\n## Testing\n* Static analysis\n* Unit/Spec Testing\n* Acceptance Testing\n\nNote: Useful for collaborating with untrusted groups\n\n---\n\n## Static Analysis\n\n* File/folder structure\n* Basic Syntax\n* Style/Lint Checking\n\n---\n\n## Unit/Spec Testing\n\n* Test output with a known input\n* Catches logic errors in complex situations\n\nNote: Compiles everything - useful for upgrade testing\n\n---\n\n## Acceptance Testing\n\n* Apply configuration to a machine/container and test for success\n\nNote: What beyond ability to collaborate safely?\n\n---\n\n## Other Gains\n\n* Backup data only, not full systems\n* Copy paste infrastructure\n* Writing documentation == configuring servers \u003c!-- .element: class=\"fragment\" --\u003e\n\nNote: Discuss the piece running in AWS\n\n---\n\n## Everything in git\n\n* VM Templates are built using packer\n* Documentation lives with the code\n\nNote: Docs must be markdown or plaintext - viewable in vi is a must\n\n---\n\n## Getting Here\n\n* 5 Years\n* Small Goals \u003c!-- .element: class=\"fragment\" --\u003e\n* Build the Culture \u003c!-- .element: class=\"fragment\" --\u003e\n\nNote: Tooling has come a long way, much easier to do full testing today\n\n---\n\n## What Next?\n\n* Device/Appliance Configuration\n* Existence of resources\n* Running containers\n\n---\n\n[github.com/pcfens/mabug2016](https://github.com/pcfens/mabug2016)\n\n---\n## Demo Time\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpcfens%2Fmabug2016","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpcfens%2Fmabug2016","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpcfens%2Fmabug2016/lists"}