Mais conteúdo relacionado
Semelhante a Puppet camp london-modulerewritingsmartway (20)
Mais de Martin Alfke (10)
Puppet camp london-modulerewritingsmartway
- 1. © Martin Alfke - 2014
Module (Re)writing the
Smart Way
Martin Alfke
<martin.alfke@buero20.org>
!
Puppet Camp London 2014
- 2. © Martin Alfke - 2014
About Me
• Freelancer - Berlin/Germany
• Automation and Cfg Mgmt
• PCP 2013
• Module Contributor
• PuppetLabs Partner
Martin Alfke - at home
- 3. © Martin Alfke - 2014
What is this talk about?
The story of finding a module,
learning that it is not useful for
you, rethink and rewrite new
shared, public module from
scratch use it in your private
roles and profiles and maintain it
for other users.
Martin Alfke - SFO -Vesuvio Cafe
- 4. © Martin Alfke - 2014
What else?
Why contributing is better than
building a golden porcelain tower in
the dark of your closet.
or
The Puppet community way of
getting a task done.
Martin Alfke - Berlin - Hotel du Rome
- 5. © Martin Alfke - 2014
The Task
Yes, we will have that task
finished by yesterday !
http://www.mid-day.com/articles/day-29-in-bigg-boss-6-its-vrijesh-vs-major-sidhu/187949
- 6. © Martin Alfke - 2014
How to start?
We build a Puppet module !!
!
But … how should we start?
http://designtaxi.com/article/101902/How-To-Start/
- 7. © Martin Alfke - 2014
The Lone Warrior Way
Martin Alfke - Lassen County, California
- 8. © Martin Alfke - 2014
Coding Puppet …
class webserver13 {
package { 'apache2': ensure => present, }
file { '/etc/apache2/sites-enabled/000-default':
ensure => absent,
}
file { '/etc/apache2/sites-available/10_webserver13':
ensure => file,
source => 'puppet:///modules/webserver13/10_webserver13',
}
file { '/etc/apache2/mods-enabled/alias.conf':
ensure => link,
target => '/etc/apache2/mods-available/alias.conf',
}
file { '/etc/apache2/mods_enabled/alias.load':
ensure => link,
target => '/etc/apache2/mods-available/alias.load',
}
...
}
- 9. © Martin Alfke - 2014
Documentation / Bugfixes
Who is doing reviews?
☞
YOU
Who does documentation?
☞
YOU
Who will support you?
☞
YOU
http://lonewarriorswa.com/
- 10. © Martin Alfke - 2014
Features? Changes?
poor lonesome cowboy
I’m a poor lonesome cowboy
I'm a long long way from home
And this poor lonesome cowboy
Has got a long long way to roam
Over mountains over prairies
From dawn till day is done
My horse and me keep riding
Into the setting sun
http://smellslikescreenspirit.com/2009/12/warner-bros-2010-preview/Poor lonesome cowboy - Pat Woods
- 11. © Martin Alfke - 2014
The Smart Way
Is there something available?
DevOps means to understand and
reuse foreign code.
Use Puppet as a framework.
http://www.thindifference.com/2011/02/11/what-is-the-best-way-to-brand-the-middle/
- 12. © Martin Alfke - 2014
You are not alone
There are:
- companies using the same technology
- developers using the same framework
- sites which collect informations
- people talking about their solution
http://clivehicksjenkins.wordpress.com/
- 13. © Martin Alfke - 2014
Sources
puppetlabs.com
github.com
http://en.wikipedia.org/wiki/File:Microsoft-Staff-1978.jpg
- 14. © Martin Alfke - 2014
Found the solution?
Give feedback
Cooperate / Fix bugs / Improve
http://www.positoons.de/leistungen/character-design-info/eierlegende-wollmilchsau/
- 15. © Martin Alfke - 2014
Reusing Modules
class webserver13 {
class { ‘::apache’:
default_vhost => false,
default_mods => false,
}
include ::apache::mod::alias
...
}
- 16. © Martin Alfke - 2014
Reality?
We were checking for a module for
cloud management
We found one
We talked to upstream:
“Oh, …, yes, …, this module, …, ahem,
…, do yourself a favour, …, rewrite it”
or
What if you found nothing?
http://technorati.com/entertainment/celebrity/article/the-12-steps-of-reality-tv/
- 17. © Martin Alfke - 2014
Start Writing Public Code
Start a shareable, parameterised
generic module
Always keep in mind separation of code
and data
Let others decide which data source
they want to use.
Do never put private data in your repo
Start using public repo immediately
Take care on proper license (AGPL,
GPL,…)
http://www.security-faqs.com/why-your-company-
should-issue-open-source-security-packages.html
- 18. © Martin Alfke - 2014
Combine Public/Private
Use your public module like any other
(e.g. puppetlabs apache)
Add data only to your private
(wrapper) module
Search for “Puppet Roles and Profiles”
to understand this separation
http://www.internetmarketinginc.com/blog/share-or-not-share-
thats-the-question-going-public-with-private-information/
- 19. © Martin Alfke - 2014
Responsibility
Be a responsive upstream
Always remember that other people
might want to solve similar problems
(not identical)
Make your code run on different
platforms
Build a community around your module
Review Pull Requests in time
http://ryaneller.com/guest-post/guest-post-friday-the-power-of-responsibility/
- 20. © Martin Alfke - 2014
Improvement
Take your time to implement or
merge improvements
Write test
Write good documentation and
usage examples
Write more tests
Use your code
- 21. © Martin Alfke - 2014
Summary - 1
Work smart, not hard
Write good documentation, examples and
tests
Write blog posts (mention your module
and company)
Be a responsive and responsible upstream
Review other users contribution
Allow access if contributors code quality
fits your requirements
Martin Alfke - SFO
- 22. © Martin Alfke - 2014
Summary - 2
Never refactor
Restart prevents old bugs in new
module
There will always come more
requirements
Parameters, parameters, parameters
Let other users decide for their
preferred data source
Use a proper open source license
Martin Alfke - SFO
- 23. © Martin Alfke - 2014
Summary - 3
K.I.S.S
(Keep it simple and stupid)
“perfection is achieved, not when there
is nothing more to add, but when there
is nothing left to take away.”
(Antoine de Saint-Exupéry)
Martin Alfke - SFO
- 24. © Martin Alfke - 2014
Module Rewriting the
Smart Way
Martin Alfke
<martin.alfke@buero20.org>