Date: Mon, 06 Jul 2020 13:00:00 -0400
<div class="wp-block-jetpack-markdown"><h3>Summary</h3> <p>Building and managing servers is a challenging task. Configuration management tools provide a framework for handling the various tasks involved, but many of them require learning a specific syntax and toolchain. PyInfra is a configuration management framework that embraces the familiarity of Pure Python, allowing you to build your own integrations easily and package it all up using the same tools that you rely on for your applications. In this episode Nick Barrett explains why he built it, how it is implemented, and the ways that you can start using it today. He also shares his vision for the future of the project and you can get involved. If you are tired of writing mountains of YAML to set up your servers then give PyInfra a try today.</p> <h3>Announcements</h3> <ul> <li>Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.</li> <li>When you’re ready to launch your next app or want to try a project you hear about on the show, you’ll need somewhere to deploy it, so take a look at our friends over at Linode. With the launch of their managed Kubernetes platform it’s easy to get started with the next generation of deployment and scaling, powered by the battle tested Linode platform, including simple pricing, node balancers, 40Gbit networking, dedicated CPU and GPU instances, and worldwide data centers. Go to <a href="https://www.pythonpodcast.com/linode?utm_source=rss&utm_medium=rss">pythonpodcast.com/linode</a> and get a $60 credit to try out a Kubernetes cluster of your own. And don’t forget to thank them for their continued support of this show!</li> <li>This portion of Podcast.__init__ is brought to you by Datadog. Do you have an app in production that is slower than you like? Is its performance all over the place (sometimes fast, sometimes slow)? Do you know why? With Datadog, you will. You can troubleshoot your app’s performance with Datadog’s end-to-end tracing and in one click correlate those Python traces with related logs and metrics. Use their detailed flame graphs to identify bottlenecks and latency in that app of yours. Start tracking the performance of your apps with a free trial at datadog.com/pythonpodcast. If you sign up for a trial and install the agent, Datadog will send you a free t-shirt.</li> <li>You listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For more opportunities to stay up to date, gain new skills, and learn from your peers there are a growing number of virtual events that you can attend from the comfort and safety of your home. Go to <a href="https://www.pythonpodcast.com/conferences?utm_source=rss&utm_medium=rss">pythonpodcast.com/conferences</a> to check out the upcoming events being offered by our partners and get registered today!</li> <li>Your host as usual is Tobias Macey and today I’m interviewing Nick Barrett about PyInfra, a pure Python framework for agentless configuration management</li> </ul> <h3>Interview</h3> <ul> <li>Introductions</li> <li>How did you get introduced to Python?</li> <li>Can you start by describing what PyInfra is and its origin story?</li> <li>There are a number of options for configuration management of various levels of complexity and language options. What are the features of PyInfra that might lead someone to choose it over other systems?</li> <li>What do you see as the major pain points in dealing with infrastructure today?</li> <li>For someone who is using PyInfra to manage their servers, what is the workflow for building and testing deployments?</li> <li>How do you handle enforcement of idempotency in the operations being performed?</li> <li>Can you describe how PyInfra is implemented? <ul> <li>How has its design or focus evolved since you first began working on it?</li> <li>What are some of the initial assumptions that you had at the outset which have been challenged or updated as it has grown?</li> </ul> </li> <li>The library of available operations seems to have a good baseline for deploying and managing services. What is involved in extending or adding operations to PyInfra?</li> <li>With the focus of the project being on its use of pure Python and the easy integration of external libraries, how do you handle execution of python functions on remote hosts that requires external dependencies?</li> <li>What are some of the other options for interfacing with or extending PyInfra?</li> <li>What are some of the edge cases or points of confusion that users of PyInfra should be aware of?</li> <li>What has been the community response from developers who first encounter and trial PyInfra?</li> <li>What have you found to be the most interesting, unexpected, or challenging aspects of building and maintaining PyInfra?</li> <li>When is PyInfra the wrong choice for managing infrastructure?</li> <li>What do you have planned for the future of the project?</li> </ul> <h3>Keep In Touch</h3> <ul> <li><a href="https://github.com/Fizzadar/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Fizzadar</a> on GitHub</li> <li><a href="https://pointlessramblings.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Website</a></li> <li><a href="https://twitter.com/Fizzadar?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">@Fizzadar</a> on Twitter</li> <li><a href="https://www.linkedin.com/in/fizzadar/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">LinkedIn</a></li> </ul> <h3>Picks</h3> <ul> <li>Tobias <ul> <li><a href="https://www.amazon.com/gp/video/detail/B088JW7CPS/ref=atv_wp_cancel?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">My Spy</a></li> </ul> </li> <li>Nick <ul> <li><a href="https://www.daskeyboard.com/daskeyboard-4-ultimate/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Das Keyboard Ultimate</a></li> <li><a href="https://www.olivemagazine.com/recipes/meat-and-poultry/slow-braised-korean-short-ribs/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Korean Short Ribs</a></li> <li><a href="https://rasamalaysia.com/kimchi-fried-rice/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Kimchi Fried Rice</a></li> </ul> </li> </ul> <h3>Links</h3> <ul> <li><a href="https://docs.pyinfra.com/en/latest/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">PyInfra</a></li> <li><a href="https://oxygem.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Oxygem</a></li> <li><a href="https://wordpress.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">WordPress</a></li> <li><a href="https://www.lua.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Lua</a></li> <li><a href="https://en.wikipedia.org/wiki/Garry%27s_Mod?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Gary’s Mod</a></li> <li><a href="https://en.wikipedia.org/wiki/Java_(programming_language)?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Java</a></li> <li><a href="https://www.ansible.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Ansible</a></li> <li><a href="https://www.saltstack.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">SaltStack</a></li> <li><a href="https://www.chef.io/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Chef</a></li> <li><a href="https://puppet.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Puppet</a></li> <li><a href="https://aws.amazon.com/ec2/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">EC2</a></li> <li><a href="https://boto3.amazonaws.com/v1/documentation/api/latest/index.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Boto 3</a></li> <li><a href="https://www.vaultproject.io/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Hashicorp Vault</a></li> <li><a href="https://www.vagrantup.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Vagrant</a></li> <li><a href="https://www.docker.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Docker</a></li> <li><a href="https://testinfra.readthedocs.io/en/latest/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Testinfra</a> <ul> <li><a href="https://github.com/mitodl/salt-extensions/blob/main/extensions/_modules/testinframod.py?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">SaltStack Testinfra Plugin</a></li> </ul> </li> <li><a href="https://docs.docker.com/engine/reference/builder/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Dockerfile</a></li> <li><a href="https://en.wikipedia.org/wiki/Idempotence?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Idempotence</a></li> <li><a href="https://www.nginx.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Nginx</a></li> <li><a href="https://en.wikipedia.org/wiki/POSIX?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">POSIX</a></li> <li><a href="http://www.gevent.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">gevent</a></li> <li><a href="https://jinja.palletsprojects.com/en/2.11.x/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Jinja2</a></li> <li><a href="https://click.palletsprojects.com/en/7.x/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Click</a></li> <li><a href="https://www.zerotier.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Zero Tier</a></li> <li><a href="https://en.wikipedia.org/wiki/Berkeley_Software_Distribution?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">BSD</a></li> <li><a href="https://docs.python.org/3/library/ast.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">AST Module</a></li> <li><a href="https://redbaron.readthedocs.io/en/latest/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">RedBaron</a></li> </ul> <p>The intro and outro music is from Requiem for a Fish <a href="http://freemusicarchive.org/music/The_Freak_Fandango_Orchestra/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">The Freak Fandango Orchestra</a> / <a href="http://creativecommons.org/licenses/by-sa/3.0/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">CC BY-SA</a></p> </div> <img alt="" height="0" src="https://analytics.boundlessnotions.com/piwik.php?idsite=1&rec=1&url=https%3A%2F%2Fwww.pythonpodcast.com%2Fpyinfra-configuration-management-episode-270%2F&action_name=Pure+Python+Configuration+Management+With+PyInfra+-+Episode+270&urlref=https%3A%2F%2Fwww.pythonpodcast.com%2Ffeed%2F&utm_source=rss&utm_medium=rss" style="border: 0; width: 0; height: 0;" width="0" />