SlideShare uma empresa Scribd logo
1 de 54
Baixar para ler offline
Wrangling 3rd Party
Installers with Puppet
Puppet Camp Portland 2014
January 14, 2014
Overview
●
●
●
●
●

About us
Definitions
Our situation
Overall steps
What we get and
what is missing
from installers
● Requirements

●
●
●
●
●
●
●
●

Installer “state”
Initial scripting
v2.0 using Puppet
Our solution
Testing
Challenges
Future
Q&A
About us
Mike Kinney

Spencer Krum

mike.kinney@gmail.com

krum.spencer@gmail.com

github.com/mkinney

github.com/nibalizer

● UTi Worldwide
● Mentioned in the
“Book”

● UTi Worldwide
● PSU CAT
● Co-author
of the “Book”
2nd Edition
About us
Mike Kinney
● Automating
installations for few
years
● New to puppet

Spencer Krum
● New to these 3rd
party tools
● Puppet expert
A few words about vendors
● We use a few vendors.
● We will try to keep their names out of it,
though it might slip out once or twice.
● The focus of this talk is how we work around
not being able to use a package
management tool. (like apt/rpm)
● These patterns should be universal.
Definitions (1 of 4)
● 3rd Party software:
○ Software that is bought from a software vendor,
almost always closed source.

● Installer:
○ The installation method described by the vendor for
the 3rd party software. Often this is a binary file like
“installer.bin”.
Definitions (2 of 4)
● Quality Assurance (QA):
○ Process that validates functionality of a release.

● Silent installation template file:
○ File with the all installation options and values.
Sample file:
<?xml

version="1.0"?>

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="acceptLicense">true</entry>
</properties>
Definitions (3 of 4)
● Version upgrade: When either the x or y in
version x.y.z is higher than the currently
installed version.
When the product has bugs or errors, sometimes we will
get out of cycle patches from the vendor:

● Engineering build: (no applicable version)
○ quick (little or no) QA before releasing version

● Hotfix: (the “z” in version x.y.z)
○ full QA before releasing version
Note: Some vendors use x.y.z.a
Definitions (4 of 4)
● idempotent:
Only make changes if they are required.
● hiera:
Helps to separate data from code (see
Chapter 12 of the “Book”)
Our situation
● most of our stack uses Enterprise tools (lots
of 3rd party installers)
● mostly linux (OEL 5)
● lack of “root” has its challenges
● lots of environments
● each technology on a separate virtual
machine (means lots of VMs)
● many vendor/consultants/partners
Overall Installation steps
●
●
●
●
●
●

Download installation file (zip/tgz)
Review requirements
Pre-install steps
Run installer
Installation options
Post-install steps
3rd Party Installers
Most have:
● sample silent
template file
● installation binary
● installation files
● installation
documentation

Most are missing:
● service script
(start/stop/status)
● any verification
methods (post
installation)
Pre-install Requirements
● Most require java (run-time)
○ cannot use openjdk!
○ some products bring own jre

● Most require another specific version of
another 3rd party installation (example:
product B v4.9.0 requires product A v8.3+)
Installation User Interfaces
● Interactive graphical user interface (xterm
window)
○ often the options are saved in a file and can be
converted into a silent installation file

● Interactive text mode
● Command line using “silent” installation
option:
./installer -silent options.txt
3rd Party Installer “state”
● Different installers store installation status in
different places; typically in home dir and or
in the destination directory
● If vendor support wants to know about
system, they often ask for files/directories
showing this state (for what is installed)
Scripting options
A. Re-package:
○ install once - preserve files post-install
○ the internal “state” would have to be reverse
engineered
○ vendor would have an excuse “you did not install per
instructions”

B. Script using the “silent” installation
Initial installation scripting (v1.0)
●
●
●
●
●
●

Initial scripting (ant/shell scripts)
One configuration file per installation per VM
Lots of redundant config
Hard to maintain
Hard to train
Put the binary installers in version control
system (sounds bad - but it works for us)
● Shared /software source (home of tarballs)
v2.0 - Using puppet
●
●
●
●

<environment>/site.pp
rootless package
/data/env/<envname> (hiera)
Combine product installs into one class
v2.0 - Using puppet (continued)
● Vendor install class (defined type)
● Two stages to install:
1. extract software to /tmp and run
installation (see sufact hack)
2. configuration files, cron, aliases, etc.
Example of a Puppet Package
package { 'apache2':
ensure => '2.4',
}
Resource abstraction layer
Pretty Picture Here
Resource abstraction layer
Puppet is a Programming Language
● Contains and hides complexity (API)
● You do not really want to see how the
sausage gets made.
Note:
● We are creating “anti-patterns”.
● Need to ensure code is idempotent.
Example of API
class { 'ssh':
root_login => 'without-password',
}
Another API example
class { 'apache':
mods => ['index', 'rewrite'],
}
Example of Vendor::Software
class { 'vendorSoft::someSoftware':
version => 2.1,
}
Sample Vendor/Product
As an example, we are going to install Acme’s
product Foo version 4.9.0.
● In the <environment>/site.pp:
class { 'acme::foo490': }
Two types of Vendor Installs
1. 'untar' installs
Install consists of untarring or unziping files to the correct locations.

2. 'installer' installs
Install consists of running the vendor's installation binary with flags and a
silent file.

Note: Both of these will have the same
interface from puppet.
'untar' installs: Puppet class
● Ensure all dependencies
● Unzip zipfile/tarball from network share to
installation location
● Set values in configuration files
'install' installs: Puppet class
● Unzip zipfile/tarball from network share to
temporary location
● Set values in configuration files or “silent” file
● Run installer
● Clean up temporary installation
Note: We were not going for how many Puppet Style guide infractions we could
make, it just happened that way.
Idempotency
How do we make these idempotent?
Idempotency: untars
rootless::tardir {
'/opt/app/other_place/folder':
ensure => present,
tarfile => '/big/nfs/mount/tar.tar.gz'
}
Idempotency: untars
exec { 'untar-directory':
provider => shell,
command => '/bin/tar -xvzf /big/file.tgz
/the/location',
unless
=> 'stat /the/location/tardir',
}
Sample acme::acme_install (1 of 5)
define acme::acme_install(
$creates_file,
$installationFile,
$installationRoot,
$installer,
$product,
$tmpdir,
$version,
$installer_content,
$ensure

= true,

$group

= $::puppet_user,

$owner

= $::puppet_group,

$source_dir

= "/software/install/installers",

$create_tmpdir = true,
){
Sample acme::acme_install (2 of 5)
if $ensure {
# install
if $create_tmpdir {
file { "${tmpdir}-create":
path

=> $tmpdir,

ensure => directory,
}
}

anchor { "$name-unpack::begin": }
anchor { "$name-unpack::end": }

<snip - unzip/untar >

Anchor pattern
Sample acme::acme_install (3 of 5)
file { "${tmpdir}/silent":
ensure

=> file,

content => "$installer_content",

Silent file from template

require => Anchor["$name-unpack::end"],
}

file { "${tmpdir}/${installer}":
ensure

=> file,

mode

=> '0755',

require => Anchor["$name-unpack::end"],
}

Ensure installer is
executable
Question
What is the return value of a zero byte file that
has the “execute” bit set?
$ echo > /tmp/nobytes
$ ls -al /tmp/nobytes
-rw-r--r--

1 user

wheel

1 Jan 14 12:06 /tmp/nobytes

$ chmod +x /tmp/nobytes
$ ./nobytes
$ echo $?

What is the return value from “./nobytes”?
Sample acme::acme_install (4 of 5)
# verify that the file we are about to execute is *not* a 0 byte "executable"
exec { "verify-installer-${acme_product}":
command

=> "/usr/bin/[ -s ${tmpdir}/${installer} ]",

provider => 'shell',
cwd

=> $tmpdir,

require

Check

=> File["${tmpdir}/${installer}"],

}
exec { "install-${acme_product}":
command

=> "source ~/.bashrc && ${tmpdir}/${installer} -silent -V responseFile=${tmpdir}/silent",

provider => 'shell',
timeout

=> 30000,

cwd

=> $tmpdir,

Do installation

require => [File["${tmpdir}/silent"], File["${tmpdir}/${installer}"], Exec["verifyinstaller-${product}"], ],
creates
}

=> "${installationRoot}/${creates_file}",
Sample acme::acme_install (5 of 5)
# Check the logs for errors
exec { "${acme_product}-log-check":
command

=> "! /bin/grep -R -E "::ERROR::|err.X" ${::puppet_user_home}/.ACME",

provider

=> 'shell',

require

=> Exec["install-${acme_product}"]

Any errors?

}
# need to clean up tmpdir
if $clean_up_tmpdir {
exec { "${tmpdir}-remove":

Clean up

command

=> "/bin/rm -fr ${tmpdir}",

provider

=> 'shell',

require

=> [ Exec["install-${product}"], Exec["${product}-log-check"], ],

}
}
} else { # uninstall
<snip>
Problem is (still) idempotency
● Multiple resources cannot be chained to an
unless clause of an exec
● Anchors are a part of this
● Maybe 3.4 contains() will help fix this, we
have not had time to evaluate
Sufact (su fact)
● Puppet module
● Modest ambitions
● Turns out to be really awesome
https://github.com/TheDarren/fact
Sufact (su fact)
● fact { "su_support": value => "IDG" }
● Then:
○ $su_support == "IDG"

We use this to flag and pin versions of vendor
software.
Puppet
● Built each version of each installer as
separate module
acme::yyy123
where yyy is a short name of the product
and 123 is the “version”
Write facts to set these values, then check
Sample foo490 (1 of 3)
class acme::foo490(
$owner

= $::puppet_user,

$group

= $::puppet_group,

$install_root

= "/opt/app/${::puppet_user}",

$source_dir

= '/software/install/installers',

$tmpdir

= "/tmp/tmpfoo490-${::puppet_user}",

$installationFile

= 'foo_4.9.0_linux26gl23_x86_64.zip',

$installer

= 'Installer-lnx-x86.bin',

$version

= '4.9.0',

# these values are in the silent file
$silent_environmentName
$feature_acme
$ensure

= true,

Silent values

= hiera('acme_feature_xxx', “blargh”,

){

= 'FOO',

Hiera pattern
Sample foo490 (2 of 3)
$installationRoot="${install_root}/somedir"
$product = 'acme490'
anchor { "${product}_installed": }

if $ensure {

Anchor pattern
Ensure pattern

# Note: Config files/cron entries, etc. here

if $acme490_installed == undef {
$installer_content = template("acme/${product}/silent.erb")
acme::acme_install { $product:
installationFile

=> $installationFile,

installationRoot

=> $installationRoot,

installer

=> $installer,

product

=> $product,

tmpdir

=> $tmpdir,

Call our defined type
Sample foo490 (3 of 3)
version

=> $version,

creates_file

=> "foo${product}",

ensure

=> true,

group

=> $group,

owner

=> $owner,

source_dir

=> $source_dir,

installer_content => $installer_content,
before

=> Anchor["${product}_installed"],

Anchor pattern

}
fact { "${product}_installed":
value

=> $version,

require => Acme::Acme_install[$product],
}
}
} else { # uninstall

Fact pattern
Combining Vendor products
class acme::foo12 (
$installationRoot = "/opt/app/${::puppet_user}/somedir",
){
anchor { 'acme::foo12::begin': }
anchor { 'acme::foo12::end': }
class { 'acme::foo123':
#parameters
}
Anchor [‘acme::foo12::begin’] ->
Class [‘acme::bar123’] ->
Class [‘acme::baz124’] ->
Anchor [‘acme::foo12::end’
<snip>

Dependency
chaining pattern
Testing the Puppet installations
●
●
●
●
●

Similar to Rspec-system/Beaker
Totally home-grown
Written in shell
Integration testing
Linux Container (LXC) Based
Testing the Puppet installations
●
●
●
●
●
●

Fires up LXC
Builds ssh bridge to LXC
Run “puppet apply”
Runs suite of 'checks'
Teardown LXC
Repeat for ever suite of checks
Testing the Puppet installations
● Work in progress
● Plan to leverage this for refactoring and
beautification project
● Plan to use Jenkins for reporting
Testing the Puppet installations
#!/bin/bash
testname=foo610
if [ -d "/somedir/config" ];then
:
else
exit 1
fi
Challenges
●
●
●
●
●
●
●

Often used the “dot-uh-oh” versions
Large and many installers
Many different versions
Testing
Puppet development environment
Installation validation
Orchestration issues (queue creation, stop
commands before upgrading files, start &
wait, etc.)
Future
● Automation of pre-installation (checks)
● Automatically add the monitoring/syslog
configs (both are done manually now)
● Possibly pull post-processing into puppet
● md5sum checking of installed files
● Possibly look into app deployments using
puppet (need orchestration in a big way)
Questions

Any questions?

Mais conteúdo relacionado

Mais procurados

Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special EditionIntroduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special EditionJérôme Petazzoni
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesJérôme Petazzoni
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)Chu-Siang Lai
 
CLUG 2010 09 - systemd - the new init system
CLUG 2010 09 - systemd - the new init systemCLUG 2010 09 - systemd - the new init system
CLUG 2010 09 - systemd - the new init systemPaulWay
 
Killer R10K Workflow - PuppetConf 2014
Killer R10K Workflow - PuppetConf 2014Killer R10K Workflow - PuppetConf 2014
Killer R10K Workflow - PuppetConf 2014Puppet
 
Dockerfish-Tutorial
Dockerfish-TutorialDockerfish-Tutorial
Dockerfish-TutorialBrian Hood
 
CloudOpen North America 2013: Vagrant & CFEngine
CloudOpen North America 2013: Vagrant & CFEngineCloudOpen North America 2013: Vagrant & CFEngine
CloudOpen North America 2013: Vagrant & CFEngineNick Anderson
 
Docker deploy
Docker deployDocker deploy
Docker deployEric Ahn
 
How tos nagios - centos wiki
How tos nagios - centos wikiHow tos nagios - centos wiki
How tos nagios - centos wikishahab071
 
Creating new Tizen profiles using the Yocto Project
Creating new Tizen profiles  using the Yocto ProjectCreating new Tizen profiles  using the Yocto Project
Creating new Tizen profiles using the Yocto ProjectLeon Anavi
 
Linux 开源操作系统发展新趋势
Linux 开源操作系统发展新趋势Linux 开源操作系统发展新趋势
Linux 开源操作系统发展新趋势Anthony Wong
 
Virtualenv
VirtualenvVirtualenv
VirtualenvWEBdeBS
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Ontico
 
Using Eclipse to Build a Linux Distribution
Using Eclipse to Build a Linux DistributionUsing Eclipse to Build a Linux Distribution
Using Eclipse to Build a Linux Distributionjerboaa
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsMicael Gallego
 
Bgoug 2019.11 test your pl sql - not your patience
Bgoug 2019.11   test your pl sql - not your patienceBgoug 2019.11   test your pl sql - not your patience
Bgoug 2019.11 test your pl sql - not your patienceJacek Gebal
 

Mais procurados (20)

Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special EditionIntroduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
 
CLUG 2010 09 - systemd - the new init system
CLUG 2010 09 - systemd - the new init systemCLUG 2010 09 - systemd - the new init system
CLUG 2010 09 - systemd - the new init system
 
Killer R10K Workflow - PuppetConf 2014
Killer R10K Workflow - PuppetConf 2014Killer R10K Workflow - PuppetConf 2014
Killer R10K Workflow - PuppetConf 2014
 
Dockerfish-Tutorial
Dockerfish-TutorialDockerfish-Tutorial
Dockerfish-Tutorial
 
Security Testing Using Infrastructure-As-Code
Security Testing Using Infrastructure-As-CodeSecurity Testing Using Infrastructure-As-Code
Security Testing Using Infrastructure-As-Code
 
CloudOpen North America 2013: Vagrant & CFEngine
CloudOpen North America 2013: Vagrant & CFEngineCloudOpen North America 2013: Vagrant & CFEngine
CloudOpen North America 2013: Vagrant & CFEngine
 
Docker deploy
Docker deployDocker deploy
Docker deploy
 
How tos nagios - centos wiki
How tos nagios - centos wikiHow tos nagios - centos wiki
How tos nagios - centos wiki
 
Creating new Tizen profiles using the Yocto Project
Creating new Tizen profiles  using the Yocto ProjectCreating new Tizen profiles  using the Yocto Project
Creating new Tizen profiles using the Yocto Project
 
Golang workshop
Golang workshopGolang workshop
Golang workshop
 
Linux 开源操作系统发展新趋势
Linux 开源操作系统发展新趋势Linux 开源操作系统发展新趋势
Linux 开源操作系统发展新趋势
 
Virtualenv
VirtualenvVirtualenv
Virtualenv
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)
 
App container rkt
App container rktApp container rkt
App container rkt
 
Using Eclipse to Build a Linux Distribution
Using Eclipse to Build a Linux DistributionUsing Eclipse to Build a Linux Distribution
Using Eclipse to Build a Linux Distribution
 
Puppet evolutions
Puppet evolutionsPuppet evolutions
Puppet evolutions
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
 
Bgoug 2019.11 test your pl sql - not your patience
Bgoug 2019.11   test your pl sql - not your patienceBgoug 2019.11   test your pl sql - not your patience
Bgoug 2019.11 test your pl sql - not your patience
 

Destaque

Doing It Wrong with Puppet -
Doing It Wrong with Puppet - Doing It Wrong with Puppet -
Doing It Wrong with Puppet - Puppet
 
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)Puppet
 
Replacing "exec" with a type and provider: Return manifests to a declarative ...
Replacing "exec" with a type and provider: Return manifests to a declarative ...Replacing "exec" with a type and provider: Return manifests to a declarative ...
Replacing "exec" with a type and provider: Return manifests to a declarative ...Puppet
 
Using Puppet on Linux, Windows, and Mac OSX
Using Puppet on Linux, Windows, and Mac OSXUsing Puppet on Linux, Windows, and Mac OSX
Using Puppet on Linux, Windows, and Mac OSXPuppet
 
Demystifying TLS
Demystifying TLSDemystifying TLS
Demystifying TLSPuppet
 
Python PPT
Python PPTPython PPT
Python PPTEdureka!
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to PythonNowell Strite
 

Destaque (8)

Doing It Wrong with Puppet -
Doing It Wrong with Puppet - Doing It Wrong with Puppet -
Doing It Wrong with Puppet -
 
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
 
Replacing "exec" with a type and provider: Return manifests to a declarative ...
Replacing "exec" with a type and provider: Return manifests to a declarative ...Replacing "exec" with a type and provider: Return manifests to a declarative ...
Replacing "exec" with a type and provider: Return manifests to a declarative ...
 
Using Puppet on Linux, Windows, and Mac OSX
Using Puppet on Linux, Windows, and Mac OSXUsing Puppet on Linux, Windows, and Mac OSX
Using Puppet on Linux, Windows, and Mac OSX
 
Demystifying TLS
Demystifying TLSDemystifying TLS
Demystifying TLS
 
Puppets ppt
Puppets pptPuppets ppt
Puppets ppt
 
Python PPT
Python PPTPython PPT
Python PPT
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to Python
 

Semelhante a Wrangling 3rd Party Installers from Puppet

Linux Distribution Automated Testing
 Linux Distribution Automated Testing Linux Distribution Automated Testing
Linux Distribution Automated TestingAleksander Baranowski
 
DevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration managementDevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration managementFelipe
 
Apache Kafka Setup with Zookeeper - SkillAnything.pdf
Apache Kafka Setup with Zookeeper - SkillAnything.pdfApache Kafka Setup with Zookeeper - SkillAnything.pdf
Apache Kafka Setup with Zookeeper - SkillAnything.pdfSkillAnything
 
Os dev tool box
Os dev tool boxOs dev tool box
Os dev tool boxbpowell29a
 
Oracle11g On Fedora14
Oracle11g On Fedora14Oracle11g On Fedora14
Oracle11g On Fedora14kmsa
 
#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to AnsibleCédric Delgehier
 
(Practical) linux 104
(Practical) linux 104(Practical) linux 104
(Practical) linux 104Arie Bregman
 
How I hack on puppet modules
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modulesKris Buytaert
 
Containerize your Blackbox tests
Containerize your Blackbox testsContainerize your Blackbox tests
Containerize your Blackbox testsKevin Beeman
 
Strategies for developing and deploying your embedded applications and images
Strategies for developing and deploying your embedded applications and imagesStrategies for developing and deploying your embedded applications and images
Strategies for developing and deploying your embedded applications and imagesMender.io
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at ScaleKris Buytaert
 
Suse Studio: "How to create a live openSUSE image with OpenFOAM® and CFD tools"
Suse Studio: "How to create a live openSUSE image with  OpenFOAM® and CFD tools"Suse Studio: "How to create a live openSUSE image with  OpenFOAM® and CFD tools"
Suse Studio: "How to create a live openSUSE image with OpenFOAM® and CFD tools"Baltasar Ortega
 
Creating a Mature Puppet System
Creating a Mature Puppet SystemCreating a Mature Puppet System
Creating a Mature Puppet SystemPuppet
 
Creating a mature puppet system
Creating a mature puppet systemCreating a mature puppet system
Creating a mature puppet systemrkhatibi
 
Helpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and DjangoHelpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and Djangoroskakori
 

Semelhante a Wrangling 3rd Party Installers from Puppet (20)

Linux Distribution Automated Testing
 Linux Distribution Automated Testing Linux Distribution Automated Testing
Linux Distribution Automated Testing
 
DevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration managementDevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration management
 
Odoo V8 Installation
Odoo V8 InstallationOdoo V8 Installation
Odoo V8 Installation
 
Apache Kafka Setup with Zookeeper - SkillAnything.pdf
Apache Kafka Setup with Zookeeper - SkillAnything.pdfApache Kafka Setup with Zookeeper - SkillAnything.pdf
Apache Kafka Setup with Zookeeper - SkillAnything.pdf
 
Os dev tool box
Os dev tool boxOs dev tool box
Os dev tool box
 
Oracle11g On Fedora14
Oracle11g On Fedora14Oracle11g On Fedora14
Oracle11g On Fedora14
 
Oracle11g on fedora14
Oracle11g on fedora14Oracle11g on fedora14
Oracle11g on fedora14
 
#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible
 
(Practical) linux 104
(Practical) linux 104(Practical) linux 104
(Practical) linux 104
 
How I hack on puppet modules
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modules
 
Intro django
Intro djangoIntro django
Intro django
 
Containerize your Blackbox tests
Containerize your Blackbox testsContainerize your Blackbox tests
Containerize your Blackbox tests
 
Strategies for developing and deploying your embedded applications and images
Strategies for developing and deploying your embedded applications and imagesStrategies for developing and deploying your embedded applications and images
Strategies for developing and deploying your embedded applications and images
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
 
Virtual domains
Virtual domainsVirtual domains
Virtual domains
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at Scale
 
Suse Studio: "How to create a live openSUSE image with OpenFOAM® and CFD tools"
Suse Studio: "How to create a live openSUSE image with  OpenFOAM® and CFD tools"Suse Studio: "How to create a live openSUSE image with  OpenFOAM® and CFD tools"
Suse Studio: "How to create a live openSUSE image with OpenFOAM® and CFD tools"
 
Creating a Mature Puppet System
Creating a Mature Puppet SystemCreating a Mature Puppet System
Creating a Mature Puppet System
 
Creating a mature puppet system
Creating a mature puppet systemCreating a mature puppet system
Creating a mature puppet system
 
Helpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and DjangoHelpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and Django
 

Mais de Puppet

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

Mais de Puppet (20)

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

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
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)wesley chun
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
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...apidays
 
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 educationjfdjdjcjdnsjd
 
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
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
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...Miguel Araújo
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
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...Neo4j
 

Último (20)

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
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)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
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...
 
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
 
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...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
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
 
+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...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - 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...
 

Wrangling 3rd Party Installers from Puppet

  • 1. Wrangling 3rd Party Installers with Puppet Puppet Camp Portland 2014 January 14, 2014
  • 2. Overview ● ● ● ● ● About us Definitions Our situation Overall steps What we get and what is missing from installers ● Requirements ● ● ● ● ● ● ● ● Installer “state” Initial scripting v2.0 using Puppet Our solution Testing Challenges Future Q&A
  • 3. About us Mike Kinney Spencer Krum mike.kinney@gmail.com krum.spencer@gmail.com github.com/mkinney github.com/nibalizer ● UTi Worldwide ● Mentioned in the “Book” ● UTi Worldwide ● PSU CAT ● Co-author of the “Book” 2nd Edition
  • 4. About us Mike Kinney ● Automating installations for few years ● New to puppet Spencer Krum ● New to these 3rd party tools ● Puppet expert
  • 5. A few words about vendors ● We use a few vendors. ● We will try to keep their names out of it, though it might slip out once or twice. ● The focus of this talk is how we work around not being able to use a package management tool. (like apt/rpm) ● These patterns should be universal.
  • 6. Definitions (1 of 4) ● 3rd Party software: ○ Software that is bought from a software vendor, almost always closed source. ● Installer: ○ The installation method described by the vendor for the 3rd party software. Often this is a binary file like “installer.bin”.
  • 7. Definitions (2 of 4) ● Quality Assurance (QA): ○ Process that validates functionality of a release. ● Silent installation template file: ○ File with the all installation options and values. Sample file: <?xml version="1.0"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <entry key="acceptLicense">true</entry> </properties>
  • 8. Definitions (3 of 4) ● Version upgrade: When either the x or y in version x.y.z is higher than the currently installed version. When the product has bugs or errors, sometimes we will get out of cycle patches from the vendor: ● Engineering build: (no applicable version) ○ quick (little or no) QA before releasing version ● Hotfix: (the “z” in version x.y.z) ○ full QA before releasing version Note: Some vendors use x.y.z.a
  • 9. Definitions (4 of 4) ● idempotent: Only make changes if they are required. ● hiera: Helps to separate data from code (see Chapter 12 of the “Book”)
  • 10. Our situation ● most of our stack uses Enterprise tools (lots of 3rd party installers) ● mostly linux (OEL 5) ● lack of “root” has its challenges ● lots of environments ● each technology on a separate virtual machine (means lots of VMs) ● many vendor/consultants/partners
  • 11. Overall Installation steps ● ● ● ● ● ● Download installation file (zip/tgz) Review requirements Pre-install steps Run installer Installation options Post-install steps
  • 12. 3rd Party Installers Most have: ● sample silent template file ● installation binary ● installation files ● installation documentation Most are missing: ● service script (start/stop/status) ● any verification methods (post installation)
  • 13. Pre-install Requirements ● Most require java (run-time) ○ cannot use openjdk! ○ some products bring own jre ● Most require another specific version of another 3rd party installation (example: product B v4.9.0 requires product A v8.3+)
  • 14. Installation User Interfaces ● Interactive graphical user interface (xterm window) ○ often the options are saved in a file and can be converted into a silent installation file ● Interactive text mode ● Command line using “silent” installation option: ./installer -silent options.txt
  • 15. 3rd Party Installer “state” ● Different installers store installation status in different places; typically in home dir and or in the destination directory ● If vendor support wants to know about system, they often ask for files/directories showing this state (for what is installed)
  • 16. Scripting options A. Re-package: ○ install once - preserve files post-install ○ the internal “state” would have to be reverse engineered ○ vendor would have an excuse “you did not install per instructions” B. Script using the “silent” installation
  • 17. Initial installation scripting (v1.0) ● ● ● ● ● ● Initial scripting (ant/shell scripts) One configuration file per installation per VM Lots of redundant config Hard to maintain Hard to train Put the binary installers in version control system (sounds bad - but it works for us) ● Shared /software source (home of tarballs)
  • 18. v2.0 - Using puppet ● ● ● ● <environment>/site.pp rootless package /data/env/<envname> (hiera) Combine product installs into one class
  • 19. v2.0 - Using puppet (continued) ● Vendor install class (defined type) ● Two stages to install: 1. extract software to /tmp and run installation (see sufact hack) 2. configuration files, cron, aliases, etc.
  • 20. Example of a Puppet Package package { 'apache2': ensure => '2.4', }
  • 23. Puppet is a Programming Language ● Contains and hides complexity (API) ● You do not really want to see how the sausage gets made. Note: ● We are creating “anti-patterns”. ● Need to ensure code is idempotent.
  • 24. Example of API class { 'ssh': root_login => 'without-password', }
  • 25. Another API example class { 'apache': mods => ['index', 'rewrite'], }
  • 26. Example of Vendor::Software class { 'vendorSoft::someSoftware': version => 2.1, }
  • 27. Sample Vendor/Product As an example, we are going to install Acme’s product Foo version 4.9.0. ● In the <environment>/site.pp: class { 'acme::foo490': }
  • 28. Two types of Vendor Installs 1. 'untar' installs Install consists of untarring or unziping files to the correct locations. 2. 'installer' installs Install consists of running the vendor's installation binary with flags and a silent file. Note: Both of these will have the same interface from puppet.
  • 29. 'untar' installs: Puppet class ● Ensure all dependencies ● Unzip zipfile/tarball from network share to installation location ● Set values in configuration files
  • 30. 'install' installs: Puppet class ● Unzip zipfile/tarball from network share to temporary location ● Set values in configuration files or “silent” file ● Run installer ● Clean up temporary installation Note: We were not going for how many Puppet Style guide infractions we could make, it just happened that way.
  • 31. Idempotency How do we make these idempotent?
  • 32. Idempotency: untars rootless::tardir { '/opt/app/other_place/folder': ensure => present, tarfile => '/big/nfs/mount/tar.tar.gz' }
  • 33. Idempotency: untars exec { 'untar-directory': provider => shell, command => '/bin/tar -xvzf /big/file.tgz /the/location', unless => 'stat /the/location/tardir', }
  • 34. Sample acme::acme_install (1 of 5) define acme::acme_install( $creates_file, $installationFile, $installationRoot, $installer, $product, $tmpdir, $version, $installer_content, $ensure = true, $group = $::puppet_user, $owner = $::puppet_group, $source_dir = "/software/install/installers", $create_tmpdir = true, ){
  • 35. Sample acme::acme_install (2 of 5) if $ensure { # install if $create_tmpdir { file { "${tmpdir}-create": path => $tmpdir, ensure => directory, } } anchor { "$name-unpack::begin": } anchor { "$name-unpack::end": } <snip - unzip/untar > Anchor pattern
  • 36. Sample acme::acme_install (3 of 5) file { "${tmpdir}/silent": ensure => file, content => "$installer_content", Silent file from template require => Anchor["$name-unpack::end"], } file { "${tmpdir}/${installer}": ensure => file, mode => '0755', require => Anchor["$name-unpack::end"], } Ensure installer is executable
  • 37. Question What is the return value of a zero byte file that has the “execute” bit set? $ echo > /tmp/nobytes $ ls -al /tmp/nobytes -rw-r--r-- 1 user wheel 1 Jan 14 12:06 /tmp/nobytes $ chmod +x /tmp/nobytes $ ./nobytes $ echo $? What is the return value from “./nobytes”?
  • 38. Sample acme::acme_install (4 of 5) # verify that the file we are about to execute is *not* a 0 byte "executable" exec { "verify-installer-${acme_product}": command => "/usr/bin/[ -s ${tmpdir}/${installer} ]", provider => 'shell', cwd => $tmpdir, require Check => File["${tmpdir}/${installer}"], } exec { "install-${acme_product}": command => "source ~/.bashrc && ${tmpdir}/${installer} -silent -V responseFile=${tmpdir}/silent", provider => 'shell', timeout => 30000, cwd => $tmpdir, Do installation require => [File["${tmpdir}/silent"], File["${tmpdir}/${installer}"], Exec["verifyinstaller-${product}"], ], creates } => "${installationRoot}/${creates_file}",
  • 39. Sample acme::acme_install (5 of 5) # Check the logs for errors exec { "${acme_product}-log-check": command => "! /bin/grep -R -E "::ERROR::|err.X" ${::puppet_user_home}/.ACME", provider => 'shell', require => Exec["install-${acme_product}"] Any errors? } # need to clean up tmpdir if $clean_up_tmpdir { exec { "${tmpdir}-remove": Clean up command => "/bin/rm -fr ${tmpdir}", provider => 'shell', require => [ Exec["install-${product}"], Exec["${product}-log-check"], ], } } } else { # uninstall <snip>
  • 40. Problem is (still) idempotency ● Multiple resources cannot be chained to an unless clause of an exec ● Anchors are a part of this ● Maybe 3.4 contains() will help fix this, we have not had time to evaluate
  • 41. Sufact (su fact) ● Puppet module ● Modest ambitions ● Turns out to be really awesome https://github.com/TheDarren/fact
  • 42. Sufact (su fact) ● fact { "su_support": value => "IDG" } ● Then: ○ $su_support == "IDG" We use this to flag and pin versions of vendor software.
  • 43. Puppet ● Built each version of each installer as separate module acme::yyy123 where yyy is a short name of the product and 123 is the “version” Write facts to set these values, then check
  • 44. Sample foo490 (1 of 3) class acme::foo490( $owner = $::puppet_user, $group = $::puppet_group, $install_root = "/opt/app/${::puppet_user}", $source_dir = '/software/install/installers', $tmpdir = "/tmp/tmpfoo490-${::puppet_user}", $installationFile = 'foo_4.9.0_linux26gl23_x86_64.zip', $installer = 'Installer-lnx-x86.bin', $version = '4.9.0', # these values are in the silent file $silent_environmentName $feature_acme $ensure = true, Silent values = hiera('acme_feature_xxx', “blargh”, ){ = 'FOO', Hiera pattern
  • 45. Sample foo490 (2 of 3) $installationRoot="${install_root}/somedir" $product = 'acme490' anchor { "${product}_installed": } if $ensure { Anchor pattern Ensure pattern # Note: Config files/cron entries, etc. here if $acme490_installed == undef { $installer_content = template("acme/${product}/silent.erb") acme::acme_install { $product: installationFile => $installationFile, installationRoot => $installationRoot, installer => $installer, product => $product, tmpdir => $tmpdir, Call our defined type
  • 46. Sample foo490 (3 of 3) version => $version, creates_file => "foo${product}", ensure => true, group => $group, owner => $owner, source_dir => $source_dir, installer_content => $installer_content, before => Anchor["${product}_installed"], Anchor pattern } fact { "${product}_installed": value => $version, require => Acme::Acme_install[$product], } } } else { # uninstall Fact pattern
  • 47. Combining Vendor products class acme::foo12 ( $installationRoot = "/opt/app/${::puppet_user}/somedir", ){ anchor { 'acme::foo12::begin': } anchor { 'acme::foo12::end': } class { 'acme::foo123': #parameters } Anchor [‘acme::foo12::begin’] -> Class [‘acme::bar123’] -> Class [‘acme::baz124’] -> Anchor [‘acme::foo12::end’ <snip> Dependency chaining pattern
  • 48. Testing the Puppet installations ● ● ● ● ● Similar to Rspec-system/Beaker Totally home-grown Written in shell Integration testing Linux Container (LXC) Based
  • 49. Testing the Puppet installations ● ● ● ● ● ● Fires up LXC Builds ssh bridge to LXC Run “puppet apply” Runs suite of 'checks' Teardown LXC Repeat for ever suite of checks
  • 50. Testing the Puppet installations ● Work in progress ● Plan to leverage this for refactoring and beautification project ● Plan to use Jenkins for reporting
  • 51. Testing the Puppet installations #!/bin/bash testname=foo610 if [ -d "/somedir/config" ];then : else exit 1 fi
  • 52. Challenges ● ● ● ● ● ● ● Often used the “dot-uh-oh” versions Large and many installers Many different versions Testing Puppet development environment Installation validation Orchestration issues (queue creation, stop commands before upgrading files, start & wait, etc.)
  • 53. Future ● Automation of pre-installation (checks) ● Automatically add the monitoring/syslog configs (both are done manually now) ● Possibly pull post-processing into puppet ● md5sum checking of installed files ● Possibly look into app deployments using puppet (need orchestration in a big way)