SlideShare a Scribd company logo
1 of 44
Download to read offline
Basic Puppet Module Design
Jeremy Kitchen
Systems Engineer at NationBuilder
What is a module?
Package
Config
Service
Module Contents
foo/
manifests/
defaults.pp
init.pp
install.pp
config.pp
service.pp
templates/
foo.conf.erb
manifests/defaults.pp
class foo::defaults {
case $osfamily {
'Debian': {
$package_name = 'foo-ruby'
$service_name = 'foo'
$config_path = '/etc/foo/foo.conf'
$log_file = '/var/log/foo/foo.log'
$storage_path = '/var/lib/foo'
}
'RedHat': {
$package_name = 'ruby-foo'
$service_name = 'foo'
$config_path = '/etc/foo.conf'
$log_file = '/var/log/foo.log'
$storage_path = '/var/lib/foo'
}
default: {
fail("${osfamily} not currently supported by this module")
}
}
}
manifests/init.pp
class foo (
$package_ensure = installed,
$listen = '127.0.0.1',
$port = '1234',
$verbose = false,
) inherits foo::defaults {
if (!is_ip_address($listen)) {
fail('listen parameter needs to be an ip address')
}
$verbose_bool = str2bool($verbose)
include foo::install
include foo::config
include foo::service
Class['foo::install'] -> Class['foo::config'] ~> Class['foo::service']
anchor {
'foo::begin':
before => Class['foo::install','foo::config'],
notify => Class['foo::service'];
'foo::end':
require => Class['foo::service'];
}
}
manifests/init.pp
class foo (
$package_ensure = installed,
$listen = '127.0.0.1',
$port = '1234',
$verbose = false,
) inherits foo::defaults {
manifests/init.pp
if (!is_ip_address($listen)) {
fail('listen parameter needs to be an ip address')
}
$verbose_bool = str2bool($verbose)
manifests/init.pp
include foo::install
include foo::config
include foo::service
Class['foo::install'] -> Class['foo::config'] ~>
Class['foo::service']
manifests/init.pp
anchor {
'foo::begin':
before => Class['foo::install','foo::config'],
notify => Class['foo::service'];
'foo::end':
require => Class['foo::service'];
}
containment example
include site::mounts
include site::webapp
include mysql
include apache
Class['site::mounts'] -> Class['mysql']
Class['site::mounts'] -> Class['apache']
Class['mysql'] -> Class['apache']
Class['mysql'] -> Class['site::webapp']
manifests/init.pp
anchor {
'foo::begin':
before => Class['foo::install','foo::config'],
notify => Class['foo::service'];
'foo::end':
require => Class['foo::service'];
}
what about contain?
manifests/init.pp
class foo (
$package_ensure = installed,
$listen = '127.0.0.1',
$port = '1234',
$verbose = false,
) inherits foo::defaults {
if (!is_ip_address($listen)) {
fail('listen parameter needs to be an ip address')
}
$verbose_bool = str2bool($verbose)
include foo::install
include foo::config
include foo::service
Class['foo::install'] -> Class['foo::config'] ~> Class['foo::service']
anchor {
'foo::begin':
before => Class['foo::install','foo::config'],
notify => Class['foo::service'];
'foo::end':
require => Class['foo::service'];
}
}
manifests/install.pp
class foo::install inherits foo {
package { $package_name:
ensure => $package_ensure,
}
}
manifests/config.pp
class foo::config inherits foo {
file {
$config_path:
content => template('foo/foo.conf.erb'),
owner => 'root',
group => 'root',
mode => '0644';
}
}
Module Contents
class foo::service inherits foo {
service { $service_name:
ensure => running,
enable => true,
}
}
templates/foo.conf.erb
[main]
listen = <%= @listen %>
port = <%= @port %>
verbose = <%= @verbose_bool ? 'yes' : 'no' %>
log_file = <%= @log_file %>
storage_dir = <%= @storage_dir %>
Module Contents
foo/
manifests/
defaults.pp
init.pp
install.pp
config.pp
service.pp
templates/
foo.conf.erb
example
# profile/manifests/server.pp
class profile::server {
class { 'foo':
port => 3389,
verbose => true,
}
}
example
# hiera/global.yaml
foo::port: 3389
foo::verbose: true
# profile/manifests/server.pp
class profile::server {
include ::foo
}
conf.d
Module Contents
foo/
manifests/
defaults.pp
init.pp
install.pp
config.pp
service.pp
plugin.pp
templates/
foo.conf.erb
plugin.conf.erb
manifests/defaults.pp
class foo::defaults {
case $osfamily {
'Debian': {
$package_name = 'foo-ruby'
$service_name = 'foo'
$config_path = '/etc/foo/foo.conf'
$log_file = '/var/log/foo/foo.log'
$storage_path = '/var/lib/foo'
$conf_d_path = '/etc/foo/conf.d'
$plugin_path = '/usr/share/foo/plugins'
}
'Redhat': {
$package_name = 'ruby-foo'
$service_name = 'foo'
$config_path = '/etc/foo.conf'
$log_file = '/var/log/foo.log'
$storage_path = '/var/lib/foo'
$conf_d_path = '/etc/foo.d/'
$plugin_path = '/usr/lib/foo/plugins'
}
}
}
manifests/config.pp
class foo::config inherits foo {
file {
$config_path:
content => template('foo/foo.conf.erb'),
owner => 'root',
group => 'root',
mode => '0644';
$conf_d_path:
ensure => directory,
purge => true,
recurse => true,
owner => 'root',
group => 'root',
mode => '0755';
}
}
templates/foo.conf.erb
[main]
listen = <%= @listen %>
port = <%= @port %>
verbose = <%= @verbose_bool ? 'yes' : 'no' %>
log_file = <%= @log_file %>
storage_dir = <%= @storage_dir %>
@include <%= @conf_d_path %>/*.conf
manifests/plugin.pp
define foo::plugin (
$type,
$path = "${foo::defaults::plugin_path}/${name}.rb",
$verbose = undef,
) {
include foo::defaults
validate_absolute_path($path)
$verbose_bool = str2bool($verbose)
file { "${foo::defaults::conf_d_path}/${name}.conf":
content => template('foo/plugin.conf.erb'),
owner => 'root',
group => 'root',
mode => '0755',
notify => Class['foo::service'],
}
}
templates/plugin.conf.erb
[plugin <%= @name %>]
type = <%= @type %>
path = <%= @path %>
<%- if !@verbose.nil? -%>
verbose = <%= @verbose_bool ? 'yes' : 'no' %>
<%- end -%>
example
include foo
foo::plugin {
'webapp':
type => 'passenger';
'db':
type => 'mysql',
verbose => true,
path => '/usr/local/share/custom_mysql.rb';
}
role/profile example
class profile::app {
include foo
foo::plugin {
'webapp':
type => 'passenger';
}
}
class profile::db {
include foo
foo::plugin {
'db':
type => 'mysql';
}
}
class role::server {
include profile::app
include profile::db
}
no conf.d?
manifests/config.pp
class foo::config inherits foo {
concat {
$config_path:
owner => 'root',
group => 'root',
mode => '0644';
}
concat::fragment { 'foo_conf_header':
content => template('foo/foo.conf.erb'),
target => $config_path,
order => '00_header',
}
}
manifests/plugin.pp
define foo::plugin (
$type,
$path = "${foo::defaults::plugin_path}/$
{name}.rb",
$verbose = undef,
) {
include foo::defaults
validate_absolute_path($path)
$verbose_bool = str2bool($verbose)
concat { "foo_conf_plugin_${name}":
content => template('foo/plugin.conf.erb'),
target => $conf_file,
order => "10_plugin_${name}",
}
}
what about docs?
README.md
• What it manages
• Top level class parameters
• Defined types and their parameters
• Optional dependencies
• Common usage examples
Testing
spec/classes/foo_spec.rb
describe 'foo' do
context 'default parameters' do
let (:params) {{ }}
it { should compile.with_all_deps }
it { should contain_class('foo::defaults') }
it { should contain_class('foo::install') }
it { should contain_class('foo::config') }
it { should contain_class('foo::service') }
end
end
spec/classes/foo_spec.rb
describe 'foo' do
let (:facts) {{
:osfamily => 'Redhat'
}}
context 'default parameters' do
it { should contain_package('ruby-foo') }
it { should contain_file('/etc/foo.conf').with(
:owner => 'root',
:group => 'root',
:mode => '0644',
)}
it { should contain_file('/etc/foo.d').with(
:owner => 'root',
:group => 'root',
:mode => '0755',
:purge => true,
:recurse => true,
)}
it { should contain_service('foo').with(
:ensure => 'running',
:enable => true,
)}
end
end
spec/classes/foo_spec.rb
describe 'foo' do
let (:facts) {{
:osfamily => 'Redhat'
}}
let (:config_file) { '/etc/foo.conf' }
context 'default parameters' do
it { should contain_file(config_file)
.with_content(/listen = 127.0.0.1/)
}
it { should contain_file(config_file)
.with_content(/port = 1234/)
}
it { should contain_file(config_file)
.with_content(/verbose = no/)
}
it { should contain_file(config_file)
.with_content(%r{log_file = /var/log/foo.log})
}
it { should contain_file(config_file)
.with_content(%r{storage_dir = /var/lib/foo})
}
end
end
spec/classes/foo_spec.rb
describe 'foo' do
let (:facts) {{
:osfamily => 'Redhat'
}}
let (:config_file) { '/etc/foo.conf' }
context 'parameters set' do
let (:params) {{
:listen => '10.0.0.42',
:port => '4567',
}}
it { should contain_file(config_file).with_content(/listen = 10.0.0.42/) }
it { should contain_file(config_file).with_content(/port = 4567/) }
end
context 'boolean values true' do
let (:params) {{
:verbose => true,
}}
it { should contain_file(config_file).with_content(/verbose = yes/) }
end
context 'boolean values fales' do
let (:params) {{
:verbose => true,
}}
it { should contain_file(config_file).with_content(/verbose = no/) }
end
end
Beaker?
Forge Tips
• Limit dependencies
• External resource dependencies (user, repo)
• anchor pattern
• use include foo vs class {‘foo’: }
Resources
Example modules
• puppetlabs/ntp: https://forge.puppetlabs.com/puppetlabs/ntp
• pdxcat/collectd: https://forge.puppetlabs.com/pdxcat/collectd
Library modules
• puppetlabs/stdlib: https://forge.puppetlabs.com/puppetlabs/stdlib
• puppetlabs/concat: https://forge.puppetlabs.com/puppetlabs/concat
Testing
• rspec-puppet: http://rspec-puppet.com
• beaker: https://github.com/puppetlabs/beaker
Thanks!
kitchen@kitchen.io
github.com/kitchen
twitter.com/kitchen
NationBuilder.com
(we’re hiring!)

More Related Content

What's hot

The FPDF Library
The FPDF LibraryThe FPDF Library
The FPDF LibraryDave Ross
 
02 - Second meetup
02 - Second meetup02 - Second meetup
02 - Second meetupEdiPHP
 
Introduction to Modern Perl
Introduction to Modern PerlIntroduction to Modern Perl
Introduction to Modern PerlDave Cross
 
Tutorial perl programming basic eng ver
Tutorial perl programming basic eng verTutorial perl programming basic eng ver
Tutorial perl programming basic eng verQrembiezs Intruder
 
Filesystem abstractions and msg queue sergeev - symfony camp 2018
Filesystem abstractions and msg queue   sergeev - symfony camp 2018Filesystem abstractions and msg queue   sergeev - symfony camp 2018
Filesystem abstractions and msg queue sergeev - symfony camp 2018Юлия Коваленко
 
PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)Win Yu
 
PHP7 - Scalar Type Hints & Return Types
PHP7 - Scalar Type Hints & Return TypesPHP7 - Scalar Type Hints & Return Types
PHP7 - Scalar Type Hints & Return TypesEric Poe
 
Short Intro to PHP and MySQL
Short Intro to PHP and MySQLShort Intro to PHP and MySQL
Short Intro to PHP and MySQLJussi Pohjolainen
 
Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8Rupesh Kumar
 
An introduction to Rex - FLOSS UK DevOps York 2015
An introduction to Rex - FLOSS UK DevOps York 2015An introduction to Rex - FLOSS UK DevOps York 2015
An introduction to Rex - FLOSS UK DevOps York 2015Andy Beverley
 

What's hot (18)

The FPDF Library
The FPDF LibraryThe FPDF Library
The FPDF Library
 
02 - Second meetup
02 - Second meetup02 - Second meetup
02 - Second meetup
 
PHP 5.3/6
PHP 5.3/6PHP 5.3/6
PHP 5.3/6
 
Introduction to Modern Perl
Introduction to Modern PerlIntroduction to Modern Perl
Introduction to Modern Perl
 
PHP Basic
PHP BasicPHP Basic
PHP Basic
 
Merb
MerbMerb
Merb
 
Key features PHP 5.3 - 5.6
Key features PHP 5.3 - 5.6Key features PHP 5.3 - 5.6
Key features PHP 5.3 - 5.6
 
DataMapper
DataMapperDataMapper
DataMapper
 
Tutorial perl programming basic eng ver
Tutorial perl programming basic eng verTutorial perl programming basic eng ver
Tutorial perl programming basic eng ver
 
Anatomy of a reusable module
Anatomy of a reusable moduleAnatomy of a reusable module
Anatomy of a reusable module
 
Filesystem abstractions and msg queue sergeev - symfony camp 2018
Filesystem abstractions and msg queue   sergeev - symfony camp 2018Filesystem abstractions and msg queue   sergeev - symfony camp 2018
Filesystem abstractions and msg queue sergeev - symfony camp 2018
 
PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)
 
PHP7 - Scalar Type Hints & Return Types
PHP7 - Scalar Type Hints & Return TypesPHP7 - Scalar Type Hints & Return Types
PHP7 - Scalar Type Hints & Return Types
 
Short Intro to PHP and MySQL
Short Intro to PHP and MySQLShort Intro to PHP and MySQL
Short Intro to PHP and MySQL
 
Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8Language enhancement in ColdFusion 8
Language enhancement in ColdFusion 8
 
Jsp Notes
Jsp NotesJsp Notes
Jsp Notes
 
An introduction to Rex - FLOSS UK DevOps York 2015
An introduction to Rex - FLOSS UK DevOps York 2015An introduction to Rex - FLOSS UK DevOps York 2015
An introduction to Rex - FLOSS UK DevOps York 2015
 
Puppet @ Seat
Puppet @ SeatPuppet @ Seat
Puppet @ Seat
 

Viewers also liked

Hamburger Helper Branded Content Analysis
Hamburger Helper Branded Content AnalysisHamburger Helper Branded Content Analysis
Hamburger Helper Branded Content AnalysisDavis Mastin
 
professional_ethics_and_virtue_ethics
professional_ethics_and_virtue_ethicsprofessional_ethics_and_virtue_ethics
professional_ethics_and_virtue_ethicsMark Flower
 
BoBS Evaluation Close-Out Report, FINAL
BoBS Evaluation Close-Out Report, FINALBoBS Evaluation Close-Out Report, FINAL
BoBS Evaluation Close-Out Report, FINALMark Flower
 
Surfactant, biosynthesis and its regulation
Surfactant, biosynthesis and its regulationSurfactant, biosynthesis and its regulation
Surfactant, biosynthesis and its regulationNox Lumos
 

Viewers also liked (7)

Hamburger Helper Branded Content Analysis
Hamburger Helper Branded Content AnalysisHamburger Helper Branded Content Analysis
Hamburger Helper Branded Content Analysis
 
professional_ethics_and_virtue_ethics
professional_ethics_and_virtue_ethicsprofessional_ethics_and_virtue_ethics
professional_ethics_and_virtue_ethics
 
BoBS Evaluation Close-Out Report, FINAL
BoBS Evaluation Close-Out Report, FINALBoBS Evaluation Close-Out Report, FINAL
BoBS Evaluation Close-Out Report, FINAL
 
FADILAKBARCV.
FADILAKBARCV.FADILAKBARCV.
FADILAKBARCV.
 
42DM_Credentials
42DM_Credentials42DM_Credentials
42DM_Credentials
 
Solar business
Solar businessSolar business
Solar business
 
Surfactant, biosynthesis and its regulation
Surfactant, biosynthesis and its regulationSurfactant, biosynthesis and its regulation
Surfactant, biosynthesis and its regulation
 

Similar to Puppetcamp module design talk

On secure application of PHP wrappers
On secure application  of PHP wrappersOn secure application  of PHP wrappers
On secure application of PHP wrappersPositive Hack Days
 
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...Puppet
 
Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'Gary Larizza
 
Alessandro sf 2010
Alessandro sf 2010Alessandro sf 2010
Alessandro sf 2010Puppet
 
Does your configuration code smell?
Does your configuration code smell?Does your configuration code smell?
Does your configuration code smell?Tushar Sharma
 
vfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent testsvfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent testsFrank Kleine
 
Drupal 8 configuration management
Drupal 8 configuration managementDrupal 8 configuration management
Drupal 8 configuration managementAlexander Tkachev
 
Advanced symfony Techniques
Advanced symfony TechniquesAdvanced symfony Techniques
Advanced symfony TechniquesKris Wallsmith
 
What's new, what's hot in PHP 5.3
What's new, what's hot in PHP 5.3What's new, what's hot in PHP 5.3
What's new, what's hot in PHP 5.3Jeremy Coates
 
GettingStartedWithPHP
GettingStartedWithPHPGettingStartedWithPHP
GettingStartedWithPHPNat Weerawan
 
Intro to Rails
Intro to Rails Intro to Rails
Intro to Rails epiineg1
 
Rush, a shell that will yield to you
Rush, a shell that will yield to youRush, a shell that will yield to you
Rush, a shell that will yield to youguestdd9d06
 
PHP 5.3 And PHP 6 A Look Ahead
PHP 5.3 And PHP 6 A Look AheadPHP 5.3 And PHP 6 A Look Ahead
PHP 5.3 And PHP 6 A Look Aheadthinkphp
 
vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking Sebastian Marek
 
The Solar Framework for PHP 5 (2010 Confoo)
The Solar Framework for PHP 5 (2010 Confoo)The Solar Framework for PHP 5 (2010 Confoo)
The Solar Framework for PHP 5 (2010 Confoo)Paul Jones
 
Perforce Object and Record Model
Perforce Object and Record Model  Perforce Object and Record Model
Perforce Object and Record Model Perforce
 
Puppet Troubleshooting
Puppet TroubleshootingPuppet Troubleshooting
Puppet TroubleshootingPuppet
 

Similar to Puppetcamp module design talk (20)

On secure application of PHP wrappers
On secure application  of PHP wrappersOn secure application  of PHP wrappers
On secure application of PHP wrappers
 
Tutorial Puppet
Tutorial PuppetTutorial Puppet
Tutorial Puppet
 
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
 
Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'
 
Alessandro sf 2010
Alessandro sf 2010Alessandro sf 2010
Alessandro sf 2010
 
Does your configuration code smell?
Does your configuration code smell?Does your configuration code smell?
Does your configuration code smell?
 
vfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent testsvfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent tests
 
Drupal 8 configuration management
Drupal 8 configuration managementDrupal 8 configuration management
Drupal 8 configuration management
 
Advanced symfony Techniques
Advanced symfony TechniquesAdvanced symfony Techniques
Advanced symfony Techniques
 
What's new, what's hot in PHP 5.3
What's new, what's hot in PHP 5.3What's new, what's hot in PHP 5.3
What's new, what's hot in PHP 5.3
 
Centos config
Centos configCentos config
Centos config
 
GettingStartedWithPHP
GettingStartedWithPHPGettingStartedWithPHP
GettingStartedWithPHP
 
Intro to Rails
Intro to Rails Intro to Rails
Intro to Rails
 
Rush, a shell that will yield to you
Rush, a shell that will yield to youRush, a shell that will yield to you
Rush, a shell that will yield to you
 
PHP 5.3 And PHP 6 A Look Ahead
PHP 5.3 And PHP 6 A Look AheadPHP 5.3 And PHP 6 A Look Ahead
PHP 5.3 And PHP 6 A Look Ahead
 
vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking
 
The Solar Framework for PHP 5 (2010 Confoo)
The Solar Framework for PHP 5 (2010 Confoo)The Solar Framework for PHP 5 (2010 Confoo)
The Solar Framework for PHP 5 (2010 Confoo)
 
Perforce Object and Record Model
Perforce Object and Record Model  Perforce Object and Record Model
Perforce Object and Record Model
 
Puppet Troubleshooting
Puppet TroubleshootingPuppet Troubleshooting
Puppet Troubleshooting
 
Troubleshooting Puppet
Troubleshooting PuppetTroubleshooting Puppet
Troubleshooting Puppet
 

Recently uploaded

JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard37
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)Samir Dash
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMKumar Satyam
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 

Recently uploaded (20)

JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 

Puppetcamp module design talk