SlideShare ist ein Scribd-Unternehmen logo
1 von 108
Downloaden Sie, um offline zu lesen
Designing Puppet:
                            Roles / Profiles Design Pattern

                           Puppet Camp Stockholm, Feb 2013




Thursday, 7 February 13
Hello
                     • Craig Dunn
                     • Puppet user since 2008 as an IT contractor
                     • Started with 0.24
                     • Joined Puppet Labs in June 2012
                     • @crayfishX
                     • Freenode IRC: crayfishx
Thursday, 7 February 13
Agenda
                     • How people typically design Puppet
                     • Real-world case study
                     • Thinking about components
                     • Designing Puppet for your users
                     • Node classification
                     • Data separation
Thursday, 7 February 13
Background

                     • Originally a blog post written in May 2012
                     • Advocated by many Puppet Labs Engineers
                     • Based on a real world solution
                     • Several community members have adopted
                          with success



Thursday, 7 February 13
Designing Puppet


                     • You write awesome modules
                     • You classify them to your node


Thursday, 7 February 13
Designing Puppet


                             Node Classification


                                 Modules




Thursday, 7 February 13
Down the road...
                     • Your infrastructure grows
                     • Business requirements will change
                     • Your Puppet code feels bulky and high
                          maintenence
                     • There will always be edge cases eventually
                     • You decide it needs refactoring
Thursday, 7 February 13
Danger Signs
                     • Resources being declared in two modules
                     • You don’t know where your
                          implementation “fits”
                     • Lot’s of logic at a node level
                     • Repetition and duplication
                     • The if statement is your go-to-guy
Thursday, 7 February 13
Write good modules

                     • Should manage only it’s own resources
                     • Should be granular
                     • Should be portable


Thursday, 7 February 13
Thinking beyond the
                               module....

                     • Puppet is a code base
                     • How do I design an effective framework
                     • Gluing everything together


Thursday, 7 February 13
Node-level logic

                     • Risks duplication and repetition
                     • No guarantee of consistency
                     • TMI!


Thursday, 7 February 13
Node-level logic
          node basil {
            class { ‘apache’:
              version => ‘latest’,
            }
            class { ‘motd’: }
            class { ‘ssh’: }
            class { ‘users’:
              default_shell => ‘/bin/false’,
            }
            Class[‘ssh’] -> Class[‘users’]
          }


Thursday, 7 February 13
Node-level logic

                     • What happens when I have 1000 nodes
                     • Or 10,000 nodes!!
                     • That’s a lot of code!
                     • So where should implement this?

Thursday, 7 February 13
Designing Puppet
                     • Provide business logic to classification
                     • Provide an abstraction layer for
                          implementation of components
                     • Make code adaptable to complex
                          requirements
                     • Reduce node-level logic
                     • Reduce functionality overlap
Thursday, 7 February 13
What is the worse
                              thing that is
                          going to happen to
                          your Puppet code?


Thursday, 7 February 13
Business requirements




Thursday, 7 February 13
Business logic does not
                   align with technology



Thursday, 7 February 13
Case study

                     • Real world problem
                     • Solved through design



Thursday, 7 February 13
Case study
                                  “We have 3
                                applications we
                              need to deploy using
                                    Puppet”




Thursday, 7 February 13
The business view


                               Application X



              Application Y                    Application Z



Thursday, 7 February 13
Go forth and
                           Puppetize!


Thursday, 7 February 13
Go forth and
                           Puppetize!
                          And we jumped right in...




Thursday, 7 February 13
Things got painful




Thursday, 7 February 13
Problems
                     • These applications aren’t that different
                     • They seem to share a whole bunch of
                          similarities
                     • Implementation differed on different
                          environments and locations
                     • Writing 3 separate modules creates
                          conflicts and duplication


Thursday, 7 February 13
Our code was hacky




Thursday, 7 February 13
We are trying to code
                        business logic.


Thursday, 7 February 13
Stop thinking about
                            what it looks like

                     • Break everything down into components
                     • Granularity is the key
                     • Think about what it actually is


Thursday, 7 February 13
What we realised


                     • Each application stack is a collection of a
                          subset of the same Java apps implemented
                          in different ways




Thursday, 7 February 13
The business view


                               Application X



              Application Y                    Application Z



Thursday, 7 February 13
The technical reality


                                   Application X


                              ApplicationApplication Z
                                         Y




Thursday, 7 February 13
We only have one
                             application

                          Implemented many
                            different ways
Thursday, 7 February 13
So we had an idea!

                     • Reduce each Java sub application into
                          granular Puppet modules
                     • Create a code layer responsible for
                          implementation
                     • Let’s call them profiles

Thursday, 7 February 13
class profiles::x {
        include tomcat
        include mysql
        include componenta
        include componentb
        componentb::resource { ‘name’:
          ensure => present,
        }
      }

      class profiles::y {
        include tomcat
        include mysql
        include componenta
        include componentc
        include componentd
      }

      class profiles::z {
        include tomcat
        include mysql
        include componenta
        include componentb
        include componentd
        include dependancy
        Class[‘dependancy’] -> Class[‘componentd’]
      }




Thursday, 7 February 13
Use inheritance for abstraction within profiles
     class profiles::application {
       include tomcat
       include mysql
       include componenta
     }

     class profiles::application::x inherits profiles::application {
       include componentb
       componentb::resource { ‘name’:
         ensure => present,
       }
     }

     class profiles::application::y inherits profiles::application {
       include componentc
       include componentd
     }

     class profiles::application::z inherits profiles::application {
       include componentb
       include componentd
       include dependancy
       Class[‘dependancy’] -> Class[‘componentd’]
     }



Thursday, 7 February 13
Profiles and
                          Components




                             Resources
Thursday, 7 February 13
Profiles and
                             Components



                          Components: Resource modelling


                                    Resources
Thursday, 7 February 13
Profiles and
                             Components

                              Profiles : Implementation


                          Components: Resource modelling


                                    Resources
Thursday, 7 February 13
In reality it was worse




Thursday, 7 February 13
In reality it was worse
                     • 2 different deployment types made up of
                          over 15 server types each




Thursday, 7 February 13
In reality it was worse
                     • 2 different deployment types made up of
                          over 15 server types each
                     • 10+ locations




Thursday, 7 February 13
In reality it was worse
                     • 2 different deployment types made up of
                          over 15 server types each
                     • 10+ locations
                     • 4 environment types



Thursday, 7 February 13
In reality it was worse
                     • 2 different deployment types made up of
                          over 15 server types each
                     • 10+ locations
                     • 4 environment types
                     • Every installation was an edge case!


Thursday, 7 February 13
In reality it was worse
                     • 2 different deployment types made up of
                          over 15 server types each
                     • 10+ locations
                     • 4 environment types
                     • Every installation was an edge case!
                     • My slides weren’t big enough.

Thursday, 7 February 13
Lessons learned

                     • Granularity is good
                     • Don’t assume business logic will directly
                          translate to technology
                     • Abstraction is awesome.... but that’s
                          nothing new....



Thursday, 7 February 13
Abstraction is a core
                           principle of coding
                     • Functions are abstracted by methods
                     • Methods abstracted by classes and modules
                     • They are abstracted with libraries
                     • Puppet is code!

Thursday, 7 February 13
Puppet is all about
                             abstraction
                     • Data is abstracted by Hiera
                     • Providers are abstracted by types
                     • Resources are abstracted by classes
                     • Classes are abstracted by modules

Thursday, 7 February 13
Puppet is all about
                             abstraction
                     • Data is abstracted by Hiera
                     • Providers are abstracted by types
                     • Resources are abstracted by classes
                     • Classes are abstracted by modules
                     • Modules are abstracted by profiles
Thursday, 7 February 13
Focussing on
                                   Abstraction
                     • We’ve turned business logic into a
                          technology stack
                     • Can we translate that back into business
                          logic?
                     • Why would we even want to do that?

Thursday, 7 February 13
UAT Cluster node
                          Our example configuration model:

                              include   security
                              include   users
                              include   ntp
                              include   ssh::server
                              include   customapp
                              include   tomcat::server

                              class { ‘jenkins’:
                                require => Class[‘tomcat::server’],
                              }

                              include mysql
                              database { ‘apptest’:
                                ensure => present,
                              }




Thursday, 7 February 13
Think about the users
                          Meet John, Susan and Bill.




Thursday, 7 February 13
John is a Sysadmin

                     • Wants to ensure all servers have kernel
                          hardening, NTP and SSH Server installed
                     • Wants to manage what packages, services,
                          files and other resources
                     • Is responsible for maintaining all the
                          components of a UAT cluster server



Thursday, 7 February 13
Susan is an application
                             specialist

                     • Cares that a UAT Cluster node requires
                          MySQL Server, Tomcat Server and Jenkins
                          server installed.




Thursday, 7 February 13
Bill is an IT manager


                     • Bill cares that the server is a UAT Cluster
                          node




Thursday, 7 February 13
What do they care
                               about?

                     • John cares about modelling all resources
                     • Susan cares about the technology stack
                     • Bill cares about the business logic


Thursday, 7 February 13
In Puppet

                     • Resource modelling is done in component
                          modules
                     • The technology stack is defined in profiles
                     • Where do we represent the business logic
                          for Bill?



Thursday, 7 February 13
Introducing Roles

                     • Represent business logic, not technology
                     • Define a set of technology stacks (profiles)
                          that make up the logical role
                     • Allow the business to manage how the
                          infrastructure looks without defining what it
                          is



Thursday, 7 February 13
A node can only have
                               one role
                     • A role can include as many profiles as
                          required to define itself
                     • If a node requires two roles, it has by
                          definition become a new role




Thursday, 7 February 13
A node can only have
                               one role
                     • A role can include as many profiles as
                          required to define itself
                     • If a node requires two roles, it has by
                          definition become a new role
                     • Something couldn’t be a lion and a
                          kangaroo at the same time!




Thursday, 7 February 13
It would be a Lingaroo




Thursday, 7 February 13
Roles

                     • One-to-one to nodes
                     • One-to-many to profiles
                     • Only implement profiles


Thursday, 7 February 13
Example role
                class role::uat_server {
                  include profiles::base
                  include profiles::customapp
                  include profiles::test_tools
                }




Thursday, 7 February 13
Classification


                     • Node classification simply assigns roles to
                          nodes
                     • Roles expose profiles


Thursday, 7 February 13
Classification

                          node ‘craig.puppetlabs.vm’ {
                            include roles::uat_server
                          }




Thursday, 7 February 13
Classification




Thursday, 7 February 13
The Stack




                            Resources
Thursday, 7 February 13
The Stack



                          Components: Resource modelling


                                    Resources
Thursday, 7 February 13
The Stack


                              Profiles : Implementation


                          Components: Resource modelling


                                    Resources
Thursday, 7 February 13
The Stack
                               Roles : Business Logic


                              Profiles : Implementation


                          Components: Resource modelling


                                    Resources
Thursday, 7 February 13
Terminology

                     • Profiles and Roles are Puppet modules
                     • Components are Puppet modules
                          responsible for modelling resources
                     • Everything is a module


Thursday, 7 February 13
Naming conventions
                     • Components should be named after what
                          they manage (apache, ssh, mysql)
                     • Profiles should be named after the logical
                          stack they implement (database, bastion,
                          email)
                     • Roles should be named in business logic
                          convention (uat_server, web_cluster,
                          application, archive)


Thursday, 7 February 13
Hiera Overview
                            Let’s talk about data!




Thursday, 7 February 13
Managing infrastructure

                          Dev




Thursday, 7 February 13
Managing infrastructure

                          Dev

                          QA




Thursday, 7 February 13
Managing infrastructure

                             Dev

                             QA

                          Production




Thursday, 7 February 13
Managing infrastructure

                             Dev

                             QA        DC1

                          Production




Thursday, 7 February 13
Managing infrastructure

                             Dev

                             QA        DC1   DC2   DC3

                          Production




Thursday, 7 February 13
Managing data in
                          Puppet is hard.




Thursday, 7 February 13
Without Hiera?
                          if ( $::environment == ‘dev’ ) {
                            $ntpserver = ‘192.168.2.1’
                          } else {
                            if ( $::fqdn == ‘host4.mycorp.com’) {
                              $ntpserver = ‘127.0.0.1’
                            } else {
                              $ntpserver = ‘213.21.6.4’
                            }
                          }




Thursday, 7 February 13
With Hiera?
                          $ntpserver = hiera(‘ntpserver’)




Thursday, 7 February 13
Hierarchical lookups

                     • Hiera uses facter facts to determine a
                          hierarchy
                     • Top down hierarchy for overriding
                          configuration values based on roles,
                          environments, locations.... or anything else
                     • And do this without any coding!

Thursday, 7 February 13
Separation of data from code


                     • Puppet modules without hard-coded data
                          are easily shared and more re-usable
                     • Infrastructure configuration can be
                          managed without needing to edit Puppet
                          code




Thursday, 7 February 13
Pluggable Backends
                     • Source data from multiple locations
                     • Data source is abstracted from code




Thursday, 7 February 13
Pluggable Backends
                     • Source data from multiple locations
                     • Data source is abstracted from code
                          • hiera-gpg     • hiera-redis
                          • hiera-http    • hiera-json
                          • hiera-mysql   • hiera-zookeeper

Thursday, 7 February 13
Data Separation

                     • Use Hiera to abstract your data from your
                          code
                     • Components and profiles can source data
                          from Hiera




Thursday, 7 February 13
Profiles and Hiera


                     • Use Hiera to model your data
                     • Use profiles to model your implementation


Thursday, 7 February 13
The Stack
                      Roles : Business Logic


                  Profiles : Implementation


   Components: Resource modelling


                           Resources

Thursday, 7 February 13
The Stack
                      Roles : Business Logic


                  Profiles : Implementation
                                               Hiera:
                                               Data
   Components: Resource modelling


                           Resources

Thursday, 7 February 13
Classification

                     • Assigning classes to a node
                     • You can classify within Puppet code
                          (site.pp)
                     • You can use an External Node Classifier
                          (ENC)



Thursday, 7 February 13
Leveraging an ENC
                     • You can classify your nodes however you
                          want
                          • Puppet Dashboard
                          • Enterprise Console
                          • Foreman
                          • Site.pp
                          • Custom script
Thursday, 7 February 13
Leveraging an ENC


                     • An ENC should classify a node to it’s role
                     • Nothing else


Thursday, 7 February 13
The Stack
                      Roles : Business Logic


                  Profiles : Implementation
                                               Hiera:
                                               Data
   Components: Resource modelling


                           Resources

Thursday, 7 February 13
The Stack
                      Roles : Business Logic   Classifier


                  Profiles : Implementation
                                                Hiera:
                                                Data
   Components: Resource modelling


                           Resources

Thursday, 7 February 13
Key benefits
                     • Reduced node-level logic to a role.
                     • Gain the ability to be flexible with
                          implementation
                     • Business logic improves managability by
                          non-Puppet users
                     • Edge cases are now easy to solve

Thursday, 7 February 13
Enough Preaching!




Thursday, 7 February 13
This is not the way to
                          design Puppet... It’s a
                                   way.


Thursday, 7 February 13
Can I implement this
                          design without roles?




Thursday, 7 February 13
Can I implement this
                          design without roles?

                     • Yes.
                     • You lose the layer of abstraction that
                          exposes business logic




Thursday, 7 February 13
Can my roles be
                          defined in my ENC?




Thursday, 7 February 13
Can my roles be
                          defined in my ENC?

                     • Yes.
                     • Keeping it in code makes it versionable


Thursday, 7 February 13
Can’t I just use Hiera
                           to define profiles?




Thursday, 7 February 13
Can’t I just use Hiera
                           to define profiles?
                     • Technically yes.
                     • You lose the flexibility to implement code
                          logic in profiles and it may become
                          restrictive
                     • You could possibly use: https://github.com/
                          ripienaar/hiera-puppet-nodes



Thursday, 7 February 13
The fundamental
                            concepts....




Thursday, 7 February 13
The fundamental
                            concepts....

                     • Abstraction, abstraction, abstraction




Thursday, 7 February 13
The fundamental
                               concepts....

                     • Abstraction, abstraction, abstraction
                     • Decoupling business logic, implementation
                          and resource modelling.




Thursday, 7 February 13
The fundamental
                               concepts....

                     • Abstraction, abstraction, abstraction
                     • Decoupling business logic, implementation
                          and resource modelling.
                     • Separating data and code

Thursday, 7 February 13
The fundamental
                               concepts....

                     • Abstraction, abstraction, abstraction
                     • Decoupling business logic, implementation
                          and resource modelling.
                     • Separating data and code
                     • Reducing node-level complexity
Thursday, 7 February 13
Other Resources

                     • Adrien Thebos’ excellent blog post                           http://
                          sysadvent.blogspot.co.uk/2012/12/day-13-configuration-management-as-
                          legos.html


                     • My original blog post
                          2012/05/239/
                                                             http://www.craigdunn.org/



                     • Module Structure Redux by R.I.Pienaar                              http://
                          www.devco.net/archives/2012/12/13/simple-puppet-module-structure-
                          redux.php




Thursday, 7 February 13
Thank you. Questions?


                     • Follow me at @crayfishX
                     • Bug me on Freenode: crayfishx
                                Enjoy the rest of Puppet Camp!
        In memory of Giles Constant, who spent many nights debating Puppet design patterns with me over copious amounts of beer
                       and helped me on my journey of discovery learning how to implement Puppet properly. R.I.P

Thursday, 7 February 13

Weitere ähnliche Inhalte

Was ist angesagt?

電子署名(PKI)ハンズオン資料 V1.00
電子署名(PKI)ハンズオン資料 V1.00電子署名(PKI)ハンズオン資料 V1.00
電子署名(PKI)ハンズオン資料 V1.00Naoto Miyachi
 
Authentication vs authorization
Authentication vs authorizationAuthentication vs authorization
Authentication vs authorizationFrank Victory
 
Pwning the Enterprise With PowerShell
Pwning the Enterprise With PowerShellPwning the Enterprise With PowerShell
Pwning the Enterprise With PowerShellBeau Bullock
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門Shuji Yamada
 
Kali linux useful tools
Kali linux useful toolsKali linux useful tools
Kali linux useful toolsmilad mahdavi
 
Introduction To OWASP
Introduction To OWASPIntroduction To OWASP
Introduction To OWASPMarco Morana
 
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_insideAuthlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_insideTatsuo Kudo
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014Nov Matake
 
Azure Backup と Azure Site Recovery
Azure Backup と Azure Site RecoveryAzure Backup と Azure Site Recovery
Azure Backup と Azure Site RecoveryJunji Yamamoto
 
Android Security & Penetration Testing
Android Security & Penetration TestingAndroid Security & Penetration Testing
Android Security & Penetration TestingSubho Halder
 
Jenkins Pipeline Tutorial | Jenkins Build And Delivery Pipeline | Jenkins Tut...
Jenkins Pipeline Tutorial | Jenkins Build And Delivery Pipeline | Jenkins Tut...Jenkins Pipeline Tutorial | Jenkins Build And Delivery Pipeline | Jenkins Tut...
Jenkins Pipeline Tutorial | Jenkins Build And Delivery Pipeline | Jenkins Tut...Simplilearn
 
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authleteいまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authleteTatsuo Kudo
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するKohei Tokunaga
 
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #apiTatsuo Kudo
 
Cyber Security - Unit - 4 - Introduction to Cyber Crime and law Cyber Crimes
Cyber Security - Unit - 4 - Introduction to Cyber Crime and law Cyber CrimesCyber Security - Unit - 4 - Introduction to Cyber Crime and law Cyber Crimes
Cyber Security - Unit - 4 - Introduction to Cyber Crime and law Cyber CrimesGyanmanjari Institute Of Technology
 

Was ist angesagt? (20)

127 iio a-new-subsystem
127 iio a-new-subsystem127 iio a-new-subsystem
127 iio a-new-subsystem
 
電子署名(PKI)ハンズオン資料 V1.00
電子署名(PKI)ハンズオン資料 V1.00電子署名(PKI)ハンズオン資料 V1.00
電子署名(PKI)ハンズオン資料 V1.00
 
Authentication vs authorization
Authentication vs authorizationAuthentication vs authorization
Authentication vs authorization
 
Pwning the Enterprise With PowerShell
Pwning the Enterprise With PowerShellPwning the Enterprise With PowerShell
Pwning the Enterprise With PowerShell
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門
 
Kali linux useful tools
Kali linux useful toolsKali linux useful tools
Kali linux useful tools
 
Introduction To OWASP
Introduction To OWASPIntroduction To OWASP
Introduction To OWASP
 
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_insideAuthlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
 
OpenStack入門 2016/06/27
OpenStack入門 2016/06/27OpenStack入門 2016/06/27
OpenStack入門 2016/06/27
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
 
Evil Twin
Evil TwinEvil Twin
Evil Twin
 
Azure Backup と Azure Site Recovery
Azure Backup と Azure Site RecoveryAzure Backup と Azure Site Recovery
Azure Backup と Azure Site Recovery
 
Wireshark
WiresharkWireshark
Wireshark
 
第31回「今アツい、分散ストレージを語ろう」(2013/11/28 on しすなま!)
第31回「今アツい、分散ストレージを語ろう」(2013/11/28 on しすなま!)第31回「今アツい、分散ストレージを語ろう」(2013/11/28 on しすなま!)
第31回「今アツい、分散ストレージを語ろう」(2013/11/28 on しすなま!)
 
Android Security & Penetration Testing
Android Security & Penetration TestingAndroid Security & Penetration Testing
Android Security & Penetration Testing
 
Jenkins Pipeline Tutorial | Jenkins Build And Delivery Pipeline | Jenkins Tut...
Jenkins Pipeline Tutorial | Jenkins Build And Delivery Pipeline | Jenkins Tut...Jenkins Pipeline Tutorial | Jenkins Build And Delivery Pipeline | Jenkins Tut...
Jenkins Pipeline Tutorial | Jenkins Build And Delivery Pipeline | Jenkins Tut...
 
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authleteいまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
 
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
「金融API向けOAuth」にみるOAuthプロファイリングの実際 #secjaws #finsecjaws01 #oauth #oidc #api
 
Cyber Security - Unit - 4 - Introduction to Cyber Crime and law Cyber Crimes
Cyber Security - Unit - 4 - Introduction to Cyber Crime and law Cyber CrimesCyber Security - Unit - 4 - Introduction to Cyber Crime and law Cyber Crimes
Cyber Security - Unit - 4 - Introduction to Cyber Crime and law Cyber Crimes
 

Andere mochten auch (6)

UPDATED SOCCSKSARGEN Regional Development Plan, 2013-2016
UPDATED SOCCSKSARGEN Regional Development Plan, 2013-2016UPDATED SOCCSKSARGEN Regional Development Plan, 2013-2016
UPDATED SOCCSKSARGEN Regional Development Plan, 2013-2016
 
SOCCSKSARGEN Regional Development Report 2016
SOCCSKSARGEN Regional Development Report 2016SOCCSKSARGEN Regional Development Report 2016
SOCCSKSARGEN Regional Development Report 2016
 
Regional Physical Framework Plan, 2004 2030 of SOCCSKSARGEN
Regional Physical Framework Plan, 2004 2030 of SOCCSKSARGENRegional Physical Framework Plan, 2004 2030 of SOCCSKSARGEN
Regional Physical Framework Plan, 2004 2030 of SOCCSKSARGEN
 
Region IV-B Mimaropa Geography
Region IV-B Mimaropa GeographyRegion IV-B Mimaropa Geography
Region IV-B Mimaropa Geography
 
Building construction-report (1)
Building construction-report (1)Building construction-report (1)
Building construction-report (1)
 
Region x northern mindanao
Region x  northern mindanaoRegion x  northern mindanao
Region x northern mindanao
 

Ähnlich wie Designing Puppet: Roles/Profiles Pattern

Intro to BAScene framework for Mac
Intro to BAScene framework for MacIntro to BAScene framework for Mac
Intro to BAScene framework for Macbgulanowski
 
5 Of Our Favorite Ruby Gems
5 Of Our Favorite Ruby Gems5 Of Our Favorite Ruby Gems
5 Of Our Favorite Ruby GemsDan Pickett
 
State of Puppet
State of PuppetState of Puppet
State of PuppetPuppet
 
Cloud4all Architecture Overview
Cloud4all Architecture OverviewCloud4all Architecture Overview
Cloud4all Architecture Overviewicchp2012
 
Distributed Fuzzing Framework Design
Distributed Fuzzing Framework DesignDistributed Fuzzing Framework Design
Distributed Fuzzing Framework Designbannedit
 
Smalltalk and ruby - 2012-12-08
Smalltalk and ruby  - 2012-12-08Smalltalk and ruby  - 2012-12-08
Smalltalk and ruby - 2012-12-08Koan-Sin Tan
 
GitHub Notable OSS Project
GitHub  Notable OSS ProjectGitHub  Notable OSS Project
GitHub Notable OSS Projectroumia
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.jsTroy Miles
 
Puppet @ Nedap
Puppet @ NedapPuppet @ Nedap
Puppet @ NedapPuppet
 
Writing Reusable Web Components with jQuery and jQuery UI
Writing Reusable Web Components with jQuery and jQuery UIWriting Reusable Web Components with jQuery and jQuery UI
Writing Reusable Web Components with jQuery and jQuery UIYnon Perek
 
Invokedynamic in 45 Minutes
Invokedynamic in 45 MinutesInvokedynamic in 45 Minutes
Invokedynamic in 45 MinutesCharles Nutter
 
JavaOne 2012, OSGi for the Earthlings: Meet Eclipse Libra
JavaOne 2012, OSGi for the Earthlings: Meet Eclipse LibraJavaOne 2012, OSGi for the Earthlings: Meet Eclipse Libra
JavaOne 2012, OSGi for the Earthlings: Meet Eclipse LibraMurat Yener
 
Enterprise javascriptsession1
Enterprise javascriptsession1Enterprise javascriptsession1
Enterprise javascriptsession1Troy Miles
 
Launching Mixer: What Worked, What didn't
Launching Mixer: What Worked, What didn'tLaunching Mixer: What Worked, What didn't
Launching Mixer: What Worked, What didn'tChris Connell
 
Scaling Puppet Usage to a Global Organization
Scaling Puppet Usage to a Global OrganizationScaling Puppet Usage to a Global Organization
Scaling Puppet Usage to a Global OrganizationPuppet
 
99 inception-deck
99 inception-deck99 inception-deck
99 inception-deckdrewz lin
 

Ähnlich wie Designing Puppet: Roles/Profiles Pattern (20)

Intro to BAScene framework for Mac
Intro to BAScene framework for MacIntro to BAScene framework for Mac
Intro to BAScene framework for Mac
 
5 Of Our Favorite Ruby Gems
5 Of Our Favorite Ruby Gems5 Of Our Favorite Ruby Gems
5 Of Our Favorite Ruby Gems
 
State of Puppet
State of PuppetState of Puppet
State of Puppet
 
Cloud4all Architecture Overview
Cloud4all Architecture OverviewCloud4all Architecture Overview
Cloud4all Architecture Overview
 
Distributed Fuzzing Framework Design
Distributed Fuzzing Framework DesignDistributed Fuzzing Framework Design
Distributed Fuzzing Framework Design
 
Smalltalk and ruby - 2012-12-08
Smalltalk and ruby  - 2012-12-08Smalltalk and ruby  - 2012-12-08
Smalltalk and ruby - 2012-12-08
 
GitHub Notable OSS Project
GitHub  Notable OSS ProjectGitHub  Notable OSS Project
GitHub Notable OSS Project
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Puppet @ Nedap
Puppet @ NedapPuppet @ Nedap
Puppet @ Nedap
 
Writing Reusable Web Components with jQuery and jQuery UI
Writing Reusable Web Components with jQuery and jQuery UIWriting Reusable Web Components with jQuery and jQuery UI
Writing Reusable Web Components with jQuery and jQuery UI
 
Invokedynamic in 45 Minutes
Invokedynamic in 45 MinutesInvokedynamic in 45 Minutes
Invokedynamic in 45 Minutes
 
JavaOne 2012, OSGi for the Earthlings: Meet Eclipse Libra
JavaOne 2012, OSGi for the Earthlings: Meet Eclipse LibraJavaOne 2012, OSGi for the Earthlings: Meet Eclipse Libra
JavaOne 2012, OSGi for the Earthlings: Meet Eclipse Libra
 
Enterprise javascriptsession1
Enterprise javascriptsession1Enterprise javascriptsession1
Enterprise javascriptsession1
 
Agile framework Support
Agile framework SupportAgile framework Support
Agile framework Support
 
Launching Mixer: What Worked, What didn't
Launching Mixer: What Worked, What didn'tLaunching Mixer: What Worked, What didn't
Launching Mixer: What Worked, What didn't
 
Building fb mobile
Building fb mobileBuilding fb mobile
Building fb mobile
 
Devoxx Java Social and Agorava
Devoxx Java Social and AgoravaDevoxx Java Social and Agorava
Devoxx Java Social and Agorava
 
Scaling Puppet Usage to a Global Organization
Scaling Puppet Usage to a Global OrganizationScaling Puppet Usage to a Global Organization
Scaling Puppet Usage to a Global Organization
 
99 inception-deck
99 inception-deck99 inception-deck
99 inception-deck
 
App Engine Meetup
App Engine MeetupApp Engine Meetup
App Engine Meetup
 

Mehr von Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyamlPuppet
 
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 vscodePuppet
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twentiesPuppet
 
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 codePuppet
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approachPuppet
 
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 automationPuppet
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliancePuppet
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowPuppet
 
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 WindowsPuppet
 
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. 2020Puppet
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppetPuppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet
 
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 ReeuwijkPuppet
 
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 groundPuppet
 
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 SoftwarePuppet
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User GroupPuppet
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsPuppet
 
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 MaludyPuppet
 

Mehr von 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
 

Kürzlich hochgeladen

Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 

Kürzlich hochgeladen (20)

Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 

Designing Puppet: Roles/Profiles Pattern

  • 1. Designing Puppet: Roles / Profiles Design Pattern Puppet Camp Stockholm, Feb 2013 Thursday, 7 February 13
  • 2. Hello • Craig Dunn • Puppet user since 2008 as an IT contractor • Started with 0.24 • Joined Puppet Labs in June 2012 • @crayfishX • Freenode IRC: crayfishx Thursday, 7 February 13
  • 3. Agenda • How people typically design Puppet • Real-world case study • Thinking about components • Designing Puppet for your users • Node classification • Data separation Thursday, 7 February 13
  • 4. Background • Originally a blog post written in May 2012 • Advocated by many Puppet Labs Engineers • Based on a real world solution • Several community members have adopted with success Thursday, 7 February 13
  • 5. Designing Puppet • You write awesome modules • You classify them to your node Thursday, 7 February 13
  • 6. Designing Puppet Node Classification Modules Thursday, 7 February 13
  • 7. Down the road... • Your infrastructure grows • Business requirements will change • Your Puppet code feels bulky and high maintenence • There will always be edge cases eventually • You decide it needs refactoring Thursday, 7 February 13
  • 8. Danger Signs • Resources being declared in two modules • You don’t know where your implementation “fits” • Lot’s of logic at a node level • Repetition and duplication • The if statement is your go-to-guy Thursday, 7 February 13
  • 9. Write good modules • Should manage only it’s own resources • Should be granular • Should be portable Thursday, 7 February 13
  • 10. Thinking beyond the module.... • Puppet is a code base • How do I design an effective framework • Gluing everything together Thursday, 7 February 13
  • 11. Node-level logic • Risks duplication and repetition • No guarantee of consistency • TMI! Thursday, 7 February 13
  • 12. Node-level logic node basil { class { ‘apache’: version => ‘latest’, } class { ‘motd’: } class { ‘ssh’: } class { ‘users’: default_shell => ‘/bin/false’, } Class[‘ssh’] -> Class[‘users’] } Thursday, 7 February 13
  • 13. Node-level logic • What happens when I have 1000 nodes • Or 10,000 nodes!! • That’s a lot of code! • So where should implement this? Thursday, 7 February 13
  • 14. Designing Puppet • Provide business logic to classification • Provide an abstraction layer for implementation of components • Make code adaptable to complex requirements • Reduce node-level logic • Reduce functionality overlap Thursday, 7 February 13
  • 15. What is the worse thing that is going to happen to your Puppet code? Thursday, 7 February 13
  • 17. Business logic does not align with technology Thursday, 7 February 13
  • 18. Case study • Real world problem • Solved through design Thursday, 7 February 13
  • 19. Case study “We have 3 applications we need to deploy using Puppet” Thursday, 7 February 13
  • 20. The business view Application X Application Y Application Z Thursday, 7 February 13
  • 21. Go forth and Puppetize! Thursday, 7 February 13
  • 22. Go forth and Puppetize! And we jumped right in... Thursday, 7 February 13
  • 24. Problems • These applications aren’t that different • They seem to share a whole bunch of similarities • Implementation differed on different environments and locations • Writing 3 separate modules creates conflicts and duplication Thursday, 7 February 13
  • 25. Our code was hacky Thursday, 7 February 13
  • 26. We are trying to code business logic. Thursday, 7 February 13
  • 27. Stop thinking about what it looks like • Break everything down into components • Granularity is the key • Think about what it actually is Thursday, 7 February 13
  • 28. What we realised • Each application stack is a collection of a subset of the same Java apps implemented in different ways Thursday, 7 February 13
  • 29. The business view Application X Application Y Application Z Thursday, 7 February 13
  • 30. The technical reality Application X ApplicationApplication Z Y Thursday, 7 February 13
  • 31. We only have one application Implemented many different ways Thursday, 7 February 13
  • 32. So we had an idea! • Reduce each Java sub application into granular Puppet modules • Create a code layer responsible for implementation • Let’s call them profiles Thursday, 7 February 13
  • 33. class profiles::x { include tomcat include mysql include componenta include componentb componentb::resource { ‘name’: ensure => present, } } class profiles::y { include tomcat include mysql include componenta include componentc include componentd } class profiles::z { include tomcat include mysql include componenta include componentb include componentd include dependancy Class[‘dependancy’] -> Class[‘componentd’] } Thursday, 7 February 13
  • 34. Use inheritance for abstraction within profiles class profiles::application { include tomcat include mysql include componenta } class profiles::application::x inherits profiles::application { include componentb componentb::resource { ‘name’: ensure => present, } } class profiles::application::y inherits profiles::application { include componentc include componentd } class profiles::application::z inherits profiles::application { include componentb include componentd include dependancy Class[‘dependancy’] -> Class[‘componentd’] } Thursday, 7 February 13
  • 35. Profiles and Components Resources Thursday, 7 February 13
  • 36. Profiles and Components Components: Resource modelling Resources Thursday, 7 February 13
  • 37. Profiles and Components Profiles : Implementation Components: Resource modelling Resources Thursday, 7 February 13
  • 38. In reality it was worse Thursday, 7 February 13
  • 39. In reality it was worse • 2 different deployment types made up of over 15 server types each Thursday, 7 February 13
  • 40. In reality it was worse • 2 different deployment types made up of over 15 server types each • 10+ locations Thursday, 7 February 13
  • 41. In reality it was worse • 2 different deployment types made up of over 15 server types each • 10+ locations • 4 environment types Thursday, 7 February 13
  • 42. In reality it was worse • 2 different deployment types made up of over 15 server types each • 10+ locations • 4 environment types • Every installation was an edge case! Thursday, 7 February 13
  • 43. In reality it was worse • 2 different deployment types made up of over 15 server types each • 10+ locations • 4 environment types • Every installation was an edge case! • My slides weren’t big enough. Thursday, 7 February 13
  • 44. Lessons learned • Granularity is good • Don’t assume business logic will directly translate to technology • Abstraction is awesome.... but that’s nothing new.... Thursday, 7 February 13
  • 45. Abstraction is a core principle of coding • Functions are abstracted by methods • Methods abstracted by classes and modules • They are abstracted with libraries • Puppet is code! Thursday, 7 February 13
  • 46. Puppet is all about abstraction • Data is abstracted by Hiera • Providers are abstracted by types • Resources are abstracted by classes • Classes are abstracted by modules Thursday, 7 February 13
  • 47. Puppet is all about abstraction • Data is abstracted by Hiera • Providers are abstracted by types • Resources are abstracted by classes • Classes are abstracted by modules • Modules are abstracted by profiles Thursday, 7 February 13
  • 48. Focussing on Abstraction • We’ve turned business logic into a technology stack • Can we translate that back into business logic? • Why would we even want to do that? Thursday, 7 February 13
  • 49. UAT Cluster node Our example configuration model: include security include users include ntp include ssh::server include customapp include tomcat::server class { ‘jenkins’: require => Class[‘tomcat::server’], } include mysql database { ‘apptest’: ensure => present, } Thursday, 7 February 13
  • 50. Think about the users Meet John, Susan and Bill. Thursday, 7 February 13
  • 51. John is a Sysadmin • Wants to ensure all servers have kernel hardening, NTP and SSH Server installed • Wants to manage what packages, services, files and other resources • Is responsible for maintaining all the components of a UAT cluster server Thursday, 7 February 13
  • 52. Susan is an application specialist • Cares that a UAT Cluster node requires MySQL Server, Tomcat Server and Jenkins server installed. Thursday, 7 February 13
  • 53. Bill is an IT manager • Bill cares that the server is a UAT Cluster node Thursday, 7 February 13
  • 54. What do they care about? • John cares about modelling all resources • Susan cares about the technology stack • Bill cares about the business logic Thursday, 7 February 13
  • 55. In Puppet • Resource modelling is done in component modules • The technology stack is defined in profiles • Where do we represent the business logic for Bill? Thursday, 7 February 13
  • 56. Introducing Roles • Represent business logic, not technology • Define a set of technology stacks (profiles) that make up the logical role • Allow the business to manage how the infrastructure looks without defining what it is Thursday, 7 February 13
  • 57. A node can only have one role • A role can include as many profiles as required to define itself • If a node requires two roles, it has by definition become a new role Thursday, 7 February 13
  • 58. A node can only have one role • A role can include as many profiles as required to define itself • If a node requires two roles, it has by definition become a new role • Something couldn’t be a lion and a kangaroo at the same time! Thursday, 7 February 13
  • 59. It would be a Lingaroo Thursday, 7 February 13
  • 60. Roles • One-to-one to nodes • One-to-many to profiles • Only implement profiles Thursday, 7 February 13
  • 61. Example role class role::uat_server { include profiles::base include profiles::customapp include profiles::test_tools } Thursday, 7 February 13
  • 62. Classification • Node classification simply assigns roles to nodes • Roles expose profiles Thursday, 7 February 13
  • 63. Classification node ‘craig.puppetlabs.vm’ { include roles::uat_server } Thursday, 7 February 13
  • 65. The Stack Resources Thursday, 7 February 13
  • 66. The Stack Components: Resource modelling Resources Thursday, 7 February 13
  • 67. The Stack Profiles : Implementation Components: Resource modelling Resources Thursday, 7 February 13
  • 68. The Stack Roles : Business Logic Profiles : Implementation Components: Resource modelling Resources Thursday, 7 February 13
  • 69. Terminology • Profiles and Roles are Puppet modules • Components are Puppet modules responsible for modelling resources • Everything is a module Thursday, 7 February 13
  • 70. Naming conventions • Components should be named after what they manage (apache, ssh, mysql) • Profiles should be named after the logical stack they implement (database, bastion, email) • Roles should be named in business logic convention (uat_server, web_cluster, application, archive) Thursday, 7 February 13
  • 71. Hiera Overview Let’s talk about data! Thursday, 7 February 13
  • 72. Managing infrastructure Dev Thursday, 7 February 13
  • 73. Managing infrastructure Dev QA Thursday, 7 February 13
  • 74. Managing infrastructure Dev QA Production Thursday, 7 February 13
  • 75. Managing infrastructure Dev QA DC1 Production Thursday, 7 February 13
  • 76. Managing infrastructure Dev QA DC1 DC2 DC3 Production Thursday, 7 February 13
  • 77. Managing data in Puppet is hard. Thursday, 7 February 13
  • 78. Without Hiera? if ( $::environment == ‘dev’ ) { $ntpserver = ‘192.168.2.1’ } else { if ( $::fqdn == ‘host4.mycorp.com’) { $ntpserver = ‘127.0.0.1’ } else { $ntpserver = ‘213.21.6.4’ } } Thursday, 7 February 13
  • 79. With Hiera? $ntpserver = hiera(‘ntpserver’) Thursday, 7 February 13
  • 80. Hierarchical lookups • Hiera uses facter facts to determine a hierarchy • Top down hierarchy for overriding configuration values based on roles, environments, locations.... or anything else • And do this without any coding! Thursday, 7 February 13
  • 81. Separation of data from code • Puppet modules without hard-coded data are easily shared and more re-usable • Infrastructure configuration can be managed without needing to edit Puppet code Thursday, 7 February 13
  • 82. Pluggable Backends • Source data from multiple locations • Data source is abstracted from code Thursday, 7 February 13
  • 83. Pluggable Backends • Source data from multiple locations • Data source is abstracted from code • hiera-gpg • hiera-redis • hiera-http • hiera-json • hiera-mysql • hiera-zookeeper Thursday, 7 February 13
  • 84. Data Separation • Use Hiera to abstract your data from your code • Components and profiles can source data from Hiera Thursday, 7 February 13
  • 85. Profiles and Hiera • Use Hiera to model your data • Use profiles to model your implementation Thursday, 7 February 13
  • 86. The Stack Roles : Business Logic Profiles : Implementation Components: Resource modelling Resources Thursday, 7 February 13
  • 87. The Stack Roles : Business Logic Profiles : Implementation Hiera: Data Components: Resource modelling Resources Thursday, 7 February 13
  • 88. Classification • Assigning classes to a node • You can classify within Puppet code (site.pp) • You can use an External Node Classifier (ENC) Thursday, 7 February 13
  • 89. Leveraging an ENC • You can classify your nodes however you want • Puppet Dashboard • Enterprise Console • Foreman • Site.pp • Custom script Thursday, 7 February 13
  • 90. Leveraging an ENC • An ENC should classify a node to it’s role • Nothing else Thursday, 7 February 13
  • 91. The Stack Roles : Business Logic Profiles : Implementation Hiera: Data Components: Resource modelling Resources Thursday, 7 February 13
  • 92. The Stack Roles : Business Logic Classifier Profiles : Implementation Hiera: Data Components: Resource modelling Resources Thursday, 7 February 13
  • 93. Key benefits • Reduced node-level logic to a role. • Gain the ability to be flexible with implementation • Business logic improves managability by non-Puppet users • Edge cases are now easy to solve Thursday, 7 February 13
  • 95. This is not the way to design Puppet... It’s a way. Thursday, 7 February 13
  • 96. Can I implement this design without roles? Thursday, 7 February 13
  • 97. Can I implement this design without roles? • Yes. • You lose the layer of abstraction that exposes business logic Thursday, 7 February 13
  • 98. Can my roles be defined in my ENC? Thursday, 7 February 13
  • 99. Can my roles be defined in my ENC? • Yes. • Keeping it in code makes it versionable Thursday, 7 February 13
  • 100. Can’t I just use Hiera to define profiles? Thursday, 7 February 13
  • 101. Can’t I just use Hiera to define profiles? • Technically yes. • You lose the flexibility to implement code logic in profiles and it may become restrictive • You could possibly use: https://github.com/ ripienaar/hiera-puppet-nodes Thursday, 7 February 13
  • 102. The fundamental concepts.... Thursday, 7 February 13
  • 103. The fundamental concepts.... • Abstraction, abstraction, abstraction Thursday, 7 February 13
  • 104. The fundamental concepts.... • Abstraction, abstraction, abstraction • Decoupling business logic, implementation and resource modelling. Thursday, 7 February 13
  • 105. The fundamental concepts.... • Abstraction, abstraction, abstraction • Decoupling business logic, implementation and resource modelling. • Separating data and code Thursday, 7 February 13
  • 106. The fundamental concepts.... • Abstraction, abstraction, abstraction • Decoupling business logic, implementation and resource modelling. • Separating data and code • Reducing node-level complexity Thursday, 7 February 13
  • 107. Other Resources • Adrien Thebos’ excellent blog post http:// sysadvent.blogspot.co.uk/2012/12/day-13-configuration-management-as- legos.html • My original blog post 2012/05/239/ http://www.craigdunn.org/ • Module Structure Redux by R.I.Pienaar http:// www.devco.net/archives/2012/12/13/simple-puppet-module-structure- redux.php Thursday, 7 February 13
  • 108. Thank you. Questions? • Follow me at @crayfishX • Bug me on Freenode: crayfishx Enjoy the rest of Puppet Camp! In memory of Giles Constant, who spent many nights debating Puppet design patterns with me over copious amounts of beer and helped me on my journey of discovery learning how to implement Puppet properly. R.I.P Thursday, 7 February 13