muPuppet: A Declarative Subset of the Puppet Configuration Language

Authors Weili Fu, Roly Perera, Paul Anderson, James Cheney

Thumbnail PDF


  • Filesize: 0.64 MB
  • 27 pages

Document Identifiers

Author Details

Weili Fu
Roly Perera
Paul Anderson
James Cheney

Cite AsGet BibTex

Weili Fu, Roly Perera, Paul Anderson, and James Cheney. muPuppet: A Declarative Subset of the Puppet Configuration Language. In 31st European Conference on Object-Oriented Programming (ECOOP 2017). Leibniz International Proceedings in Informatics (LIPIcs), Volume 74, pp. 12:1-12:27, Schloss Dagstuhl – Leibniz-Zentrum für Informatik (2017)


Puppet is a popular declarative framework for specifying and managing complex system configurations. The Puppet framework includes a domain-specific language with several advanced features inspired by object-oriented programming, including user-defined resource types, ‘classes’ with a form of inheritance, and dependency management. Like most real-world languages, the language has evolved in an ad hoc fashion, resulting in a design with numerous features, some of which are complex, hard to understand, and difficult to use correctly. We present an operational semantics for muPuppet, a representative subset of the Puppet language that covers the distinctive features of Puppet, while excluding features that are either deprecated or work-in-progress. Formalising the semantics sheds light on difficult parts of the language, identifies opportunities for future improvements, and provides a foundation for future analysis or debugging techniques, such as static typechecking or provenance tracking. Our semantics leads straightforwardly to a reference implementation in Haskell. We also discuss some of Puppet’s idiosyncrasies, particularly its handling of classes and scope, and present an initial corpus of test cases supported by our formal semantics.
  • configuration languages
  • Puppet
  • operational semantics


  • Access Statistics
  • Total Accesses (updated on a weekly basis)
    PDF Downloads


  1. Puppet 4.8 reference manual, 2016. URL:
  2. Paul Anderson. LCFG: a Practical Tool for System Configuration, volume 17 of Short Topics in System Administration. Usenix Association, 2008. Google Scholar
  3. Paul Anderson and James Cheney. Toward provenance-based security for configuration languages. In Umut A. Acar and Todd J. Green, editors, 4th Workshop on the Theory and Practice of Provenance, TaPP'12, Boston, MA, USA, June 14-15, 2012. USENIX Association, 2012. URL:
  4. Paul Anderson and Herry Herry. A formal semantics for the smartfrog configuration language. J. Network Syst. Manage., 24(2):309-345, 2016. URL:
  5. Nicodemos Constantinou Damianou. A policy framework for management of distributed systems. PhD thesis, Imperial College London, UK, 2002. URL:
  6. Daniele Filaretti and Sergio Maffeis. An executable formal semantics of PHP. In Richard Jones, editor, ECOOP 2014 - Object-Oriented Programming - 28th European Conference, Uppsala, Sweden, July 28 - August 1, 2014. Proceedings, volume 8586 of Lecture Notes in Computer Science, pages 567-592. Springer, 2014. URL:
  7. Weili Fu, Roly Perera, Paul Anderson, and James Cheney. μPuppet: A declarative subset of the Puppet configuration language. ArXiv e-prints, August 2016. URL:, URL:
  8. Jeff Geerling. Ansible for DevOps: Server and configuration management for humans. Midwestern Mac, LLC, 2015. Google Scholar
  9. Patrick Goldsack, Julio Guijarro, Steve Loughran, Alistair N. Coles, Andrew Farrell, Antonio Lain, Paul Murray, and Peter Toft. The smartfrog configuration management framework. Operating Systems Review, 43(1):16-25, 2009. URL:
  10. Arjun Guha, Claudiu Saftoiu, and Shriram Krishnamurthi. The essence of JavaScript. In ECOOP, pages 126-150, Berlin, Heidelberg, 2010. Springer-Verlag. URL:
  11. Haryadi S. Gunawi, Mingzhe Hao, Tanakorn Leesatapornwongsa, Tiratat Patana-anake, Thanh Do, Jeffry Adityatama, Kurnia J. Eliazar, Agung Laksono, Jeffrey F. Lukman, Vincentius Martin, and Anang D. Satria. What bugs live in the cloud? A study of 3000+ issues in cloud systems. In Ed Lazowska, Doug Terry, Remzi H. Arpaci-Dusseau, and Johannes Gehrke, editors, Proceedings of the ACM Symposium on Cloud Computing, Seattle, WA, USA, November 03 - 05, 2014, pages 7:1-7:14. ACM, 2014. URL:
  12. Sergio Maffeis, John C. Mitchell, and Ankur Taly. An operational semantics for javascript. In G. Ramalingam, editor, Programming Languages and Systems, 6th Asian Symposium, APLAS 2008, Bangalore, India, December 9-11, 2008. Proceedings, volume 5356 of Lecture Notes in Computer Science, pages 307-325. Springer, 2008. URL:
  13. Matthias Marschall. Chef Infrastructure Automation Cookbook. Packt Publishing, 2013. Google Scholar
  14. Floréal Morandat, Brandon Hill, Leo Osvald, and Jan Vitek. Evaluating the design of the R language - objects and functions for data analysis. In James Noble, editor, ECOOP 2012 - Object-Oriented Programming - 26th European Conference, Beijing, China, June 11-16, 2012. Proceedings, volume 7313 of Lecture Notes in Computer Science, pages 104-131. Springer, 2012. URL:
  15. Joe Gibbs Politz, Alejandro Martinez, Matthew Milano, Sumner Warren, Daniel Patterson, Junsong Li, Anand Chitipothu, and Shriram Krishnamurthi. Python: the full monty. In Antony L. Hosking, Patrick Th. Eugster, and Cristina V. Lopes, editors, Proceedings of the 2013 ACM SIGPLAN International Conference on Object Oriented Programming Systems Languages & Applications, OOPSLA 2013, part of SPLASH 2013, Indianapolis, IN, USA, October 26-31, 2013, pages 217-232. ACM, 2013. URL:
  16. Jo Rhett. Learning Puppet 4: A guide to configuration management and automation. O'Reilly Media, 2016. Google Scholar
  17. Rian Shambaugh, Aaron Weiss, and Arjun Guha. Rehearsal: a configuration verification tool for puppet. In Chandra Krintz and Emery Berger, editors, Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI 2016, Santa Barbara, CA, USA, June 13-17, 2016, pages 416-430. ACM, 2016. URL:
  18. James Turnbull. Pulling Strings with Puppet: Configuration Management Made Easy. Apress, September 2008. Google Scholar
  19. Katsuhiro Ueno, Yutaka Fukasawa, Akimasa Morihata, and Atsushi Ohori. The essence of ruby. In Jacques Garrigue, editor, Programming Languages and Systems - 12th Asian Symposium, APLAS 2014, Singapore, November 17-19, 2014, Proceedings, volume 8858 of Lecture Notes in Computer Science, pages 78-98. Springer, 2014. URL:
  20. Bart Vanbrabant, Joris Peeraer, and Wouter Joosen. Fine-grained access control for the Puppet configuration language. In LISA, December 2011. URL:
  21. Tianyin Xu and Yuanyuan Zhou. Systems approaches to tackling configuration errors: A survey. ACM Comput. Surv., 47(4):70:1-70:41, 2015. URL:
  22. Zuoning Yin, Xiao Ma, Jing Zheng, Yuanyuan Zhou, Lakshmi N. Bairavasundaram, and Shankar Pasupathy. An empirical study on configuration errors in commercial and open source systems. In Ted Wobber and Peter Druschel, editors, Proceedings of the 23rd ACM Symposium on Operating Systems Principles 2011, SOSP 2011, Cascais, Portugal, October 23-26, 2011, pages 159-172. ACM, 2011. URL:
  23. Diego Zamboni. Learning CFEngine 3: Automated system administration for sites of any size. O'Reilly Media, 2012. Google Scholar