SlideShare ist ein Scribd-Unternehmen logo
1 von 82
Downloaden Sie, um offline zu lesen
Diving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers Development
The Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync Module
Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto
PuppetCamp Paris, June 7th, 2016
$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user
Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto
• Open-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.eu
• Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)
• Member of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuli
• Puppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributor
• The Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributor
• @roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie on irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/github
inuits.eu
Puppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & Providers
Licensed under a Creative Commons Attribution 2.0 License
https://www.flickr.com/photos/mseckington/3445427966
Puppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarative
package {
'nginx':
ensure => present,
}
AbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstraction
• Puppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSL
• …describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources
• …defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types
• …implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers
Puppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSL
package {
'nginx':
ensure => present,
}
Puppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSL
package {
'nginx':
ensure => present,
provider => 'gem',
}
ClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabsClusterlabs
Licensed under a Creative Commons Attribution 2.0 License
https://www.flickr.com/photos/blondinrikard/8455288325
Clusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suite
• High-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability tools
• Manage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availability
• Decides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services run
• Manages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP's
Clusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs components
• Resource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate services
Start, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, Stop
MonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitor
Promote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, Demote
• Corosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communication
• Pacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisions
Who runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runs
WhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhere
Who is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is master
……………………………………………
http://clusterlabs.org/img/Deploy.20121116.png
Inside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a cluster
• Primitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, Service
• Location Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they run
• Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?
• Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?
• ……………………………………………
http://puppetlabs.com
Puppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a cluster
• Ensures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config sync
• Ensures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistent
• Increase confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updates
• Multiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prod
The old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old way
• Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011
• Put the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a file
• Reload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changes
The old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old way
file { '/etc/cluster/cib.cfg':
ensure => 'file',
content => template('ms−cluster/cib−drbd.cfg.erb'),
group => '0',
mode => '0644',
owner => '0',
}
exec { 'loadcrmconfig':
refreshonly => true,
command => '/usr/sbin/crm configure load replace /
etc/cluster/cib.cfg',
subscribe => File['/etc/cluster/cib.cfg'],
}
Execs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are bad
• refreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failure
• complex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyif
• command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()
Puppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-Corosync
• A "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" module
• Managing the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster services
CorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosync
PacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemaker
CMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMAN
pcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsd
• Good but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interest
• Define good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providers
Puppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-Corosync
• Uses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the back
• crm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIB
• It was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distros
Puppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync types
• cs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitive
• cs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_group
• cs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_location
• cs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocation
• cs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clone
The Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs Schism
• 2013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.4
• Removes support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crm
• Implements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcs
• crm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymore
• pcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggy
2013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-2015
• Puppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowly
• Joshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcs
• I continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementation
• Puppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LT
• Please git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to community
2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards
• Puppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to Voxpupuli
• Now it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active module
• With unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance tests
• Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2
• Pull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixed
Types and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and Providers
Types and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and Providers
• Built-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providers
User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…
Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …
Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …
Stable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet version
• Custom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providers
Distributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modules
Concat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concat
Acl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posix
Cs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crm
PluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsync
• lib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of modules
• lib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/provider
• lib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/type
• can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …
TypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypes
Puppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet type
• A Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource Type
• Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)
• Has parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and properties
• Parameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for Puppetization
• Property: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can check
cs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rbcs_primitive.rb
Puppet::Type.newtype(:cs_primitive) do
@doc = "Type for manipulating
Corosync/Pacemaker primitives."
ensurable
end
namevarnamevarnamevarnamevarnamevarnamevarnamevarnamevarnamevarnamevarnamevarnamevarnamevarnamevarnamevarnamevarnamevar
newparam(:name) do
desc "Name identifier of primitive."
isnamevar
end
Simple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameter
newparam(:cib) do
desc "Name of the shadow CIB this
primitive should be created in."
end
Simple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple Property
newproperty(:parameters) do
desc "Hash of params for the primitive."
end
Pre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined values
newproperty(:kind) do
desc "Designates the kindness of the
rule"
newvalues(:Optional , :Mandatory)
defaultto :Optional
end
newvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvalues
• List of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted values
• Any other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an error
• Accept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept Regexes
• Implies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checks
ValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidation
newproperty(:parameters) do
desc "Hash of params for the primitive."
validate do |value|
raise Puppet::Error , 'Must be a hash.'
unless value.is_a? Hash
end
defaultto Hash.new
end
validatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidate
• Function inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/property
• Cheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecations
• Never trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user input
• Type checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checking
mungemungemungemungemungemungemungemungemungemungemungemungemungemungemungemungemunge
newproperty(:first) do
desc "First Corosync primitive."
munge do |value|
value = "#{value}:start" unless value.
include?(':')
value
end
end
mungemungemungemungemungemungemungemungemungemungemungemungemungemungemungemungemunge
• Transform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user input
• NormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalize
• Can be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibility
insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?
newproperty(:epoch) do
def insync?(is)
return true if ! @resource.replace?
super
end
end
insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?
• Checks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in sync
• If it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual content
Cosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functions
• change_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_s
• String used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon change
booleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanboolean
require 'puppet/parameter/boolean'
newparam(:force , :boolean => true, :parent
=> Puppet::Parameter::Boolean)
autorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequiresautorequires
autorequire(:cs_shadow) do
autos = []
autos << @parameters[:cib].value if
@parameters[:cib]
autos
end
autorequire(:service) do
%w(corosync pacemaker)
end
generate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resources
def generate
return [] if self[:autocommit] != true
options = { name: @title }
[Puppet::Type.type(:cs_commit).new(
options)]
end
TypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypes
• Types describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe items
• They are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users use
• They should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be complete
• No interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with system
ProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProviders
ProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProviders
• Get the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resources
• Change the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired state
ProviderProviderProviderProviderProviderProviderProviderProviderProviderProviderProviderProviderProviderProviderProviderProviderProvider
Puppet::Type.type(:cs_primitive).provide(:
pcs) do
desc 'Manage cs_primitives with the pcs
command'
end
How providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers work
• Fetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressource
• Fetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at once
• One type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providers
Pick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right provider
• Using installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commands
• Using factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing facts
• Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)
Provider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choice
commands :cmd => "yum", :rpm => "rpm"
if command('rpm')
confine :true => begin
rpm('−−version')
rescue Puppet::ExecutionFailure
false
else
true
end
end
defaultfor :osfamily => :redhat
Explicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit provider
package {
'nginx':
ensure => present,
provider => 'gem',
}
PrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetch
• Fetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources first
• Then create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is needed
• Very efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficient
prefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetching
def self.instances
instances = []
cmd = [command(:pcs), 'cluster', 'cib']
raw, = run_command_in_cib(cmd)
doc = REXML::Document.new(raw)
REXML::XPath.each(doc, '//primitive') do
|e|
instances << new(element_to_hash(e))
end
instances
end
prefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetching
resources { 'cs_primitive':
purge => true ,
noop => true ,
}
Applying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying change
• Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)
• Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)
set per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per property
def mode=(value)
File.chmod(value.to_i(8), resource[:
path])
end
flushflushflushflushflushflushflushflushflushflushflushflushflushflushflushflushflush
mk_resource_methods
def flush
unless @property_hash.empty?
cmd = [command(:pcs), 'property', 'set
', "#{@property_hash[:name]}=#{
@property_hash[:value]}"]
run_command_in_cib(cmd)
end
end
FeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeatures
• Not all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equal
• systemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask services
• sysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can not
In the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the provider
has_feature :kindness
Check for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a feature
def flush
unless @property_hash.empty?
updated << " kind=#{@property_hash[:
kind]}" if feature? :kindness
end
end
Restrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in type
newproperty(:kind , required_features: :
kindness) do
desc "How to enforce the constraint."
end
TestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTesting
Licensed under a Creative Commons Attribution 2.0 License
https://www.flickr.com/photos/dahlstroms/3945656390
Testing typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting types
• Unit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit tests
• Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …
• Test presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentation
Testing providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providers
• Unit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit tests
• Test resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methods
• Mock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to run
• Mock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to B
Testing providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providers
• Acceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance tests
• BeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeaker
• Test that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources applies
• Test the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired state
• Test for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotency
• Run on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containers
Puppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modules
• Beaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travis
• Only for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OS
• Uses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses Docker
• e.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apache
Voxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modules
• Beaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisor
• Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7
• Virtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual Machine
Docker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs Hypervisors
• Docker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-Only
• Not an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating system
• Docker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosync
How we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve tests
• Write more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situations
• Populate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM's
• Increase range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OS
What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?
IdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotence
• Make it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first time
• Match exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the reality
• From any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situation
Defining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining types
• Parameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obvious
• They should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specific
• Your types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API's
DocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentation
• Little documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentation
• Blog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog posts
• A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)
• Puppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebase
SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94
• Ruby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per env
• Workaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmasters
• Puppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possible
Other examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examples
Types/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examples
• dobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and provider
• augeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providers
• jenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and provider
• jenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package provider
• zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …
Types and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providers
• Express everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everything
• Integrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with Puppet
• The power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providers
• Enable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet coders
Diving Into Puppet Providers Development: The Puppet-Corosync Module

Weitere ähnliche Inhalte

Was ist angesagt?

Start! ATS programming
Start! ATS programmingStart! ATS programming
Start! ATS programming
Kiwamu Okabe
 

Was ist angesagt? (20)

A call to give back puppetlabs-corosync to the community
A call to give back puppetlabs-corosync to the communityA call to give back puppetlabs-corosync to the community
A call to give back puppetlabs-corosync to the community
 
RPM experiments
RPM experimentsRPM experiments
RPM experiments
 
Coworking with git
Coworking with gitCoworking with git
Coworking with git
 
Puppet and Software Delivery
Puppet and Software DeliveryPuppet and Software Delivery
Puppet and Software Delivery
 
Getting the maximum out of systemd
Getting the maximum out of systemdGetting the maximum out of systemd
Getting the maximum out of systemd
 
systemd and configuration management
systemd and configuration managementsystemd and configuration management
systemd and configuration management
 
Enhance OpenSSH for fun and security
Enhance OpenSSH for fun and securityEnhance OpenSSH for fun and security
Enhance OpenSSH for fun and security
 
Monitoring at Cloud Scale
Monitoring at Cloud ScaleMonitoring at Cloud Scale
Monitoring at Cloud Scale
 
OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...
OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...
OSDC 2016 - Automating a R&D lab with Foreman: What can be hard? by Julien Pi...
 
We Buy Cheese in a Cheese Shop
We Buy Cheese in a Cheese ShopWe Buy Cheese in a Cheese Shop
We Buy Cheese in a Cheese Shop
 
Hands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerHands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontroller
 
Metasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUMetasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCU
 
Functional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformFunctional IoT: Hardware and Platform
Functional IoT: Hardware and Platform
 
Destruction, Decapods and Doughnuts: Continuous Delivery for Audio & Video Fa...
Destruction, Decapods and Doughnuts: Continuous Delivery for Audio & Video Fa...Destruction, Decapods and Doughnuts: Continuous Delivery for Audio & Video Fa...
Destruction, Decapods and Doughnuts: Continuous Delivery for Audio & Video Fa...
 
Metasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCUMetasepi team meeting #14: ATS programming on MCU
Metasepi team meeting #14: ATS programming on MCU
 
Start! ATS programming
Start! ATS programmingStart! ATS programming
Start! ATS programming
 
Metasepi team meeting #16: Safety on ATS language + MCU
Metasepi team meeting #16: Safety on ATS language + MCUMetasepi team meeting #16: Safety on ATS language + MCU
Metasepi team meeting #16: Safety on ATS language + MCU
 
Adventures in Accidental Human Architecture
Adventures in Accidental Human ArchitectureAdventures in Accidental Human Architecture
Adventures in Accidental Human Architecture
 
떠먹는 '오브젝트' Ch05 책임 할당하기
떠먹는 '오브젝트' Ch05 책임 할당하기떠먹는 '오브젝트' Ch05 책임 할당하기
떠먹는 '오브젝트' Ch05 책임 할당하기
 
Arduino programming of ML-style in ATS
Arduino programming of ML-style in ATSArduino programming of ML-style in ATS
Arduino programming of ML-style in ATS
 

Andere mochten auch

Introduction to puppet
Introduction to puppetIntroduction to puppet
Introduction to puppet
Habeeb Rahman
 

Andere mochten auch (12)

The Worst Code I Ever Wrote
The Worst Code I Ever WroteThe Worst Code I Ever Wrote
The Worst Code I Ever Wrote
 
Logstash and friends
Logstash and friendsLogstash and friends
Logstash and friends
 
Puppet
PuppetPuppet
Puppet
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと
 
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 fundamentals
Puppet fundamentalsPuppet fundamentals
Puppet fundamentals
 
Puppets
PuppetsPuppets
Puppets
 
Introduction to puppet
Introduction to puppetIntroduction to puppet
Introduction to puppet
 
Puppet DSL: back to the basics
Puppet DSL: back to the basicsPuppet DSL: back to the basics
Puppet DSL: back to the basics
 
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
 
Introduction to Puppet Enterprise
Introduction to Puppet EnterpriseIntroduction to Puppet Enterprise
Introduction to Puppet Enterprise
 
Driving DevOps for Oracle with the orawls Puppet Modules
Driving DevOps for Oracle with the orawls Puppet ModulesDriving DevOps for Oracle with the orawls Puppet Modules
Driving DevOps for Oracle with the orawls Puppet Modules
 

Ähnlich wie Diving Into Puppet Providers Development: The Puppet-Corosync Module

Introduction to Gitlab
Introduction to GitlabIntroduction to Gitlab
Introduction to Gitlab
Julien Pivotto
 

Ähnlich wie Diving Into Puppet Providers Development: The Puppet-Corosync Module (20)

Pinto+Stratopan+Love
Pinto+Stratopan+LovePinto+Stratopan+Love
Pinto+Stratopan+Love
 
Innovateeurope
InnovateeuropeInnovateeurope
Innovateeurope
 
Devops -- LKFR14
Devops -- LKFR14Devops -- LKFR14
Devops -- LKFR14
 
Using Go in DevOps
Using Go in DevOpsUsing Go in DevOps
Using Go in DevOps
 
Natalie Pistunovich - Using Go In Dev Ops
Natalie Pistunovich - Using Go In Dev OpsNatalie Pistunovich - Using Go In Dev Ops
Natalie Pistunovich - Using Go In Dev Ops
 
Python environments
Python environmentsPython environments
Python environments
 
Introduction to VeriFast @ Kyoto
Introduction to VeriFast @ KyotoIntroduction to VeriFast @ Kyoto
Introduction to VeriFast @ Kyoto
 
Migrating to Puppet 5
Migrating to Puppet 5Migrating to Puppet 5
Migrating to Puppet 5
 
Introduction to Gitlab
Introduction to GitlabIntroduction to Gitlab
Introduction to Gitlab
 
Yahoo! Developer Networks ♥ Startups
Yahoo! Developer Networks ♥ StartupsYahoo! Developer Networks ♥ Startups
Yahoo! Developer Networks ♥ Startups
 
Spring, CDI, Jakarta EE good parts
Spring, CDI, Jakarta EE good partsSpring, CDI, Jakarta EE good parts
Spring, CDI, Jakarta EE good parts
 
图解Git
图解Git图解Git
图解Git
 
SFScon 2020 - Matteo Ghetta - DataPlotly - D3-like plots in QGIS
SFScon 2020 - Matteo Ghetta - DataPlotly - D3-like plots in QGISSFScon 2020 - Matteo Ghetta - DataPlotly - D3-like plots in QGIS
SFScon 2020 - Matteo Ghetta - DataPlotly - D3-like plots in QGIS
 
Repositories as Code
Repositories as CodeRepositories as Code
Repositories as Code
 
Thinking Reactively
Thinking ReactivelyThinking Reactively
Thinking Reactively
 
Nicolas Pastorino - The Open-source roar in the eZ Community
Nicolas Pastorino - The Open-source roar in the eZ CommunityNicolas Pastorino - The Open-source roar in the eZ Community
Nicolas Pastorino - The Open-source roar in the eZ Community
 
You, Mix and Kubee
You, Mix and KubeeYou, Mix and Kubee
You, Mix and Kubee
 
Testing your puppet code
Testing your puppet codeTesting your puppet code
Testing your puppet code
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!
 
File Polyglottery; or This Proof of Concept is Also a Picture of Cats
File Polyglottery; or This Proof of Concept is Also a Picture of CatsFile Polyglottery; or This Proof of Concept is Also a Picture of Cats
File Polyglottery; or This Proof of Concept is Also a Picture of Cats
 

Mehr von Julien Pivotto

Mehr von Julien Pivotto (20)

The O11y Toolkit
The O11y ToolkitThe O11y Toolkit
The O11y Toolkit
 
What's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its EcosystemWhat's New in Prometheus and Its Ecosystem
What's New in Prometheus and Its Ecosystem
 
Prometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is comingPrometheus: What is is, what is new, what is coming
Prometheus: What is is, what is new, what is coming
 
What's new in Prometheus?
What's new in Prometheus?What's new in Prometheus?
What's new in Prometheus?
 
Introduction to Grafana Loki
Introduction to Grafana LokiIntroduction to Grafana Loki
Introduction to Grafana Loki
 
Why you should revisit mgmt
Why you should revisit mgmtWhy you should revisit mgmt
Why you should revisit mgmt
 
Observing the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From PrometheusObserving the HashiCorp Ecosystem From Prometheus
Observing the HashiCorp Ecosystem From Prometheus
 
Monitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with PrometheusMonitoring in a fast-changing world with Prometheus
Monitoring in a fast-changing world with Prometheus
 
5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery5 tips for Prometheus Service Discovery
5 tips for Prometheus Service Discovery
 
Prometheus and TLS - an Introduction
Prometheus and TLS - an IntroductionPrometheus and TLS - an Introduction
Prometheus and TLS - an Introduction
 
Powerful graphs in Grafana
Powerful graphs in GrafanaPowerful graphs in Grafana
Powerful graphs in Grafana
 
YAML Magic
YAML MagicYAML Magic
YAML Magic
 
HAProxy as Egress Controller
HAProxy as Egress ControllerHAProxy as Egress Controller
HAProxy as Egress Controller
 
Improved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and AlertmanagerImproved alerting with Prometheus and Alertmanager
Improved alerting with Prometheus and Alertmanager
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with Keycloak
 
Monitoring as an entry point for collaboration
Monitoring as an entry point for collaborationMonitoring as an entry point for collaboration
Monitoring as an entry point for collaboration
 
Incident Resolution as Code
Incident Resolution as CodeIncident Resolution as Code
Incident Resolution as Code
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with Prometheus
 
Monitor your CentOS stack with Prometheus
Monitor your CentOS stack with PrometheusMonitor your CentOS stack with Prometheus
Monitor your CentOS stack with Prometheus
 
An introduction to Ansible
An introduction to AnsibleAn introduction to Ansible
An introduction to Ansible
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Kürzlich hochgeladen (20)

Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 

Diving Into Puppet Providers Development: The Puppet-Corosync Module

  • 1. Diving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers DevelopmentDiving Into Providers Development The Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync ModuleThe Puppet-Corosync Module Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto PuppetCamp Paris, June 7th, 2016
  • 2. $::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto • Open-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.eu • Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5)Puppet user since 2011 (0.24 -> 4.5) • Member of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuliMember of the Belgian PUG & voxpupuli • Puppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributorPuppet core & modules contributor • The Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributorThe Foreman user & contributor • @roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie on irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/github
  • 4. Puppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & ProvidersPuppet Types & Providers Licensed under a Creative Commons Attribution 2.0 License https://www.flickr.com/photos/mseckington/3445427966
  • 5. Puppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarativePuppet DSL is declarative package { 'nginx': ensure => present, }
  • 6. AbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstractionAbstraction • Puppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSL • …describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources…describes resources • …defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types…defined by types • …implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers…implemented by providers
  • 7. Puppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSL package { 'nginx': ensure => present, }
  • 8. Puppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSLPuppet DSL package { 'nginx': ensure => present, provider => 'gem', }
  • 10. Clusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suiteClusterlabs suite • High-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability toolsHigh-Availability tools • Manage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availabilityManage services, ensure availability • Decides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services runDecides where services run • Manages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP'sManages Virtual IP's
  • 11. Clusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs componentsClusterlabs components • Resource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate servicesResource Agents: manipulate services Start, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, StopStart, Stop MonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitorMonitor Promote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, DemotePromote, Demote • Corosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communicationCorosync: cross-nodes communication • Pacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisionsPacemaker: Coordinator, taking decisions Who runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runsWho runs WhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhereWhere Who is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is masterWho is master ……………………………………………
  • 13. Inside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a clusterInside a cluster • Primitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, ServicePrimitives: Floating IP, Service • Location Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they runLocation Rules: Where should they run • Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who?Colocation Rules: Who runs with who? • Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who?Order rules: Who runs before who? • ……………………………………………
  • 15. Puppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a clusterPuppetizing a cluster • Ensures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config syncEnsures managed services config sync • Ensures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistentEnsures cluster configuration is consistent • Increase confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updatesIncrease confidence in updates • Multiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prodMultiple environemnts: dev, uat, prod
  • 16. The old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old way • Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011Around 2011 • Put the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a filePut the whole config in a file • Reload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changesReload config when file changes
  • 17. The old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old wayThe old way file { '/etc/cluster/cib.cfg': ensure => 'file', content => template('ms−cluster/cib−drbd.cfg.erb'), group => '0', mode => '0644', owner => '0', } exec { 'loadcrmconfig': refreshonly => true, command => '/usr/sbin/crm configure load replace / etc/cluster/cib.cfg', subscribe => File['/etc/cluster/cib.cfg'], }
  • 18. Execs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are badExecs are bad • refreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failurerefreshonly + failure • complex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyifcomplex onlyif • command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()command => template()
  • 19.
  • 20.
  • 21. Puppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-Corosync • A "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" moduleA "Puppetlabs" module • Managing the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster servicesManaging the cluster services CorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosyncCorosync PacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemakerPacemaker CMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMANCMAN pcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsdpcsd • Good but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interestGood but lack of updates & interest • Define good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providersDefine good types and providers
  • 22. Puppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-CorosyncPuppetlabs-Corosync • Uses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the backUses "crm" in the back • crm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIBcrm is a CLI tool to manage the CIB • It was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distrosIt was used by all the distros
  • 23. Puppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync typesPuppetlabs-Corosync types • cs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitivecs_primitive • cs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_groupcs_group • cs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_locationcs_location • cs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocationcs_colocation • cs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clonecs_clone
  • 24. The Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs SchismThe Clusterlabs Schism • 2013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.42013: RHEL/CentOS 6.4 • Removes support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crmRemoves support for crm • Implements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcsImplements its own replacement: pcs • crm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymorecrm is not available anymore • pcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggypcs is young and buggy
  • 25. 2013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-20152013-2015 • Puppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowlyPuppetlabs-Corosync evolves slowly • Joshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcsJoshua Hoblitt strarts implementing pcs • I continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementationI continue the implementation • Puppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LTPuppet Contributor Summit LT • Please git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to communityPlease git back the module to community
  • 26. 2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards2015 & onwards • Puppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to VoxpupuliPuppetlabs-corosync is moved to Voxpupuli • Now it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active moduleNow it is an active module • With unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance testsWith unit and acceptance tests • Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2Semantic versioning: current version 1.0.2 • Pull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixedPull Requests and Issues reviewed/fixed
  • 27. Types and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and Providers
  • 28. Types and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and ProvidersTypes and Providers • Built-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providersBuilt-in types and providers User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd…User -> ldap, aix, pw, useradd… Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, …Service -> freebsd, windows, systemd, … Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, …Package -> yum, msi, pacman, … Stable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet versionStable, proved, evolve with Puppet version • Custom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providersCustom types and providers Distributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modulesDistributed in modules Concat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concatConcat -> concat Acl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posixAcl -> posix Cs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crmCs_primitive -> pcs, crm
  • 29. PluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsyncPluginsync • lib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of moduleslib directory of modules • lib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/providerlib/puppet/provider • lib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/typelib/puppet/type • can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …can also sync: augeas, facts, …
  • 31. Puppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet typePuppet type • A Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource TypeA Resource Type • Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW)Describes what you want (not HOW) • Has parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and propertiesHas parameters and properties • Parameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for PuppetizationParameter: only for Puppetization • Property: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can checkProperty: Something you can check
  • 34. Simple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameterSimple parameter newparam(:cib) do desc "Name of the shadow CIB this primitive should be created in." end
  • 35. Simple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple PropertySimple Property newproperty(:parameters) do desc "Hash of params for the primitive." end
  • 36. Pre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined valuesPre-defined values newproperty(:kind) do desc "Designates the kindness of the rule" newvalues(:Optional , :Mandatory) defaultto :Optional end
  • 37. newvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvaluesnewvalues • List of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted valuesList of accepted values • Any other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an errorAny other value will throw an error • Accept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept RegexesAccept Regexes • Implies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checksImplies validation checks
  • 38. ValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidationValidation newproperty(:parameters) do desc "Hash of params for the primitive." validate do |value| raise Puppet::Error , 'Must be a hash.' unless value.is_a? Hash end defaultto Hash.new end
  • 39. validatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidatevalidate • Function inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/propertyFunction inside a parameter/property • Cheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecationsCheks that value matches expecations • Never trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user inputNever trust user input • Type checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checking
  • 40. mungemungemungemungemungemungemungemungemungemungemungemungemungemungemungemungemunge newproperty(:first) do desc "First Corosync primitive." munge do |value| value = "#{value}:start" unless value. include?(':') value end end
  • 41. mungemungemungemungemungemungemungemungemungemungemungemungemungemungemungemungemunge • Transform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user inputTransform user input • NormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalizeNormalize • Can be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibilityCan be use for backwards compatibility
  • 43. insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync?insync? • Checks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in syncChecks if a property is in sync • If it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual contentIf it matches the actual content
  • 44. Cosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functionsCosmetic functions • change_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_schange_to_s • String used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon changeString used for the report upon change
  • 47. generate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resourcesgenerate resources def generate return [] if self[:autocommit] != true options = { name: @title } [Puppet::Type.type(:cs_commit).new( options)] end
  • 48. TypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypesTypes • Types describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe itemsTypes describe items • They are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users useThey are the API users use • They should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be completeThey should be complete • No interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with systemNo interaction with system
  • 50. ProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProvidersProviders • Get the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resourcesGet the state of the resources • Change the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired stateChange the resources to the desired state
  • 52. How providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers workHow providers work • Fetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressourceFetch information per ressource • Fetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at onceFetch all the resources at once • One type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providersOne type often have multiple providers
  • 53. Pick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right providerPick the right provider • Using installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commandsUsing installed commands • Using factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing factsUsing facts • Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)Explicitely (provider metaparameter)
  • 54. Provider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choiceProvider choice commands :cmd => "yum", :rpm => "rpm" if command('rpm') confine :true => begin rpm('−−version') rescue Puppet::ExecutionFailure false else true end end defaultfor :osfamily => :redhat
  • 55. Explicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit providerExplicit provider package { 'nginx': ensure => present, provider => 'gem', }
  • 56. PrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetchPrefetch • Fetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources firstFetch all resources first • Then create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is neededThen create/change what is needed • Very efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficientVery efficient
  • 57. prefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetchingprefetching def self.instances instances = [] cmd = [command(:pcs), 'cluster', 'cib'] raw, = run_command_in_cib(cmd) doc = REXML::Document.new(raw) REXML::XPath.each(doc, '//primitive') do |e| instances << new(element_to_hash(e)) end instances end
  • 59. Applying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying changeApplying change • Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=)Per property (def mode=, def content=) • Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)Once for all (def flush)
  • 60. set per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per propertyset per property def mode=(value) File.chmod(value.to_i(8), resource[: path]) end
  • 61. flushflushflushflushflushflushflushflushflushflushflushflushflushflushflushflushflush mk_resource_methods def flush unless @property_hash.empty? cmd = [command(:pcs), 'property', 'set ', "#{@property_hash[:name]}=#{ @property_hash[:value]}"] run_command_in_cib(cmd) end end
  • 62. FeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeaturesFeatures • Not all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equalNot all providers are equal • systemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask servicessystemd can Mask services • sysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can notsysvinit can not
  • 63. In the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the providerIn the provider has_feature :kindness
  • 64. Check for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a featureCheck for a feature def flush unless @property_hash.empty? updated << " kind=#{@property_hash[: kind]}" if feature? :kindness end end
  • 65. Restrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in typeRestrict parameters in type newproperty(:kind , required_features: : kindness) do desc "How to enforce the constraint." end
  • 66. TestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTestingTesting Licensed under a Creative Commons Attribution 2.0 License https://www.flickr.com/photos/dahlstroms/3945656390
  • 67. Testing typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting typesTesting types • Unit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit tests • Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, …Test validation, munging, change_to_s, … • Test presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentationTest presence of documentation
  • 68. Testing providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providers • Unit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit testsUnit tests • Test resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methodsTest resource methods • Mock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to runMock commands to run • Mock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to BMock a transform from A to B
  • 69. Testing providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providersTesting providers • Acceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance testsAcceptance tests • BeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeakerBeaker • Test that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources appliesTest that resources applies • Test the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired stateTest the desired state • Test for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotencyTest for indempotency • Run on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containersRun on actual OS or containers
  • 70. Puppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modulesPuppetlabs modules • Beaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travisBeaker tests implemented on travis • Only for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OSOnly for a few OS • Uses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses DockerUses Docker • e.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apachee.g puppetlabs-apache
  • 71. Voxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modulesVoxpupuli modules • Beaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisorBeaker tests implemented on hypervisor • Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7Ubuntu 14.04/CentOS 7 • Virtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual MachineVirtual Machine
  • 72. Docker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs HypervisorsDocker vs Hypervisors • Docker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-OnlyDocker is Linux-Only • Not an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating systemNot an full Operating system • Docker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosyncDocker is not an option to test corosync
  • 73. How we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve testsHow we could improve tests • Write more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situationsWrite more tests, more situations • Populate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM'sPopulate several VM's • Increase range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OSIncrease range of OS
  • 74. What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?What is difficult?
  • 75. IdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotenceIdempotence • Make it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first timeMake it work the first time • Match exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the realityMatch exactly the reality • From any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situationFrom any situation to any situation
  • 76. Defining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining typesDefining types • Parameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obviousParameters/Properties should be obvious • They should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specificThey should not be provider specific • Your types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API'sYour types are your API's
  • 77. DocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentationDocumentation • Little documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentationLittle documentation • Blog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog postsBlog posts • A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012)A book (2012) • Puppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebasePuppet codebase
  • 78. SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94SERVER-94 • Ruby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per envRuby code in lib/ is not isolated per env • Workaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmastersWorkaround: use multiple puppetmasters • Puppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possiblePuppetserver (clojure) makes it possible
  • 79. Other examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examplesOther examples
  • 80. Types/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examplesTypes/Providers examples • dobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and providerdobbymoodge-acl: type and provider • augeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providersaugeasproviders: types and providers • jenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and providerjenkinsci-jenkins: types and provider • jenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package providerjenkinsci-jenkins: package provider • zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …zabbix, aws, …
  • 81. Types and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providersTypes and providers • Express everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everythingExpress everything • Integrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with PuppetIntegrate with Puppet • The power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providersThe power is hidden in providers • Enable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet codersEnable KISS for Puppet coders