SlideShare a Scribd company logo
How not to freak out …
… when you start writing Puppet
modules on Windows
before we start ...
Me
• Senior Software Engineer at Puppet
Specialising in Windows
• 15 years in Desktop Engineering and IT
Navy, Government, Mining, Finance, Corporate
• DevOps advocate
The setup …
What do we need?
• Setting up a development environment
• Create a Puppet module
• Debugging tools
What do we need?
• Testing tools
• Publish the module
• Next steps
• Setup environment
• Create module
• Debug tools
• Test tools
• Publish module
• Next steps
• Setup environment
• Create module
• Debug tools
• Test tools
• Publish module
• Next steps
Tools you probably already have
• Windows computer
• Text editor
• Puppet Agent
Tools you probably need to install
• Source Control
• Ruby and Ruby Dev Kit
Why Source Control?
• Made a change and realised it was a mistake and wanted to revert back?
• Lost a modules or had a backup that was too old?
• Wanted to see the difference between two (or more) versions of your
modules?
• Wanted to prove that a change broke or fixed a piece of modules?
• Wanted to review the history of a modules?
• Wanted to submit a change to someone else's modules?
• Wanted to share your modules, or let other people work on your modules?
• Wanted to see how much work is being done, and where, when and by
whom?
• Wanted to quickly experiment something new without breaking anything?
…
Why Source Control?
• Undo mistakes
• Be kind to you future self
Why Source Control?
Prefer git for Puppet Module work
• Lightweight
• Doesn’t require a central server
• Very common
But, choose something that’s appropriate for you …
Why Ruby?
Q: Why use ruby?
A: Because, Puppet.
Why Ruby?
Q: Doesn’t that already come with
Puppet Agent?
A: Yes, but…
Which text editor?
Common - Atom, Notepad++, VS Code
Some have ruby and puppet plugins to help with development
Lots of other options though….
Which text editor?
Common problems
• CRLF vs LF
Probably best to use LF
• Text Encoding and BOM
Unrecognised character at Line 1, Pos 1
How do we install these tools?
• Manual installation
• Chocolatey
https://chocolatey.org
How do we install these tools?
PS> choco install git
PS> choco install puppet-agent
PS> choco install visualstudiocode
PS> choco install ruby ruby2.devkit
How do we install these tools?
Common problems
• Ruby Devkit can be tricky to install
Manually install the devkit into your ruby installation
• Setup environment
• Create module
• Debug tools
• Test tools
• Publish module
• Next steps
Create a Module – Where to start?
• Beginner’s Guide to Modules
• Module fundamentals
Creating a Module - Tools
Puppet Module Tool
bundler
rake
• Setup environment
• Create module
• Debug tools
• Test tools
• Publish module
• Next steps
Debugging tools
• pry
Console driven debugger for ruby
• pry-byebug
Pry plugin to add step-by-step and stack
debugging
• pry-stack_explorer
Pry plugin to navigate the call stack in ruby
Debugging tools
• Modify Gemfile
• Bundle install
…
gem "pry"
gem "pry-byebug"
gem "pry-stack_explorer"
Debugging tools
require "pry"; binding.pry
• Setup environment
• Create module
• Debug tools
• Test tools
• Publish module
• Next steps
Why should I test?
• The “un-happy” path
• Document the intent
• Avoid regression
Why should I test?
• Acceptance
• Integration
• Unit
Types of tests
Types of tests
Where should I start?
Start with unit and integration tests using
automated tools
Unit and Integration tests
• rspec
• rspec-mocks or mocha
• rspec-puppet
Testing tools
Acceptance tests
• beaker
• beaker-rspec
Testing tools
• Setup environment
• Create module
• Debug tools
• Test tools
• Publish module
• Next steps
Puppet Module Tool
puppet-blacksmith
Publishing tools
• Setup environment
• Create module
• Debug tools
• Test tools
• Publish module
• Next steps
• Setup environment
• Create module
• Debug tools
• Test tools
• Publish module
• Next steps
• Read up on testing
• Learn more ruby
• Add automated acceptance tests
What’s next
• Custom types and providers
• Test your Windows modules on
Linux nodes
What’s next
glenn.sarti
glenn.sarti@puppet.com
@glennsarti
Go write some modules!
Links
Source Control
• The Release Pipeline Module
http://aka.ms/thereleasepipelinemodelpdf
• Ruby Installation
http://rubyinstaller.org/downloads/
• Ruby DevKit
https://github.com/oneclick/rubyinstaller/wiki/Development-Kit
• What is the BOM
https://en.wikipedia.org/wiki/Byte_order_mark
• Chocolatey
https://chocolatey.org/
• Puppet Extension for Visual Studio Code
https://marketplace.visualstudio.com/items?itemName=Borke.Puppet
Modules
• Puppet Enterprise quick start guide for Windows
users
https://docs.puppet.com/pe/latest/quick_start_windows_intro.html
• Beginner’s Guide to Modules
https://docs.puppet.com/guides/module_guides/bgtm.html
• Module fundamentals
https://docs.puppet.com/puppet/latest/reference/modules_fundamentals.html
• Ruby Bundler
http://bundler.io/
• puppet module generate
https://docs.puppet.com/puppet/latest/reference/modules_fundamentals.html#writing-modules
Links
Debugging
• Pry
http://pryrepl.org/
https://www.sitepoint.com/rubyists-time-pry-irb/
• pry-byebug
https://github.com/deivid-rodriguez/pry-byebug
• pry-stack_explorer
https://github.com/pry/pry-stack_explorer
Testing
• Rspec
http://rspec.info/
• rspec-puppet
http://rspec-puppet.com/
• rspec-mocks
https://github.com/rspec/rspec-mocks
• mocha
http://gofreerange.com/mocha/docs/
• beaker
https://github.com/puppetlabs/beaker/blob/master/docs/README.md
• beaker-rspec
https://github.com/puppetlabs/beaker-rspec
Links
Publishing
• puppet-blacksmith
https://github.com/voxpupuli/puppet-blacksmith
• Publishing modules on the forge
https://docs.puppet.com/puppet/4.7/reference/modules_publishing.html
• The metadata.json file
https://docs.puppet.com/puppet/4.7/reference/modules_metadata.html
Other
• Puppet REPL
A REPL for the puppet language
https://github.com/nwops/puppet-repl
• Puppet Skeleton Module Generator
https://github.com/garethr/puppet-module-skeleton
• Puppet Strings
The next generation Puppet documentation
extraction and presentation tool
https://github.com/puppetlabs/puppet-strings
PuppetConf 2016: How Not to Freak Out When You Start Writing Puppet Modules for Windows – Glenn Sarti, Puppet

More Related Content

What's hot

Running a Successful Open Source Project
Running a Successful Open Source ProjectRunning a Successful Open Source Project
Running a Successful Open Source Project
Rob Reynolds
 
using Chocolatey for application deployments
using Chocolatey for application deploymentsusing Chocolatey for application deployments
using Chocolatey for application deployments
Owain Perry
 
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Engage 2019: The good, the bad and the ugly: a not so objective view on front...Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Frank van der Linden
 
PowerShell 101 - What is it and Why should YOU Care!
PowerShell 101 - What is it and Why should YOU Care!PowerShell 101 - What is it and Why should YOU Care!
PowerShell 101 - What is it and Why should YOU Care!
Thomas Lee
 
The New Frontend Toolchain
The New Frontend ToolchainThe New Frontend Toolchain
The New Frontend Toolchain
Bruno Abrantes
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basics
Ulrich Krause
 
Setting up your development environment
Setting up your development environmentSetting up your development environment
Setting up your development environment
Robert Deutz
 
Untangling spring week11
Untangling spring week11Untangling spring week11
Untangling spring week11
Derek Jacoby
 
Eclipse DemoCamp Bucharest 2014 - Continuous Integration Jenkins/Hudson
Eclipse DemoCamp Bucharest 2014 - Continuous Integration Jenkins/HudsonEclipse DemoCamp Bucharest 2014 - Continuous Integration Jenkins/Hudson
Eclipse DemoCamp Bucharest 2014 - Continuous Integration Jenkins/Hudson
VladLica
 
IBM Drupal Users Group Discussion on Managing and Deploying Configuration
IBM Drupal Users Group Discussion on Managing and Deploying ConfigurationIBM Drupal Users Group Discussion on Managing and Deploying Configuration
IBM Drupal Users Group Discussion on Managing and Deploying Configuration
Development Seed
 
Lrug
LrugLrug
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsTYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
Michael Lihs
 
Untangling fall2017 week2
Untangling fall2017 week2Untangling fall2017 week2
Untangling fall2017 week2
Derek Jacoby
 
PuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of PuppetPuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of Puppet
Walter Heck
 
Ansible: What, Why & How
Ansible: What, Why & HowAnsible: What, Why & How
Ansible: What, Why & How
Alfonso Cabrera
 
Hudson: Your robotic butler
Hudson: Your robotic butlerHudson: Your robotic butler
Hudson: Your robotic butler
Steven Merrill
 
Improving Engineering Processes using Hudson - Spark IT 2010
Improving Engineering Processes using Hudson - Spark IT 2010Improving Engineering Processes using Hudson - Spark IT 2010
Improving Engineering Processes using Hudson - Spark IT 2010
Arun Gupta
 
Hudson
HudsonHudson
Hudson
8x8
 
Stackato v5
Stackato v5Stackato v5
Stackato v5
Jonas Brømsø
 
Joomlaplatform en
Joomlaplatform enJoomlaplatform en
Joomlaplatform en
Robert Deutz
 

What's hot (20)

Running a Successful Open Source Project
Running a Successful Open Source ProjectRunning a Successful Open Source Project
Running a Successful Open Source Project
 
using Chocolatey for application deployments
using Chocolatey for application deploymentsusing Chocolatey for application deployments
using Chocolatey for application deployments
 
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Engage 2019: The good, the bad and the ugly: a not so objective view on front...Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
 
PowerShell 101 - What is it and Why should YOU Care!
PowerShell 101 - What is it and Why should YOU Care!PowerShell 101 - What is it and Why should YOU Care!
PowerShell 101 - What is it and Why should YOU Care!
 
The New Frontend Toolchain
The New Frontend ToolchainThe New Frontend Toolchain
The New Frontend Toolchain
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basics
 
Setting up your development environment
Setting up your development environmentSetting up your development environment
Setting up your development environment
 
Untangling spring week11
Untangling spring week11Untangling spring week11
Untangling spring week11
 
Eclipse DemoCamp Bucharest 2014 - Continuous Integration Jenkins/Hudson
Eclipse DemoCamp Bucharest 2014 - Continuous Integration Jenkins/HudsonEclipse DemoCamp Bucharest 2014 - Continuous Integration Jenkins/Hudson
Eclipse DemoCamp Bucharest 2014 - Continuous Integration Jenkins/Hudson
 
IBM Drupal Users Group Discussion on Managing and Deploying Configuration
IBM Drupal Users Group Discussion on Managing and Deploying ConfigurationIBM Drupal Users Group Discussion on Managing and Deploying Configuration
IBM Drupal Users Group Discussion on Managing and Deploying Configuration
 
Lrug
LrugLrug
Lrug
 
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsTYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
 
Untangling fall2017 week2
Untangling fall2017 week2Untangling fall2017 week2
Untangling fall2017 week2
 
PuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of PuppetPuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of Puppet
 
Ansible: What, Why & How
Ansible: What, Why & HowAnsible: What, Why & How
Ansible: What, Why & How
 
Hudson: Your robotic butler
Hudson: Your robotic butlerHudson: Your robotic butler
Hudson: Your robotic butler
 
Improving Engineering Processes using Hudson - Spark IT 2010
Improving Engineering Processes using Hudson - Spark IT 2010Improving Engineering Processes using Hudson - Spark IT 2010
Improving Engineering Processes using Hudson - Spark IT 2010
 
Hudson
HudsonHudson
Hudson
 
Stackato v5
Stackato v5Stackato v5
Stackato v5
 
Joomlaplatform en
Joomlaplatform enJoomlaplatform en
Joomlaplatform en
 

Viewers also liked

Puppet for SysAdmins
Puppet for SysAdminsPuppet for SysAdmins
Puppet for SysAdmins
Puppet
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 Edition
Joshua Thijssen
 
Managing Puppet using MCollective
Managing Puppet using MCollectiveManaging Puppet using MCollective
Managing Puppet using MCollective
Puppet
 
Puppet Fundamentals Talk at DevOps Dubai by Hameedullah Khan
Puppet Fundamentals Talk at DevOps Dubai by Hameedullah KhanPuppet Fundamentals Talk at DevOps Dubai by Hameedullah Khan
Puppet Fundamentals Talk at DevOps Dubai by Hameedullah Khan
Hameedullah Khan
 
Building Reusable Puppet Modules
Building Reusable Puppet ModulesBuilding Reusable Puppet Modules
Building Reusable Puppet Modules
Puppet
 
Puppet quick start guide
Puppet quick start guidePuppet quick start guide
Puppet quick start guide
Suhan Dharmasuriya
 
Getting Started with Puppet - PuppetConf 2014
Getting Started with Puppet - PuppetConf 2014Getting Started with Puppet - PuppetConf 2014
Getting Started with Puppet - PuppetConf 2014
Puppet
 
PuppetConf track overview: Inside Puppet
PuppetConf track overview: Inside PuppetPuppetConf track overview: Inside Puppet
PuppetConf track overview: Inside Puppet
Puppet
 
PuppetConf 2016: Puppet on Windows – Nicolas Corrarello, Puppet
PuppetConf 2016: Puppet on Windows – Nicolas Corrarello, PuppetPuppetConf 2016: Puppet on Windows – Nicolas Corrarello, Puppet
PuppetConf 2016: Puppet on Windows – Nicolas Corrarello, Puppet
Puppet
 
Simple_Movement_Class
Simple_Movement_ClassSimple_Movement_Class
Simple_Movement_Class
David Harris
 
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
Puppet
 
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, PuppetPuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
Puppet
 
November 11, 2014: Parent Meeting
November 11, 2014: Parent MeetingNovember 11, 2014: Parent Meeting
November 11, 2014: Parent Meeting
miltonsepac
 
PuppetConf 2016: Nice and Secure: Good OpSec Hygiene With Puppet! – Peter Sou...
PuppetConf 2016: Nice and Secure: Good OpSec Hygiene With Puppet! – Peter Sou...PuppetConf 2016: Nice and Secure: Good OpSec Hygiene With Puppet! – Peter Sou...
PuppetConf 2016: Nice and Secure: Good OpSec Hygiene With Puppet! – Peter Sou...
Puppet
 
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
Puppet
 
Building self-service on demand infrastructure with Puppet and VMware
Building self-service on demand infrastructure with Puppet and VMwareBuilding self-service on demand infrastructure with Puppet and VMware
Building self-service on demand infrastructure with Puppet and VMware
Puppet
 
PuppetConf 2016: Implementing Puppet within a Complex Enterprise – Jerry Caup...
PuppetConf 2016: Implementing Puppet within a Complex Enterprise – Jerry Caup...PuppetConf 2016: Implementing Puppet within a Complex Enterprise – Jerry Caup...
PuppetConf 2016: Implementing Puppet within a Complex Enterprise – Jerry Caup...
Puppet
 
PuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells Fargo
PuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells FargoPuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells Fargo
PuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells Fargo
Puppet
 
PuppetConf 2016: Puppet and UCS: Policy-Based Management All the Way Down – C...
PuppetConf 2016: Puppet and UCS: Policy-Based Management All the Way Down – C...PuppetConf 2016: Puppet and UCS: Policy-Based Management All the Way Down – C...
PuppetConf 2016: Puppet and UCS: Policy-Based Management All the Way Down – C...
Puppet
 
Patch Management on Windows with Puppet
Patch Management on Windows with PuppetPatch Management on Windows with Puppet
Patch Management on Windows with Puppet
Puppet
 

Viewers also liked (20)

Puppet for SysAdmins
Puppet for SysAdminsPuppet for SysAdmins
Puppet for SysAdmins
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 Edition
 
Managing Puppet using MCollective
Managing Puppet using MCollectiveManaging Puppet using MCollective
Managing Puppet using MCollective
 
Puppet Fundamentals Talk at DevOps Dubai by Hameedullah Khan
Puppet Fundamentals Talk at DevOps Dubai by Hameedullah KhanPuppet Fundamentals Talk at DevOps Dubai by Hameedullah Khan
Puppet Fundamentals Talk at DevOps Dubai by Hameedullah Khan
 
Building Reusable Puppet Modules
Building Reusable Puppet ModulesBuilding Reusable Puppet Modules
Building Reusable Puppet Modules
 
Puppet quick start guide
Puppet quick start guidePuppet quick start guide
Puppet quick start guide
 
Getting Started with Puppet - PuppetConf 2014
Getting Started with Puppet - PuppetConf 2014Getting Started with Puppet - PuppetConf 2014
Getting Started with Puppet - PuppetConf 2014
 
PuppetConf track overview: Inside Puppet
PuppetConf track overview: Inside PuppetPuppetConf track overview: Inside Puppet
PuppetConf track overview: Inside Puppet
 
PuppetConf 2016: Puppet on Windows – Nicolas Corrarello, Puppet
PuppetConf 2016: Puppet on Windows – Nicolas Corrarello, PuppetPuppetConf 2016: Puppet on Windows – Nicolas Corrarello, Puppet
PuppetConf 2016: Puppet on Windows – Nicolas Corrarello, Puppet
 
Simple_Movement_Class
Simple_Movement_ClassSimple_Movement_Class
Simple_Movement_Class
 
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
 
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, PuppetPuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
 
November 11, 2014: Parent Meeting
November 11, 2014: Parent MeetingNovember 11, 2014: Parent Meeting
November 11, 2014: Parent Meeting
 
PuppetConf 2016: Nice and Secure: Good OpSec Hygiene With Puppet! – Peter Sou...
PuppetConf 2016: Nice and Secure: Good OpSec Hygiene With Puppet! – Peter Sou...PuppetConf 2016: Nice and Secure: Good OpSec Hygiene With Puppet! – Peter Sou...
PuppetConf 2016: Nice and Secure: Good OpSec Hygiene With Puppet! – Peter Sou...
 
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
 
Building self-service on demand infrastructure with Puppet and VMware
Building self-service on demand infrastructure with Puppet and VMwareBuilding self-service on demand infrastructure with Puppet and VMware
Building self-service on demand infrastructure with Puppet and VMware
 
PuppetConf 2016: Implementing Puppet within a Complex Enterprise – Jerry Caup...
PuppetConf 2016: Implementing Puppet within a Complex Enterprise – Jerry Caup...PuppetConf 2016: Implementing Puppet within a Complex Enterprise – Jerry Caup...
PuppetConf 2016: Implementing Puppet within a Complex Enterprise – Jerry Caup...
 
PuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells Fargo
PuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells FargoPuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells Fargo
PuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells Fargo
 
PuppetConf 2016: Puppet and UCS: Policy-Based Management All the Way Down – C...
PuppetConf 2016: Puppet and UCS: Policy-Based Management All the Way Down – C...PuppetConf 2016: Puppet and UCS: Policy-Based Management All the Way Down – C...
PuppetConf 2016: Puppet and UCS: Policy-Based Management All the Way Down – C...
 
Patch Management on Windows with Puppet
Patch Management on Windows with PuppetPatch Management on Windows with Puppet
Patch Management on Windows with Puppet
 

Similar to PuppetConf 2016: How Not to Freak Out When You Start Writing Puppet Modules for Windows – Glenn Sarti, Puppet

Automated Acceptance Testing from Scratch
Automated Acceptance Testing from ScratchAutomated Acceptance Testing from Scratch
Automated Acceptance Testing from Scratch
Excella
 
Continuous Integration In A PHP World
Continuous Integration In A PHP WorldContinuous Integration In A PHP World
Continuous Integration In A PHP World
Idaf_1er
 
CI doesn’t start with Jenkins
CI doesn’t start with JenkinsCI doesn’t start with Jenkins
CI doesn’t start with Jenkins
Yuriy Rochnyak
 
Micro Talk - Test Your S#!? !
Micro Talk - Test Your S#!? !Micro Talk - Test Your S#!? !
Micro Talk - Test Your S#!? !
Adam Hill
 
TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)
Nacho Cougil
 
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
ssusercaf6c1
 
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
Nacho Cougil
 
Hadoop Demystified + Automation Smackdown! Austin JUG June 24 2014
Hadoop Demystified + Automation Smackdown!  Austin JUG June 24 2014Hadoop Demystified + Automation Smackdown!  Austin JUG June 24 2014
Hadoop Demystified + Automation Smackdown! Austin JUG June 24 2014
datafundamentals
 
TDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech WeekTDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech Week
Nacho Cougil
 
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
Ortus Solutions, Corp
 
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
Uma Ghotikar
 
Automation is Easy! (python version)
Automation is Easy! (python version)Automation is Easy! (python version)
Automation is Easy! (python version)
Iakiv Kramarenko
 
Driving application development through behavior driven development
Driving application development through behavior driven developmentDriving application development through behavior driven development
Driving application development through behavior driven development
Einar Ingebrigtsen
 
Introduction to Automated Testing
Introduction to Automated TestingIntroduction to Automated Testing
Introduction to Automated Testing
Lars Thorup
 
Introduction to-automated-testing
Introduction to-automated-testingIntroduction to-automated-testing
Introduction to-automated-testing
BestBrains
 
Hacking on WildFly 9
Hacking on WildFly 9Hacking on WildFly 9
Hacking on WildFly 9
Virtual JBoss User Group
 
The Cowardly Test-o-Phobe's Guide To Testing
The Cowardly Test-o-Phobe's Guide To TestingThe Cowardly Test-o-Phobe's Guide To Testing
The Cowardly Test-o-Phobe's Guide To Testing
Tim Duckett
 
Reviewing CPAN modules
Reviewing CPAN modulesReviewing CPAN modules
Reviewing CPAN modules
neilbowers
 
Modern Module Development
Modern Module DevelopmentModern Module Development
Modern Module Development
_morgan
 
Git Makes Me Angry Inside
Git Makes Me Angry InsideGit Makes Me Angry Inside
Git Makes Me Angry Inside
Emma Jane Hogbin Westby
 

Similar to PuppetConf 2016: How Not to Freak Out When You Start Writing Puppet Modules for Windows – Glenn Sarti, Puppet (20)

Automated Acceptance Testing from Scratch
Automated Acceptance Testing from ScratchAutomated Acceptance Testing from Scratch
Automated Acceptance Testing from Scratch
 
Continuous Integration In A PHP World
Continuous Integration In A PHP WorldContinuous Integration In A PHP World
Continuous Integration In A PHP World
 
CI doesn’t start with Jenkins
CI doesn’t start with JenkinsCI doesn’t start with Jenkins
CI doesn’t start with Jenkins
 
Micro Talk - Test Your S#!? !
Micro Talk - Test Your S#!? !Micro Talk - Test Your S#!? !
Micro Talk - Test Your S#!? !
 
TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)
 
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
 
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
 
Hadoop Demystified + Automation Smackdown! Austin JUG June 24 2014
Hadoop Demystified + Automation Smackdown!  Austin JUG June 24 2014Hadoop Demystified + Automation Smackdown!  Austin JUG June 24 2014
Hadoop Demystified + Automation Smackdown! Austin JUG June 24 2014
 
TDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech WeekTDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech Week
 
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Into...
 
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
Introduction to Unit Testing, BDD and Mocking using TestBox & MockBox at Adob...
 
Automation is Easy! (python version)
Automation is Easy! (python version)Automation is Easy! (python version)
Automation is Easy! (python version)
 
Driving application development through behavior driven development
Driving application development through behavior driven developmentDriving application development through behavior driven development
Driving application development through behavior driven development
 
Introduction to Automated Testing
Introduction to Automated TestingIntroduction to Automated Testing
Introduction to Automated Testing
 
Introduction to-automated-testing
Introduction to-automated-testingIntroduction to-automated-testing
Introduction to-automated-testing
 
Hacking on WildFly 9
Hacking on WildFly 9Hacking on WildFly 9
Hacking on WildFly 9
 
The Cowardly Test-o-Phobe's Guide To Testing
The Cowardly Test-o-Phobe's Guide To TestingThe Cowardly Test-o-Phobe's Guide To Testing
The Cowardly Test-o-Phobe's Guide To Testing
 
Reviewing CPAN modules
Reviewing CPAN modulesReviewing CPAN modules
Reviewing CPAN modules
 
Modern Module Development
Modern Module DevelopmentModern Module Development
Modern Module Development
 
Git Makes Me Angry Inside
Git Makes Me Angry InsideGit Makes Me Angry Inside
Git Makes Me Angry Inside
 

More from Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
Puppet
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
Puppet
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
Puppet
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
Puppet
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
Puppet
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
Puppet
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
Puppet
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
Puppet
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
Puppet
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
Puppet
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
Puppet
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
Puppet
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
Puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
Puppet
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
Puppet
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
Puppet
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
Puppet
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
Puppet
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
Puppet
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
Puppet
 

More from Puppet (20)

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
 

Recently uploaded

Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
DianaGray10
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
Neo4j
 
"What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w..."What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w...
Fwdays
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
christinelarrosa
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
Fwdays
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
christinelarrosa
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
Fwdays
 
GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...
GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...
GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...
GlobalLogic Ukraine
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
DanBrown980551
 
What is an RPA CoE? Session 2 – CoE Roles
What is an RPA CoE?  Session 2 – CoE RolesWhat is an RPA CoE?  Session 2 – CoE Roles
What is an RPA CoE? Session 2 – CoE Roles
DianaGray10
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
Fwdays
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
ScyllaDB
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
christinelarrosa
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
LizaNolte
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
AstuteBusiness
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
UiPathCommunity
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving
 
Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!
Ortus Solutions, Corp
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 

Recently uploaded (20)

Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
 
"What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w..."What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w...
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
 
GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...
GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...
GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
 
What is an RPA CoE? Session 2 – CoE Roles
What is an RPA CoE?  Session 2 – CoE RolesWhat is an RPA CoE?  Session 2 – CoE Roles
What is an RPA CoE? Session 2 – CoE Roles
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
 
Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 

PuppetConf 2016: How Not to Freak Out When You Start Writing Puppet Modules for Windows – Glenn Sarti, Puppet

  • 1. How not to freak out … … when you start writing Puppet modules on Windows
  • 3. Me • Senior Software Engineer at Puppet Specialising in Windows • 15 years in Desktop Engineering and IT Navy, Government, Mining, Finance, Corporate • DevOps advocate
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. What do we need? • Setting up a development environment • Create a Puppet module • Debugging tools
  • 10. What do we need? • Testing tools • Publish the module • Next steps
  • 11. • Setup environment • Create module • Debug tools • Test tools • Publish module • Next steps
  • 12. • Setup environment • Create module • Debug tools • Test tools • Publish module • Next steps
  • 13. Tools you probably already have • Windows computer • Text editor • Puppet Agent Tools you probably need to install • Source Control • Ruby and Ruby Dev Kit
  • 14. Why Source Control? • Made a change and realised it was a mistake and wanted to revert back? • Lost a modules or had a backup that was too old? • Wanted to see the difference between two (or more) versions of your modules? • Wanted to prove that a change broke or fixed a piece of modules? • Wanted to review the history of a modules? • Wanted to submit a change to someone else's modules? • Wanted to share your modules, or let other people work on your modules? • Wanted to see how much work is being done, and where, when and by whom? • Wanted to quickly experiment something new without breaking anything? …
  • 15. Why Source Control? • Undo mistakes • Be kind to you future self
  • 16. Why Source Control? Prefer git for Puppet Module work • Lightweight • Doesn’t require a central server • Very common But, choose something that’s appropriate for you …
  • 17. Why Ruby? Q: Why use ruby? A: Because, Puppet.
  • 18. Why Ruby? Q: Doesn’t that already come with Puppet Agent? A: Yes, but…
  • 19. Which text editor? Common - Atom, Notepad++, VS Code Some have ruby and puppet plugins to help with development Lots of other options though….
  • 20. Which text editor? Common problems • CRLF vs LF Probably best to use LF • Text Encoding and BOM Unrecognised character at Line 1, Pos 1
  • 21. How do we install these tools? • Manual installation • Chocolatey https://chocolatey.org
  • 22. How do we install these tools? PS> choco install git PS> choco install puppet-agent PS> choco install visualstudiocode PS> choco install ruby ruby2.devkit
  • 23. How do we install these tools? Common problems • Ruby Devkit can be tricky to install Manually install the devkit into your ruby installation
  • 24. • Setup environment • Create module • Debug tools • Test tools • Publish module • Next steps
  • 25. Create a Module – Where to start? • Beginner’s Guide to Modules • Module fundamentals
  • 26. Creating a Module - Tools Puppet Module Tool bundler rake
  • 27.
  • 28. • Setup environment • Create module • Debug tools • Test tools • Publish module • Next steps
  • 29. Debugging tools • pry Console driven debugger for ruby • pry-byebug Pry plugin to add step-by-step and stack debugging • pry-stack_explorer Pry plugin to navigate the call stack in ruby
  • 30. Debugging tools • Modify Gemfile • Bundle install … gem "pry" gem "pry-byebug" gem "pry-stack_explorer"
  • 32.
  • 33. • Setup environment • Create module • Debug tools • Test tools • Publish module • Next steps
  • 34. Why should I test?
  • 35. • The “un-happy” path • Document the intent • Avoid regression Why should I test?
  • 36. • Acceptance • Integration • Unit Types of tests
  • 37. Types of tests Where should I start? Start with unit and integration tests using automated tools
  • 38. Unit and Integration tests • rspec • rspec-mocks or mocha • rspec-puppet Testing tools
  • 39. Acceptance tests • beaker • beaker-rspec Testing tools
  • 40.
  • 41. • Setup environment • Create module • Debug tools • Test tools • Publish module • Next steps
  • 43.
  • 44. • Setup environment • Create module • Debug tools • Test tools • Publish module • Next steps
  • 45. • Setup environment • Create module • Debug tools • Test tools • Publish module • Next steps
  • 46. • Read up on testing • Learn more ruby • Add automated acceptance tests What’s next
  • 47. • Custom types and providers • Test your Windows modules on Linux nodes What’s next
  • 49. Links Source Control • The Release Pipeline Module http://aka.ms/thereleasepipelinemodelpdf • Ruby Installation http://rubyinstaller.org/downloads/ • Ruby DevKit https://github.com/oneclick/rubyinstaller/wiki/Development-Kit • What is the BOM https://en.wikipedia.org/wiki/Byte_order_mark • Chocolatey https://chocolatey.org/ • Puppet Extension for Visual Studio Code https://marketplace.visualstudio.com/items?itemName=Borke.Puppet Modules • Puppet Enterprise quick start guide for Windows users https://docs.puppet.com/pe/latest/quick_start_windows_intro.html • Beginner’s Guide to Modules https://docs.puppet.com/guides/module_guides/bgtm.html • Module fundamentals https://docs.puppet.com/puppet/latest/reference/modules_fundamentals.html • Ruby Bundler http://bundler.io/ • puppet module generate https://docs.puppet.com/puppet/latest/reference/modules_fundamentals.html#writing-modules
  • 50. Links Debugging • Pry http://pryrepl.org/ https://www.sitepoint.com/rubyists-time-pry-irb/ • pry-byebug https://github.com/deivid-rodriguez/pry-byebug • pry-stack_explorer https://github.com/pry/pry-stack_explorer Testing • Rspec http://rspec.info/ • rspec-puppet http://rspec-puppet.com/ • rspec-mocks https://github.com/rspec/rspec-mocks • mocha http://gofreerange.com/mocha/docs/ • beaker https://github.com/puppetlabs/beaker/blob/master/docs/README.md • beaker-rspec https://github.com/puppetlabs/beaker-rspec
  • 51. Links Publishing • puppet-blacksmith https://github.com/voxpupuli/puppet-blacksmith • Publishing modules on the forge https://docs.puppet.com/puppet/4.7/reference/modules_publishing.html • The metadata.json file https://docs.puppet.com/puppet/4.7/reference/modules_metadata.html Other • Puppet REPL A REPL for the puppet language https://github.com/nwops/puppet-repl • Puppet Skeleton Module Generator https://github.com/garethr/puppet-module-skeleton • Puppet Strings The next generation Puppet documentation extraction and presentation tool https://github.com/puppetlabs/puppet-strings

Editor's Notes

  1. Scenario 1. Starting out with Puppet using modules from the Forge 2. There's something you want to do but no module for it, so you resort to Exec's! 3. Then you need a Fact or some custom function and everything gets a little hard! 4. You start to investigate …
  2. Find all these terms in your searches…beaker, pry, bye-bug, uru, pik …. All this stuff just so you can create a module??!?!?! And then you … (freak out)
  3. BOOM you freak out….
  4. Smoke coming out of your ears and yours are bugging out….. and all you just want to do is write a puppet module…. …
  5. Today we’re going to go through creating a Puppet module for windows…that doesn’t involve you freaking out….. So the first thing we need to do is……Take a breath and walk through the things we need to do….
  6. Firstly, we need to setup or desktop/laptop with the tools we require…. We can then create a Puppet module, hopefully from a template of some kind, or from another example We know we’ll make errors so we need a way to debug out module
  7. We should have some tests….Tests are good Once we’ve got a working module, what do we do with it? Publish it What next?
  8. Not enough time in this session to go over ALL the reasons but here are some reasons
  9. Bottom line You will see the value of source control when you make a mistake Be kind to your future self. In 6 months (or 6 days in my case) time, you may forget WHY wrote that piece of code. This helps alot
  10. Do your developers already use git, or svn or mercurial, may be good to use that Do your friends, colleagues use something other than git. It’s good to have people you can ask for help
  11. Why should we be using ruby at all? Because Puppet is written in ruby and Puppet modules, testing etc. are all in ruby.
  12. Using ruby that’s installed as part of puppet-agent is ok, only if you never have any bugs and you don’t need to debug  We need to install some ruby gems with native extensions which requires the ruby-devkit. which is not available in the puppet-agent ruby installation
  13. I’ll be using VS Code with the ruby and puppet plugins for this demo. Why VS Code – xplat support, great multi-lang support (Powershell, batch, ruby, puppet)
  14. LF is more commonly used but it’s up to you BOMs break things
  15. Manual installs – they work initially but … Chocolatey is a package manager for windows which makes installing these tools much easier. Come to Rob Reynolds talk about Chocolatey after lunch if you want to learn more about it
  16. Choco commands to install it all No demo for this as it’s not very exciting….
  17. Should probably read these two documents from Puppet first. The direct links for these are at the end of the presentation. Even if you don’t fully understand everything the first time you read them, it will come in useful later when you actually start writing the module. e.g. what’s the template directory for, oh yeah I saw that in the beginner’s guide or where do I put facts
  18. Puppet module generate will create the beginnings of a module for us Rake is build automation tool. This is installed by default. It makes it easy to execute common tasks which we’ll use later. The gitignore file is used so that temporary files don’t show up when you’re using source control, in this case git.
  19. Demo create
  20. There are some IDEs that do offer debugging (Jetbrains Rubymine) but not everyone uses those instead we use a console driven debugger Pry - Pry is the main debugging tool which provides an interactive debug session during a ruby session, for example when you run puppet. You can view source code, inspect variables, modify variables inline and a bunch of useful things Pry-byebug Pry-byebug is a plugin for pry which adds step-by-step debugging and call stack navigation. Which we’ll show a bit alter Pry-stack_explorer pry-stack_explorer is a plugin for the Pry REPL that enables the user to navigate the call-stack. From the point a Pry session is started, the user can move up the stack through parent frames, examine state, and even evaluate code. Inside ruby a function calls a function calls a function calls a function etc. And the stack explorer can show each of those function calls so we can see exactly how we’re traversing our ruby code. Which we’ll show a bit later.
  21. How do we install these tools? Modify the gemfile, bundle install
  22. Inside our source code we add “require pry; binding.pry” to enter a debug session at that point
  23. Demo debug
  24. Firstly, I will not be able to do this subject justice in the time I have. There are a LOT of resources about testing, and testing infrastructure as code, but here are my top 3 reasons why you should test your puppet module…
  25. The un-happy path ------ We all test the Happy path when we’re writing a module, where everything works, but what about the un-happy path? What happens to our module if the user puts in bad data? A string instead of a number? How do we handle errors? Documentation of intent --- The tests actually serve as documentation. E.g. Most tests are written as “Given these inputs it should do this behaviour” This is a good way to document our module and the intent of how it should be behave Avoid regression ---- When you find an issue, write a test for it. From then on you can be sure it won’t happen again ‘
  26. There are MANY types of tests and to help not us not freak out, I’ll go through three types. Unit tests exercise a single component of a Puppet Module, typically that’s a function or a single fact. These are normally very quick. In our code example, we would write unit tests for the dotnet_version fact Integration tests exercise how components interact. In the case of a Puppet Module, a complex one like the Powershell Module, we have multiple complex functions so we test how they interact with each other. Or it may require interacting with operating system e.g. In Puppet we test our user resources by creating a temporary user account in Windows and then querying it using our functions.. These are typically a little slower than unit tests and as I said may require a specific operating system. Acceptance or End to End tests are the most time consuming. In these tests we would create a Puppet Master and Agent, put manifests on the Master and test that they have the intended behaviour. They are normally laid out in a pyramid because you normally want many unit tests, then less integration and then less acceptance. The higher up the pyramid, the more costly and time consuming the tests are and the slower you’ll get feedback on errors.
  27. Start with creating unit and integration tests. Manual acceptance tests are ok to start off with, but remember they take a lot of time are prone to error. Just remember “Your code is always tested, just differs by who. You the module writer or in production”
  28. Rspec (ruby spec) --- The standard testing tool for ruby and forms the basis for all testing Mocha --- Mocking support for rspec. This allows us to fake out responses during unit tests. For example, in out dotnetversion fact we can mock that dotnet is installed/not installed/ or gives a really weird response (unhappy path) Rspec-puppet ---- Adds extensions to rspec for puppet specific tasks, particularly useful for testing manifest based modules. E.g. checking resource compilation, mocking facts (without mocha) All of these tools are set in your gemfile via puppet generate so we already have these tools installed. Also as they’re all still ruby, you can use your debugging tools inside the tests.
  29. Beaker --- Is Puppet’s acceptance test harness. It helps coordinate creating Virtual Machines (or docker containers!) for masters and agents Beaker-rspec (optional) --- Like rspec-puppet, it adds helpers into rpsec to help with beaker operations e.g. Apply this puppet manifest on this host, or run this command on the node.
  30. Demo testing
  31. So we’ve got our working and tested module, now what!
  32. If we want to create a puppet module we can distribute either to the Forge or your own module repositories, we can use the ‘rake build’ task. This will create a tarball for us Puppet-blacksmith is a ruby gem that can help with automating the deployment to the Forge (no humans required)!
  33. Demo PMT
  34. Summarise what we went through
  35. Read up on testing as that will give you biggest reward for the effort. Add automated acceptance tests when you’re comfortable
  36. Read up on testing as that will give you biggest reward for the effort. Add automated acceptance tests when you’re comfortable If you’re in a mixed environment, test your Windows modules on Linux. Both our experience in Puppet and customers too, some Windows only modules behave a little odd when they’re run under linux. Also test out Linux modules in Windows!