SlideShare ist ein Scribd-Unternehmen logo
1 von 74
Downloaden Sie, um offline zu lesen
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Master Chef class
https://github.com/francoisledroff/connectcon-chef-repo
http://www.slideshare.net/francoisledroff/master-chef-class-learn-how-to-quickly-cook-delightful-cqaem-infrastructures
Francois Le Droff – Nicolas Peltier
Let’s cook delightful AEM infrastructures
/master-chef-class-learn-how-to-quickly-cook-delightful-cqaem-infrastructures
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
@francoisledroff
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
@npeltier
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Agenda
•!What
•!How
•!Why
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
What ?
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
“ An automation platform
that transforms
infrastructure into code ”
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Infrastructure ?
noun ˈin-frə-ˌstrək-chər
[1] A Collection of
–!Resources:
•! Network nodes
•! File systems, files, folders, symbolic links, disk mounts
•! Users, groups
•! Packages, software
•! Configurations
–!Acting in concert
–!To offer a service
–! [1] Introduction to Chef
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Infrastructure as Code?
•! Does not only replace your shell scripts
•! Does allow:
–! to build your infra from a set of bare metal servers (called
Nodes) Even on heterogeneous OS and Architecture
–! to abstract the convergence of your infrastructure (your
Nodes) through code
–! to make this (Nodes) convergence idempotent
State A --> State B (ex: install)
Chef Client finished, 147/153 resources updated
State B --> State B (ex: check)
Chef Client finished, 0/153 resources updated
State C --> State B (ex: back to normal)
Chef Client finished, 48/153 resources updated
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
•! Created in 2009, Edited by Opscode/Chef
•! Apache License
•! On-top-of/in Ruby
•! Very active community
•! http://community.opscode.com
•! #learnChef
•! https://learnchef.opscode.com/
Chef ?
p://community.opscode.com
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
What does Chef code look like ?
•! Recipes
•! Attributes
•! Resources
•! Cookbooks
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Recipes
Fundamental configuration element
•! Authored in Ruby
•! Queries , defines attributes
•! Manipulates Resources
•! Manipulates LW Resources
•! Leverages Libraries & Templates
•! Stored in Cookbooks
–! Default Attributes
–! Recipes
–! LW Resource Providers
–! Libraries
–! Templates
recipes
cookbooks
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
•! aem-cookbook/recipes/default.rb
case node['platform_family']
when 'rhel'
log 'this platform family is supported' do
level :info
end
else
log 'this platform family is not supported' do
level :warn
end
end
•! aem-cookbook/attributes/node.rb
default['aem']['mode'] = 'publish'
default['aem']['port'] = '4503'
default['aem']['url'] = 'http://localhost:'+ node['aem']
['port']
default['aem']['mode'] = 'publish'
default['aem']['port'] = '4503'
default['aem']['url'] = 'http://localhost:'+ node['aemaem']
['port']
aem-cookbook/recipes/default.rb
case node['platform_family']
when 'rhel'
log 'this platform family is supported' do
level :info
end
else
log 'this platform family is not supported' do
level :warn
end
end
Attributes
attributes
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Recipes : Resources & LW Resources
•! aem-cookbook/recipes/default.rb
remote_file node['aem']['quickstart_jar'] do
source node['aem']['repo_url']
owner node['aem']['user']
group node['aem']['group']
checksum '3043859473'
action :create_if_missing
notifies :restart, 'service[aem]', :delayed
end
or
artifact_file node['aem']['quickstart_jar'] do
location 'com.day.cq:cq5:jar:5.5.0.20120220'
nexus_configuration nexus_configuration_object
owner node['aem']['user']
group node['aem']['group']
notifies :restart, 'service[aem]', :delayed
end
artifact_file node['aem']['quickstart_jar'] do
location 'com.day.cq:cq5:jar:5.5.0.20120220'
nexus_configuration nexus_configuration_object
owner node['aem']['user']
group node['aem']['group']
notifies :restart, 'service[aem]', :delayed
end
remote_file node['aem']['quickstart_jar'] do
source node['aem']['repo_url']
owner node['aem']['user']
group node['aem']['group']
checksum '3043859473'
action :create_if_missing
notifies :restart, 'service[aem]', :delayed
end
recipes
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Recipes : AEM LW Resources
•! tacit-aem-cookbook/recipes/author.rb
node[:aem][:author][:deploy_pkgs].each do |pkg|
aem_package pkg[:name] do
version pkg[:version]
aem_instance ‘author’
package_url pkg[:url]
update pkg[:update]
user node[:aem][:author][:admin_user]
password node[:aem][:author][:admin_password]
port node[:aem][:author][:port]
group_id pkg[:group_id]
recursive pkg[:recursive]
properties_file pkg[:properties_file]
version_pattern pkg[:version_pattern]
action pkg[:action]
end
end
node[:aem][:author][:deploy_pkgs].each do |pkg|
aem_package pkg[:name] do
version pkg[:version]
aem_instance ‘author’
package_url pkg[:url]
update pkg[:update]
user node[:aem][:author][:admin_user]
password node[:aem][:author][:admin_password]
port node[:aem][:author][:port]
group_id pkg[:group_id]
recursive pkg[:recursive]
properties_file pkg[:properties_file]
version_pattern pkg[:version_pattern]
action pkg[:action]
end
end
recipes
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
–! aem-cookbook/recipes/start.rb
ruby_block 'block_until_cq_operational' do
block do
Chef::Log.info 'Waiting until CQ is listening on port
'+node['aem']['port']
until CQHelper.service_listening?(node['aem']['port'])
sleep 1
Chef::Log.info('.')
end
Chef::Log.info 'Waiting until the CQ default page is
responding'
test_url = URI.parse(node['aem']['url'])
until CQHelper.endpoint_responding?(test_url)
sleep 1
Chef::Log.info('.')
end
end
action :nothing
end
Recipes: Libraries
recipes
© 2014 Adobe Systems Incorporated.© 2014 Adobe Systems Incorporated.
ruby_block 'block_until_cq_operational' do
block do
Chef::Log.info 'Waiting until CQ is listening on port
'+node['aem']['port']
until CQHelper.service_listening?(node['aem']['port'])
sleep 1
Chef::Log.info('.')
end
Chef::Log.info 'Waiting until the CQ default page is
responding'
test_url = URI.parse(node['aem']['url'])
until CQHelper.endpoint_responding?(test_url)
sleep 1
Chef::Log.info('.')
end
end
action :nothing
end
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Cookbook patterns [1]
•! Library cookbooks:
–! https://github.com/RiotGames/artifact-cookbook
–! https://github.com/francoisledroff/chef-vault-util
•! Application cookbooks
–! https://github.com/tacitknowledge/aem-cookbook
–! https://github.com/francoisledroff/aem-cookbook
–! https://github.com/onehealth-cookbooks/apache2
–! https://github.com/socrata-cookbooks/java
–! https://github.com/hw-cookbooks/haproxy
–! https://github.com/stevendanna/logrotate
–! https://github.com/opscode-cookbooks/chef-splunk
•! Organization specific
–! Wrapper cookbooks
–! Base cookbooks
–! Environment cookbooks
[1] http://blog.vialstudios.com/the-environment-cookbook-pattern/
Library cookbooks:
ps://github.com/RiotGames/artifact-cookbook
ps://github.com/francoisledro
cookbooks
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
I got it
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Wait a quick overview
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Chef-server nodes
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
workstation
Git
Chef-server nodes
ssh
env.
roles attributes
recipes
cookbooks
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
workstation
Git
Chef-server nodes
RSA key Auth
ssh
knife
env.
roles attributes
recipes
Chef-DK
data bags
cookbooks RSA Keys
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
workstation
Git
Chef-server nodes
RSA key Auth
ssh
knife
env.
roles attributes
recipes
Chef-DK
data bags
cookbooks RSA Keys
Search API
cookbooksorg
data bags
attributes
env.
recipes
node objectrun-list
rolesWeb UI
versions
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
workstation
Git
Chef-server nodes
RSA key Auth
ssh
RSA key Auth
knife
env.
roles attributes
recipes
Chef-DK
data bags
cookbooks RSA Keys
Search API
cookbooksorg
data bags
attributes
env.
recipes
node objectrun-list
rolesWeb UI
versions
chef-clients
RSA Key
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Search APIknife
workstation
env.
roles attributes
cookbooks
recipes
Git
org
Chef-DK
github
Nexus
opscode rubygem
data bags
attributes
env.
data bags
cookbooks recipes
Chef-server nodes
RSA key Auth
ssh
https
yymaven redhat
RSA Keys
node objectrun-list
rolesWeb UI
versions
RSA key Auth
chef-clients
RSA Key
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
How ?
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Use case 0 : one AEM Author
author
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Use case 0 : Chef Automation
–! Install the jdk
–! Download the jar
–! Install it as a service
–! A few aem cookbooks on github
•! https://github.com/francoisledroff/aem-cookbook
•! https://github.com/tacitknowledge/aem-cookbook
•! https://github.com/manosriglis/chef-aem
•! https://github.com/QVCItalia/chef-aem
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
OSS from opscode and elsewhere
Chef, Ruby, rvm, bundler
knife
workstation
Chef-DK
opscode
$ curl –L
https://www.opscode.com/chef/install.sh |
sudo bash
$ curl -sSL https://get.rvm.io | bash -s stable –-
ruby=1.9.3
$ gem install bundler
http://www.getchef.com/downloads/chef-dk
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
workstation
Git
ssh
A Chef repo in Git
Every Chef automated infra needs a Chef Repository
github
$ git clone https://github.com/opscode/chef-repo.git
Made available for you at
https://github.com/francoisledroff/connectcon-chef-repo
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
node
Get Few Machines/Nodes
to deploy your code/infra to
workstation
ssh
~/workspace/github/connectcon-chef-repo on ! master!
$ vagrant plugin install vagrant-berkshelf --plugin-version 2.0.1
$ cat Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "CentOS-6.4-x86_64"
config.vm.hostname = "connectcon-francois"
config.vm.box_url = "http://developer.nrel.gov/downloads/vagrant-boxes/
CentOS-6.4-x86_64-v20130427.box"
config.berkshelf.enabled = true
End
$ vagrant up
$ vagrant ssh
Welcome to your Vagrant-built virtual machine.
[vagrant@connectcon-francois ~]$
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
A Chef Server
comes in 3 flavors
•! On premise OS Chef Server
•! On premise Enterprise Chef
•! Hosted Enterprise Chef server
•! Local Alternatives:
•! Chef-zero
•! Chef-solo
Chef-server
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
A Chef Org
top-level entity for role-based access
org
Chef-server
https (ldap) Auth
Web UI
ps (ldap) Authps (ldap) Auth
https://chef.corp.adobe.com/organizations
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
workstation
Git
ssh
A few private keys
to associate your new chef repo with your chef server user and org
~/workspace/github/connectcon-chef-repo on ! master!
$ ll .chef
total 24
connectcon-validator.pem
knife.rb
ledroff.pem
org
Chef-server Web UI
https(ldap)Auth
RSA Keys
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Bootstrap your nodes
knife
workstation Chef-server
RSAkeyAuth
node
org
RSA Keys
chef-clients
RSA Key
RSAkeyAuth
~/workspace/github/connectcon-chef-repo on ! master!
$ knife bootstrap <your-node-fqdn> --sudo -x <your-sudoer>
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Chef-server nodes
RSA key Auth
Search API attributes node objectrun-list chef-clients
Node Objects
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Start Coding:
Manage your Ruby dependencies
•! Use Bundler for RubyGem
~/workspace/github/connectcon-chef-repo on ! master!
$ cat Gemfile
source 'https://rubygems.org’
gem 'chef', '~> 11.10.0’
gem 'berkshelf', '~> 3.1.3‘
$ bundle install
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Start Coding:
Manage your Chef dependencies
•! A few aem cookbooks on github
•! https://github.com/francoisledroff/aem-cookbook
•! https://github.com/tacitknowledge/aem-cookbook
•! Use Berkshelf
$ cat Berksfile
source "https://api.berkshelf.com”
cookbook 'ntp', '~> 1.5.4'
cookbook 'chef-client', '~> 3.2.0’
cookbook 'artifact', git: 'https://github.com/francoisledroff/artifact-
cookbook.git', tag: '1.11.4’
cookbook 'aem', git: 'https://github.com/francoisledroff/aem-cookbook
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Upload your cookbooks
chef-client and ntp declared in your chef server org
knife
workstation org
Chef-DK
Chef-server
httpsRSAkeyAuth
RSA Keyscookbooks
~/workspace/github/connectcon-chef-repo on ! master!
$ berks install
$ berks upload
cookbooks
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Run-list
run_list
"recipe[chef-client::default]",
"recipe[chef-client::delete_validation]",
"recipe[ntp]",
"recipe[openssl::upgrade]"
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Role
Base
name ”base”
Description ”connecton base server role”
run_list "recipe[chef-client::default]",
"recipe[chef-client::delete_validation]",
"recipe[ntp]",
"recipe[openssl::upgrade]"
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Typical Roles
connectcon-chef-repo/roles/
name ”publish”
Description ”connecton aem publish server role”
run_list ”role[base]”,”recipe[aem::publish]”
Mongo Author
Publish
Dispatcher
HA/LB
name "lb_dispatcher"
description "connectcon roles for lb"
run_list ”role[base]”,”recipe[haproxy::app_lb]”
override_attributes('haproxy' =>
{'app_server_role' => ’dispatcher’})
Base
name ”base”
Description ”connecton base server role”
run_list "recipe[chef-client::default]",
"recipe[chef-client::delete_validation]",
"recipe[ntp]",
"recipe[openssl::upgrade]"
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Apply Run-List to Nodesattributes
https://chef.corp.adobe.com/organizations
~/workspace/github/connectcon-chef-repo on ! master!
$ knife node list
$ knife node edit one.node.fqdn
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Chef-client run
[root@ot1slu010 ~]# sudo chef-client
Starting Chef Client, version 11.12.8
resolving cookbooks for run list: ["chef-client::delete_validation", "ntp",
“aem::author", “aem::start”]
* remote_file[/apps/publish/aem-author-4502.jar] action create_if_missing (up to
date)
* file[/apps/publish/license.properties] action create (up to date)
* cookbook_file[/apps/author/serverctl] action create (up to date)
* execute[java] action run (skipped due to not_if)
* service[aem] action enable (up to date)
Recipe: aaem::start
* ruby_block[block_until_cq_operational] action nothing (skipped due to
action :nothing)
* log[ensure_cq_is_running] action write
Recipe: aaem::default
* service[aem] action start
- start service service[aem]
Recipe: aaem::start
* ruby_block[block_until_cq_operational] action create
- execute the ruby block block_until_cq_operational
Running handlers:
Running handlers complete
Chef Client finished, 2/27 resources updated in 9.770664 seconds
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
So we have an Author : Use Case 0
AuthorAuthor
{
"name": ”<author-connectcon-fqdn>",
"chef_environment": "dev”,
"run_list": [
"role[author]"
]
}
$ knife node edit author-connectcon-fqdn
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Let’s add a publish : Use Case 1
{
"name": ”<publish-connectcon-fqdn>",
"chef_environment": "dev”,
"run_list": [
"role[publish]"
]
}
$ knife node edit publish-connectcon-fqdn
Publish
Author
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
And there is magic: Chef search API
•! tacit-aem-cookbook/providers/replicator.rb
https://github.com/tacitknowledge/aem-cookbook
hosts = []
search(:node, %Q(role:"#{role}"
AND aem_cluster_name:"#{cluster_name}")) do |n|
log "Found host: #{n[:fqdn]}"
hosts << {
:ipaddress => n[:ipaddress],
…
:name => n[:fqdn]
}
end
…
hosts.each do |h|
…
end
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Replication configuration happens
#{role}:”publish”
#{cluster_name}:”dev”
Author
Publish
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Aem-Replicator API
aem_replicator "replicate_to_publish_servers" do
local_user node[:aem][:author][:admin_user]
local_password node[:aem][:author][:admin_password]
local_port node[:aem][:author][:port]
remote_hosts node[:aem][:author][:replication_hosts]
dynamic_cluster node[:aem][:author][:find_replication_hosts_dynamically]
cluster_name node[:aem][:cluster_name]
cluster_role node[:aem][:publish][:cluster_role]
type :publish
action :add
end
•! tacit-aem-cookbook/recipes/author.rb
https://github.com/tacitknowledge/aem-cookbook
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
What about Secret Management ?
aem_replicator "replicate_to_publish_servers" do
local_user node[:aem][:author][:admin_user]
local_password node[:aem][:author][:admin_password]
local_port node[:aem][:author][:port]
remote_hosts node[:aem][:author][:replication_hosts]
dynamic_cluster node[:aem][:author][:find_replication_hosts_dynamically]
cluster_name node[:aem][:cluster_name]
cluster_role node[:aem][:publish][:cluster_role]
type :publish
action :add
end
•! tacit-aem-cookbook/recipes/author.rb
https://github.com/tacitknowledge/aem-cookbook
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Git
UX/Dev/QA/Ops
dev
dev-stable prod
ps
Chef-server
https RSA private
key Auth
chef-client
chef-client
chef-client
chef-client
https RSA private key Auth •! Chef encrypted
data bags
•! Encrypted for
•! admin users
•! whitelisted nodes
•! Managed by chef-vault ruby gem
•! Git Back up
•! Encrypted obviously
Encrypted Data Bags with Chef-vault
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Chef-Vault in Action:
include_recipe 'chef-vault-util::default'
item = chef_vault_item(node['aem']['vault_accounts'], node['aem']
['vault_accounts_cq_admin_item'])
cq_admin_username = item[node['aem']['vault_accounts_username_property']]
cq_admin_password = item[node['aem']['vault_accounts_password_property']]
log 'the secret accounts credential was fetched from a chef-vault enabled
encrypted data_bag for username '+ cq_admin_username do
level :info
end
•! francois-aem-cookbook/recipes/secure.rb
https://github.com/francoisledroff/aem-cookbook
https://github.com/francoisledroff/chef-vault-util
$ knife vault update accounts prod_cq_admin -J accounts/prod_cq_admin.json
-A "ledroff," --mode client -S "role:aem_server environment:prod"
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Let’s add a Dispatcher : Use Case 2
Dispatcher
Author
Publish
DispatcherDispatcher
{
"name": ”<dispatcher-connectcon-fqdn>",
"chef_environment": "dev”,
"run_list": [
"role[dispatcher]"
]
}
$ knife node edit dispatcher-connectcon-fqdn
Another Search
Publish
Another Search
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Let’s Add a Load Balancer : Use Case 3
HA/LB
Dispatcher
{
"name": ”<lb-connectcon-fqdn>",
"chef_environment": "dev”,
"run_list": [
"role[lb_dispatcher]"
]
}
$ knife node edit lb-connectcon-fqdn
Author
Publish
Author
Publish Publish Publish
Dispatcher Dispatcher Dispatcher
Another Search
}
DispatcherDispatcher DispatcherDispatcher
Another Search
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
•! myapp-cookbook/recipes/log.rb
logrotate_app 'aem' do
cookbook 'logrotate'
path node['myapp']['log_dir']
frequency node['myapp']['logrotate']['frequency']
rotate node['myapp']['logrotate']['rotate']
end
include_recipe 'it-splunkforwarder::default’
•! myapp-cookbook/attributes/log.rb
default.splunkforwarder.inputs = [
{"input_path" =>
"#{node['aem']['log_dir']}/error.log",
… ]
default.splunkforwarder.inputs = [
{"input_path" =>
"#{node['aem']['log_dir']}/error.log",
… ]
Let’s add log monitoring: Use Case 4
myapp /recipes/log.rb
logrotate_app 'aem' do
cookbook 'logrotate'
path node['myapp']['log_dir']
frequency node['myapp']['logrotate']['frequency']
rotate node['myapp']['logrotate']['rotate']
end
include_recipe 'it-splunkforwarder::default’
Dispatcher
Author
Publish
Author
Publish Publish Publish
Dispatcher Dispatcher DispatcherDispatcherDispatcher DispatcherDispatcher DispatcherDispatcherDispatcherDispatcher
Publish
DispatcherDispatcherDispatcherDispatcherDispatcherDispatcher
Publish Publish
DispatcherDispatcher DispatcherDispatcher
Publish
DispatcherDispatcherDispatcherDispatcher
Add the above in
the base role
Add the above in
the base role
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Let’s cluster things!
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
AEM Production Infrastructure
LB/HA
Dispatcher
Publish
Author
MongoDB servers
Dispatcher
!" 3rd parties (your legacy,
your cloud)
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
you got it ?
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Search APIknife
workstation
env.
roles attributes
cookbooks
recipes
Git
org
Chef-DK
github
Nexus
opscode rubygem
data bags
attributes
env.
data bags
cookbooks recipes
Chef-server nodes
RSA key Auth
ssh
https
yymaven redhat
RSA Keys
node objectrun-list
rolesWeb UI
versions
RSA key Auth
chef-clients
RSA Key
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
#LearnChef
Learn Stuff
Automate IT infrastructure and application delivery
Learn Chef
Slide inspired by
Spice up your recipe
By Seth Vargo
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
What Stuff ?
•! Git Stuff
•! Ruby stuff
•! VM / Container stuff
•! Cloud stuff
•! Network stuff
•! *nix tools and stuff
•! OS Stuff
–! package management
–! services
•! Chef Community Stuff
•! Build and packaging stuff
•! Continuous Delivery stuff
•! Monitoring stuff
•! Analytics stuff
•! Messaging stuff
•! Security Stuff
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Why ?
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Devops?
“ You built it
You run it! ”
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Chef, Devops ? No silver bullet.
https://twitter.com/DEVOPS_BORAT/status/52857016670105600
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Chef, Devops ? No silver bullet.
https://twitter.com/mindweather/status/458653460234502144
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Why ?
“Accelerate, Simplify, Scale”
•! Breaking down the wall of confusion
•! As infra is code, it becomes:
–! Testable
–! Versionable
–! Disposable
–! Reproducible
•! “If it’s not in the source control system,
it does not exist” @bdelacretaz
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
https://www.flickr.com/photos/francoisledroff/6107220850/in/set-72157626126325552
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
https://www.flickr.com/photos/blmoregon/7883684692
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
AEM Production Infrastructure
LB/HA
Dispatcher
Publish
Author
MongoDB servers
Dispatcher
!" 3rd parties (your legacy,
your cloud)
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
One more publish?
LB/HA
Dispatcher
Publish
Author
!" MongoDB servers
Dispatcher
!" 3rd parties (cloud stuff)
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
This needs to be configured
LB/HA
Dispatcher
Publish
Author
MongoDB servers
Dispatcher
!" 3rd parties (cloud stuff)
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
A more complex production
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Next scale of complexity…
© 2014 Adobe Systems Incorporated.
All Rights Reserved.
Let’s Share the love
© 2014 Adobe Systems Incorporated.
All Rights Reserved.

Weitere ähnliche Inhalte

Was ist angesagt?

Adobe AEM Maintenance - Customer Care Office Hours
Adobe AEM Maintenance - Customer Care Office HoursAdobe AEM Maintenance - Customer Care Office Hours
Adobe AEM Maintenance - Customer Care Office HoursAndrew Khoury
 
CQ5.x Maintenance Webinar 2013
CQ5.x Maintenance Webinar 2013CQ5.x Maintenance Webinar 2013
CQ5.x Maintenance Webinar 2013Andrew Khoury
 
New Repository in AEM 6 by Michael Marth
New Repository in AEM 6 by Michael MarthNew Repository in AEM 6 by Michael Marth
New Repository in AEM 6 by Michael MarthAEM HUB
 
The new repository in AEM 6
The new repository in AEM 6The new repository in AEM 6
The new repository in AEM 6Jukka Zitting
 
Chef Fundamentals Training Series Module 2: Workstation Setup
Chef Fundamentals Training Series Module 2: Workstation SetupChef Fundamentals Training Series Module 2: Workstation Setup
Chef Fundamentals Training Series Module 2: Workstation SetupChef Software, Inc.
 
Chef Fundamentals Training Series Module 1: Overview of Chef
Chef Fundamentals Training Series Module 1: Overview of ChefChef Fundamentals Training Series Module 1: Overview of Chef
Chef Fundamentals Training Series Module 1: Overview of ChefChef Software, Inc.
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to ChefKnoldus Inc.
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Chef
 
Chef Fundamentals Training Series Module 3: Setting up Nodes and Cookbook Aut...
Chef Fundamentals Training Series Module 3: Setting up Nodes and Cookbook Aut...Chef Fundamentals Training Series Module 3: Setting up Nodes and Cookbook Aut...
Chef Fundamentals Training Series Module 3: Setting up Nodes and Cookbook Aut...Chef Software, Inc.
 
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...Chef Software, Inc.
 
Apache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDBApache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDBMongoDB
 
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Chef
 
Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Chef
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Chef
 
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...Chef Software, Inc.
 
Opscode Webinar: Managing Your VMware Infrastructure with Chef
Opscode Webinar: Managing Your VMware Infrastructure with ChefOpscode Webinar: Managing Your VMware Infrastructure with Chef
Opscode Webinar: Managing Your VMware Infrastructure with ChefChef Software, Inc.
 
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Chef
 
Scaling AEM (CQ5) Gem Session
Scaling AEM (CQ5) Gem SessionScaling AEM (CQ5) Gem Session
Scaling AEM (CQ5) Gem SessionMichael Marth
 

Was ist angesagt? (20)

Adobe AEM Maintenance - Customer Care Office Hours
Adobe AEM Maintenance - Customer Care Office HoursAdobe AEM Maintenance - Customer Care Office Hours
Adobe AEM Maintenance - Customer Care Office Hours
 
CQ5.x Maintenance Webinar 2013
CQ5.x Maintenance Webinar 2013CQ5.x Maintenance Webinar 2013
CQ5.x Maintenance Webinar 2013
 
New Repository in AEM 6 by Michael Marth
New Repository in AEM 6 by Michael MarthNew Repository in AEM 6 by Michael Marth
New Repository in AEM 6 by Michael Marth
 
Aem offline content
Aem offline contentAem offline content
Aem offline content
 
The new repository in AEM 6
The new repository in AEM 6The new repository in AEM 6
The new repository in AEM 6
 
Chef Fundamentals Training Series Module 2: Workstation Setup
Chef Fundamentals Training Series Module 2: Workstation SetupChef Fundamentals Training Series Module 2: Workstation Setup
Chef Fundamentals Training Series Module 2: Workstation Setup
 
Chef Fundamentals Training Series Module 1: Overview of Chef
Chef Fundamentals Training Series Module 1: Overview of ChefChef Fundamentals Training Series Module 1: Overview of Chef
Chef Fundamentals Training Series Module 1: Overview of Chef
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5
 
Chef Fundamentals Training Series Module 3: Setting up Nodes and Cookbook Aut...
Chef Fundamentals Training Series Module 3: Setting up Nodes and Cookbook Aut...Chef Fundamentals Training Series Module 3: Setting up Nodes and Cookbook Aut...
Chef Fundamentals Training Series Module 3: Setting up Nodes and Cookbook Aut...
 
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
 
Apache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDBApache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDB
 
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
 
Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
 
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
 
Opscode Webinar: Managing Your VMware Infrastructure with Chef
Opscode Webinar: Managing Your VMware Infrastructure with ChefOpscode Webinar: Managing Your VMware Infrastructure with Chef
Opscode Webinar: Managing Your VMware Infrastructure with Chef
 
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
 
Scaling AEM (CQ5) Gem Session
Scaling AEM (CQ5) Gem SessionScaling AEM (CQ5) Gem Session
Scaling AEM (CQ5) Gem Session
 
Aem maintenance
Aem maintenanceAem maintenance
Aem maintenance
 

Andere mochten auch

AEM Best Practices for Component Development
AEM Best Practices for Component DevelopmentAEM Best Practices for Component Development
AEM Best Practices for Component DevelopmentGabriel Walt
 
Enabing DevOps in an SDN World
Enabing DevOps in an SDN WorldEnabing DevOps in an SDN World
Enabing DevOps in an SDN WorldCisco DevNet
 
Agnostic Continuous Delivery
Agnostic Continuous DeliveryAgnostic Continuous Delivery
Agnostic Continuous DeliveryHervé Leclerc
 
Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)Tracy Kennedy
 
DevOps and Continuous Delivery Reference Architectures (including Nexus and o...
DevOps and Continuous Delivery Reference Architectures (including Nexus and o...DevOps and Continuous Delivery Reference Architectures (including Nexus and o...
DevOps and Continuous Delivery Reference Architectures (including Nexus and o...Sonatype
 
DevOps & Security from an Enterprise Toolsmith's Perspective
DevOps & Security from an Enterprise Toolsmith's PerspectiveDevOps & Security from an Enterprise Toolsmith's Perspective
DevOps & Security from an Enterprise Toolsmith's Perspectivedev2ops
 
Rundeck + Nexus (from Nexus Live on June 5, 2014)
Rundeck + Nexus (from Nexus Live on June 5, 2014)Rundeck + Nexus (from Nexus Live on June 5, 2014)
Rundeck + Nexus (from Nexus Live on June 5, 2014)dev2ops
 
Journée DevOps : De l'intégration continue au déploiement continu avec Jenkins
Journée DevOps : De l'intégration continue au déploiement continu avec JenkinsJournée DevOps : De l'intégration continue au déploiement continu avec Jenkins
Journée DevOps : De l'intégration continue au déploiement continu avec JenkinsPublicis Sapient Engineering
 
Aem authentication vs idp
Aem authentication vs idpAem authentication vs idp
Aem authentication vs idpSaroj Mishra
 
CIRCUIT 2015 - Hybrid App Development with AEM Apps
CIRCUIT 2015 - Hybrid App Development with AEM AppsCIRCUIT 2015 - Hybrid App Development with AEM Apps
CIRCUIT 2015 - Hybrid App Development with AEM AppsICF CIRCUIT
 
User Interface customization for AEM 6
User Interface customization for AEM 6User Interface customization for AEM 6
User Interface customization for AEM 6Damien Antipa
 
AEM (CQ) eCommerce Framework
AEM (CQ) eCommerce FrameworkAEM (CQ) eCommerce Framework
AEM (CQ) eCommerce FrameworkPaolo Mottadelli
 
Microservices Architecture for AEM
Microservices Architecture for AEMMicroservices Architecture for AEM
Microservices Architecture for AEMMaciej Majchrzak
 
AppSphere 15 - DevOps and Agile: AppDynamics in Continuous Integration Enviro...
AppSphere 15 - DevOps and Agile: AppDynamics in Continuous Integration Enviro...AppSphere 15 - DevOps and Agile: AppDynamics in Continuous Integration Enviro...
AppSphere 15 - DevOps and Agile: AppDynamics in Continuous Integration Enviro...AppDynamics
 

Andere mochten auch (20)

Journey into dev ops
Journey into dev opsJourney into dev ops
Journey into dev ops
 
AEM Best Practices for Component Development
AEM Best Practices for Component DevelopmentAEM Best Practices for Component Development
AEM Best Practices for Component Development
 
Enabing DevOps in an SDN World
Enabing DevOps in an SDN WorldEnabing DevOps in an SDN World
Enabing DevOps in an SDN World
 
Agnostic Continuous Delivery
Agnostic Continuous DeliveryAgnostic Continuous Delivery
Agnostic Continuous Delivery
 
Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)
 
DevOps and Continuous Delivery Reference Architectures (including Nexus and o...
DevOps and Continuous Delivery Reference Architectures (including Nexus and o...DevOps and Continuous Delivery Reference Architectures (including Nexus and o...
DevOps and Continuous Delivery Reference Architectures (including Nexus and o...
 
(Re)discover your AEM
(Re)discover your AEM(Re)discover your AEM
(Re)discover your AEM
 
DevOps & Security from an Enterprise Toolsmith's Perspective
DevOps & Security from an Enterprise Toolsmith's PerspectiveDevOps & Security from an Enterprise Toolsmith's Perspective
DevOps & Security from an Enterprise Toolsmith's Perspective
 
Rundeck + Nexus (from Nexus Live on June 5, 2014)
Rundeck + Nexus (from Nexus Live on June 5, 2014)Rundeck + Nexus (from Nexus Live on June 5, 2014)
Rundeck + Nexus (from Nexus Live on June 5, 2014)
 
Journée DevOps : De l'intégration continue au déploiement continu avec Jenkins
Journée DevOps : De l'intégration continue au déploiement continu avec JenkinsJournée DevOps : De l'intégration continue au déploiement continu avec Jenkins
Journée DevOps : De l'intégration continue au déploiement continu avec Jenkins
 
Aem authentication vs idp
Aem authentication vs idpAem authentication vs idp
Aem authentication vs idp
 
AEM - Client Libraries
AEM - Client LibrariesAEM - Client Libraries
AEM - Client Libraries
 
REST in AEM
REST in AEMREST in AEM
REST in AEM
 
CIRCUIT 2015 - Hybrid App Development with AEM Apps
CIRCUIT 2015 - Hybrid App Development with AEM AppsCIRCUIT 2015 - Hybrid App Development with AEM Apps
CIRCUIT 2015 - Hybrid App Development with AEM Apps
 
User Interface customization for AEM 6
User Interface customization for AEM 6User Interface customization for AEM 6
User Interface customization for AEM 6
 
AEM (CQ) eCommerce Framework
AEM (CQ) eCommerce FrameworkAEM (CQ) eCommerce Framework
AEM (CQ) eCommerce Framework
 
Microservices Architecture for AEM
Microservices Architecture for AEMMicroservices Architecture for AEM
Microservices Architecture for AEM
 
Chef: Smart infrastructure automation
Chef: Smart infrastructure automationChef: Smart infrastructure automation
Chef: Smart infrastructure automation
 
Techzone 2014 presentation rundeck
Techzone 2014 presentation rundeckTechzone 2014 presentation rundeck
Techzone 2014 presentation rundeck
 
AppSphere 15 - DevOps and Agile: AppDynamics in Continuous Integration Enviro...
AppSphere 15 - DevOps and Agile: AppDynamics in Continuous Integration Enviro...AppSphere 15 - DevOps and Agile: AppDynamics in Continuous Integration Enviro...
AppSphere 15 - DevOps and Agile: AppDynamics in Continuous Integration Enviro...
 

Ähnlich wie Master Chef class: learn how to quickly cook delightful CQ/AEM infrastructures

SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsPablo Godel
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony AppsPablo Godel
 
SELF 2011: Deploying Django Application Stacks with Chef
SELF 2011: Deploying Django Application Stacks with ChefSELF 2011: Deploying Django Application Stacks with Chef
SELF 2011: Deploying Django Application Stacks with ChefChef Software, Inc.
 
The Modern Developer Toolbox
The Modern Developer ToolboxThe Modern Developer Toolbox
The Modern Developer ToolboxPablo Godel
 
EC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerEC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerGeorge Miranda
 
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012Patrick McDonnell
 
Chef, Devops, and You
Chef, Devops, and YouChef, Devops, and You
Chef, Devops, and YouBryan Berry
 
Configuration Management with Puppet
Configuration Management with Puppet Configuration Management with Puppet
Configuration Management with Puppet Rachel Andrew
 
Testing your-automation-code (vagrant version) v0.2
Testing your-automation-code (vagrant version) v0.2Testing your-automation-code (vagrant version) v0.2
Testing your-automation-code (vagrant version) v0.2Sylvain Tissot
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
ConFoo 2016: Development to Deployment
ConFoo 2016: Development to DeploymentConFoo 2016: Development to Deployment
ConFoo 2016: Development to DeploymentRachel Andrew
 
Introduction to Chef - April 22 2015
Introduction to Chef - April 22 2015Introduction to Chef - April 22 2015
Introduction to Chef - April 22 2015Jennifer Davis
 
Using Buildout to Develop and Deploy Python Projects
Using Buildout to Develop and Deploy Python ProjectsUsing Buildout to Develop and Deploy Python Projects
Using Buildout to Develop and Deploy Python ProjectsClayton Parker
 
habitat at docker bud
habitat at docker budhabitat at docker bud
habitat at docker budMandi Walls
 
Chaione Ember.js Training
Chaione Ember.js TrainingChaione Ember.js Training
Chaione Ember.js Trainingaortbals
 
Using Nagios with Chef
Using Nagios with ChefUsing Nagios with Chef
Using Nagios with ChefBryan McLellan
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.catPablo Godel
 

Ähnlich wie Master Chef class: learn how to quickly cook delightful CQ/AEM infrastructures (20)

The Environment Restaurant
The Environment RestaurantThe Environment Restaurant
The Environment Restaurant
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
 
SELF 2011: Deploying Django Application Stacks with Chef
SELF 2011: Deploying Django Application Stacks with ChefSELF 2011: Deploying Django Application Stacks with Chef
SELF 2011: Deploying Django Application Stacks with Chef
 
The Modern Developer Toolbox
The Modern Developer ToolboxThe Modern Developer Toolbox
The Modern Developer Toolbox
 
EC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerEC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and Packer
 
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
 
Chef, Devops, and You
Chef, Devops, and YouChef, Devops, and You
Chef, Devops, and You
 
Configuration Management with Puppet
Configuration Management with Puppet Configuration Management with Puppet
Configuration Management with Puppet
 
Testing your-automation-code (vagrant version) v0.2
Testing your-automation-code (vagrant version) v0.2Testing your-automation-code (vagrant version) v0.2
Testing your-automation-code (vagrant version) v0.2
 
IT Automation with Chef
IT Automation with ChefIT Automation with Chef
IT Automation with Chef
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
ConFoo 2016: Development to Deployment
ConFoo 2016: Development to DeploymentConFoo 2016: Development to Deployment
ConFoo 2016: Development to Deployment
 
Introduction to Chef - April 22 2015
Introduction to Chef - April 22 2015Introduction to Chef - April 22 2015
Introduction to Chef - April 22 2015
 
Using Buildout to Develop and Deploy Python Projects
Using Buildout to Develop and Deploy Python ProjectsUsing Buildout to Develop and Deploy Python Projects
Using Buildout to Develop and Deploy Python Projects
 
habitat at docker bud
habitat at docker budhabitat at docker bud
habitat at docker bud
 
Chaione Ember.js Training
Chaione Ember.js TrainingChaione Ember.js Training
Chaione Ember.js Training
 
Using Nagios with Chef
Using Nagios with ChefUsing Nagios with Chef
Using Nagios with Chef
 
Full-Stack CakePHP Deployment
Full-Stack CakePHP DeploymentFull-Stack CakePHP Deployment
Full-Stack CakePHP Deployment
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 

Mehr von François Le Droff

Implémentez une intégration avec AEM presque sans code
Implémentez une intégration avec AEM presque sans codeImplémentez une intégration avec AEM presque sans code
Implémentez une intégration avec AEM presque sans codeFrançois Le Droff
 
Master chef and puppet show - Devoxx France 2014
Master chef and puppet show - Devoxx France 2014Master chef and puppet show - Devoxx France 2014
Master chef and puppet show - Devoxx France 2014François Le Droff
 
Soirée Flex/RIA au Nantes jug
Soirée Flex/RIA au Nantes jugSoirée Flex/RIA au Nantes jug
Soirée Flex/RIA au Nantes jugFrançois Le Droff
 
Flex and LiveCycle Data Services Best Practices from the Trenches (Adobe MAX ...
Flex and LiveCycle Data Services Best Practices from the Trenches (Adobe MAX ...Flex and LiveCycle Data Services Best Practices from the Trenches (Adobe MAX ...
Flex and LiveCycle Data Services Best Practices from the Trenches (Adobe MAX ...François Le Droff
 
Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open source
Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open sourceSoirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open source
Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open sourceFrançois Le Droff
 
Quality Best Practices & Toolkit for Enterprise Flex
Quality Best Practices & Toolkit for Enterprise FlexQuality Best Practices & Toolkit for Enterprise Flex
Quality Best Practices & Toolkit for Enterprise FlexFrançois Le Droff
 
Flex Services And Spring with Spring-Flex ParisJug
Flex Services And Spring with Spring-Flex ParisJugFlex Services And Spring with Spring-Flex ParisJug
Flex Services And Spring with Spring-Flex ParisJugFrançois Le Droff
 
The Spring of Adobe Flex Remoting
The Spring of Adobe Flex RemotingThe Spring of Adobe Flex Remoting
The Spring of Adobe Flex RemotingFrançois Le Droff
 
Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)François Le Droff
 
Flex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog CcFlex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog CcFrançois Le Droff
 

Mehr von François Le Droff (13)

Implémentez une intégration avec AEM presque sans code
Implémentez une intégration avec AEM presque sans codeImplémentez une intégration avec AEM presque sans code
Implémentez une intégration avec AEM presque sans code
 
Master chef and puppet show - Devoxx France 2014
Master chef and puppet show - Devoxx France 2014Master chef and puppet show - Devoxx France 2014
Master chef and puppet show - Devoxx France 2014
 
Soirée Flex/RIA au Nantes jug
Soirée Flex/RIA au Nantes jugSoirée Flex/RIA au Nantes jug
Soirée Flex/RIA au Nantes jug
 
Flex and LiveCycle Data Services Best Practices from the Trenches (Adobe MAX ...
Flex and LiveCycle Data Services Best Practices from the Trenches (Adobe MAX ...Flex and LiveCycle Data Services Best Practices from the Trenches (Adobe MAX ...
Flex and LiveCycle Data Services Best Practices from the Trenches (Adobe MAX ...
 
Flex & Java @ TourJUG
Flex & Java @ TourJUGFlex & Java @ TourJUG
Flex & Java @ TourJUG
 
Flex & Java @ NormandieJUG
Flex & Java @ NormandieJUGFlex & Java @ NormandieJUG
Flex & Java @ NormandieJUG
 
Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open source
Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open sourceSoirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open source
Soirée Qualite Logicielle Paris JUG : Tour d'horizon des outils open source
 
Quality Best Practices & Toolkit for Enterprise Flex
Quality Best Practices & Toolkit for Enterprise FlexQuality Best Practices & Toolkit for Enterprise Flex
Quality Best Practices & Toolkit for Enterprise Flex
 
Flash Catalyst Jug
Flash Catalyst JugFlash Catalyst Jug
Flash Catalyst Jug
 
Flex Services And Spring with Spring-Flex ParisJug
Flex Services And Spring with Spring-Flex ParisJugFlex Services And Spring with Spring-Flex ParisJug
Flex Services And Spring with Spring-Flex ParisJug
 
The Spring of Adobe Flex Remoting
The Spring of Adobe Flex RemotingThe Spring of Adobe Flex Remoting
The Spring of Adobe Flex Remoting
 
Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)
 
Flex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog CcFlex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog Cc
 

Kürzlich hochgeladen

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburgmasabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...masabamasaba
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durbanmasabamasaba
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 

Kürzlich hochgeladen (20)

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 

Master Chef class: learn how to quickly cook delightful CQ/AEM infrastructures

  • 1. © 2014 Adobe Systems Incorporated. All Rights Reserved. Master Chef class https://github.com/francoisledroff/connectcon-chef-repo http://www.slideshare.net/francoisledroff/master-chef-class-learn-how-to-quickly-cook-delightful-cqaem-infrastructures Francois Le Droff – Nicolas Peltier Let’s cook delightful AEM infrastructures /master-chef-class-learn-how-to-quickly-cook-delightful-cqaem-infrastructures
  • 2. © 2014 Adobe Systems Incorporated. All Rights Reserved. @francoisledroff
  • 3. © 2014 Adobe Systems Incorporated. All Rights Reserved. @npeltier
  • 4. © 2014 Adobe Systems Incorporated. All Rights Reserved. Agenda •!What •!How •!Why
  • 5. © 2014 Adobe Systems Incorporated. All Rights Reserved. What ?
  • 6. © 2014 Adobe Systems Incorporated. All Rights Reserved. “ An automation platform that transforms infrastructure into code ”
  • 7. © 2014 Adobe Systems Incorporated. All Rights Reserved. Infrastructure ? noun ˈin-frə-ˌstrək-chər [1] A Collection of –!Resources: •! Network nodes •! File systems, files, folders, symbolic links, disk mounts •! Users, groups •! Packages, software •! Configurations –!Acting in concert –!To offer a service –! [1] Introduction to Chef
  • 8. © 2014 Adobe Systems Incorporated. All Rights Reserved. Infrastructure as Code? •! Does not only replace your shell scripts •! Does allow: –! to build your infra from a set of bare metal servers (called Nodes) Even on heterogeneous OS and Architecture –! to abstract the convergence of your infrastructure (your Nodes) through code –! to make this (Nodes) convergence idempotent State A --> State B (ex: install) Chef Client finished, 147/153 resources updated State B --> State B (ex: check) Chef Client finished, 0/153 resources updated State C --> State B (ex: back to normal) Chef Client finished, 48/153 resources updated
  • 9. © 2014 Adobe Systems Incorporated. All Rights Reserved. •! Created in 2009, Edited by Opscode/Chef •! Apache License •! On-top-of/in Ruby •! Very active community •! http://community.opscode.com •! #learnChef •! https://learnchef.opscode.com/ Chef ? p://community.opscode.com
  • 10. © 2014 Adobe Systems Incorporated. All Rights Reserved. What does Chef code look like ? •! Recipes •! Attributes •! Resources •! Cookbooks
  • 11. © 2014 Adobe Systems Incorporated. All Rights Reserved. Recipes Fundamental configuration element •! Authored in Ruby •! Queries , defines attributes •! Manipulates Resources •! Manipulates LW Resources •! Leverages Libraries & Templates •! Stored in Cookbooks –! Default Attributes –! Recipes –! LW Resource Providers –! Libraries –! Templates recipes cookbooks
  • 12. © 2014 Adobe Systems Incorporated. All Rights Reserved. •! aem-cookbook/recipes/default.rb case node['platform_family'] when 'rhel' log 'this platform family is supported' do level :info end else log 'this platform family is not supported' do level :warn end end •! aem-cookbook/attributes/node.rb default['aem']['mode'] = 'publish' default['aem']['port'] = '4503' default['aem']['url'] = 'http://localhost:'+ node['aem'] ['port'] default['aem']['mode'] = 'publish' default['aem']['port'] = '4503' default['aem']['url'] = 'http://localhost:'+ node['aemaem'] ['port'] aem-cookbook/recipes/default.rb case node['platform_family'] when 'rhel' log 'this platform family is supported' do level :info end else log 'this platform family is not supported' do level :warn end end Attributes attributes
  • 13. © 2014 Adobe Systems Incorporated. All Rights Reserved. Recipes : Resources & LW Resources •! aem-cookbook/recipes/default.rb remote_file node['aem']['quickstart_jar'] do source node['aem']['repo_url'] owner node['aem']['user'] group node['aem']['group'] checksum '3043859473' action :create_if_missing notifies :restart, 'service[aem]', :delayed end or artifact_file node['aem']['quickstart_jar'] do location 'com.day.cq:cq5:jar:5.5.0.20120220' nexus_configuration nexus_configuration_object owner node['aem']['user'] group node['aem']['group'] notifies :restart, 'service[aem]', :delayed end artifact_file node['aem']['quickstart_jar'] do location 'com.day.cq:cq5:jar:5.5.0.20120220' nexus_configuration nexus_configuration_object owner node['aem']['user'] group node['aem']['group'] notifies :restart, 'service[aem]', :delayed end remote_file node['aem']['quickstart_jar'] do source node['aem']['repo_url'] owner node['aem']['user'] group node['aem']['group'] checksum '3043859473' action :create_if_missing notifies :restart, 'service[aem]', :delayed end recipes
  • 14. © 2014 Adobe Systems Incorporated. All Rights Reserved. Recipes : AEM LW Resources •! tacit-aem-cookbook/recipes/author.rb node[:aem][:author][:deploy_pkgs].each do |pkg| aem_package pkg[:name] do version pkg[:version] aem_instance ‘author’ package_url pkg[:url] update pkg[:update] user node[:aem][:author][:admin_user] password node[:aem][:author][:admin_password] port node[:aem][:author][:port] group_id pkg[:group_id] recursive pkg[:recursive] properties_file pkg[:properties_file] version_pattern pkg[:version_pattern] action pkg[:action] end end node[:aem][:author][:deploy_pkgs].each do |pkg| aem_package pkg[:name] do version pkg[:version] aem_instance ‘author’ package_url pkg[:url] update pkg[:update] user node[:aem][:author][:admin_user] password node[:aem][:author][:admin_password] port node[:aem][:author][:port] group_id pkg[:group_id] recursive pkg[:recursive] properties_file pkg[:properties_file] version_pattern pkg[:version_pattern] action pkg[:action] end end recipes
  • 15. © 2014 Adobe Systems Incorporated. All Rights Reserved. –! aem-cookbook/recipes/start.rb ruby_block 'block_until_cq_operational' do block do Chef::Log.info 'Waiting until CQ is listening on port '+node['aem']['port'] until CQHelper.service_listening?(node['aem']['port']) sleep 1 Chef::Log.info('.') end Chef::Log.info 'Waiting until the CQ default page is responding' test_url = URI.parse(node['aem']['url']) until CQHelper.endpoint_responding?(test_url) sleep 1 Chef::Log.info('.') end end action :nothing end Recipes: Libraries recipes © 2014 Adobe Systems Incorporated.© 2014 Adobe Systems Incorporated. ruby_block 'block_until_cq_operational' do block do Chef::Log.info 'Waiting until CQ is listening on port '+node['aem']['port'] until CQHelper.service_listening?(node['aem']['port']) sleep 1 Chef::Log.info('.') end Chef::Log.info 'Waiting until the CQ default page is responding' test_url = URI.parse(node['aem']['url']) until CQHelper.endpoint_responding?(test_url) sleep 1 Chef::Log.info('.') end end action :nothing end
  • 16. © 2014 Adobe Systems Incorporated. All Rights Reserved. Cookbook patterns [1] •! Library cookbooks: –! https://github.com/RiotGames/artifact-cookbook –! https://github.com/francoisledroff/chef-vault-util •! Application cookbooks –! https://github.com/tacitknowledge/aem-cookbook –! https://github.com/francoisledroff/aem-cookbook –! https://github.com/onehealth-cookbooks/apache2 –! https://github.com/socrata-cookbooks/java –! https://github.com/hw-cookbooks/haproxy –! https://github.com/stevendanna/logrotate –! https://github.com/opscode-cookbooks/chef-splunk •! Organization specific –! Wrapper cookbooks –! Base cookbooks –! Environment cookbooks [1] http://blog.vialstudios.com/the-environment-cookbook-pattern/ Library cookbooks: ps://github.com/RiotGames/artifact-cookbook ps://github.com/francoisledro cookbooks
  • 17. © 2014 Adobe Systems Incorporated. All Rights Reserved. I got it
  • 18. © 2014 Adobe Systems Incorporated. All Rights Reserved. Wait a quick overview
  • 19. © 2014 Adobe Systems Incorporated. All Rights Reserved. Chef-server nodes
  • 20. © 2014 Adobe Systems Incorporated. All Rights Reserved. workstation Git Chef-server nodes ssh env. roles attributes recipes cookbooks
  • 21. © 2014 Adobe Systems Incorporated. All Rights Reserved. workstation Git Chef-server nodes RSA key Auth ssh knife env. roles attributes recipes Chef-DK data bags cookbooks RSA Keys
  • 22. © 2014 Adobe Systems Incorporated. All Rights Reserved. workstation Git Chef-server nodes RSA key Auth ssh knife env. roles attributes recipes Chef-DK data bags cookbooks RSA Keys Search API cookbooksorg data bags attributes env. recipes node objectrun-list rolesWeb UI versions
  • 23. © 2014 Adobe Systems Incorporated. All Rights Reserved. workstation Git Chef-server nodes RSA key Auth ssh RSA key Auth knife env. roles attributes recipes Chef-DK data bags cookbooks RSA Keys Search API cookbooksorg data bags attributes env. recipes node objectrun-list rolesWeb UI versions chef-clients RSA Key
  • 24. © 2014 Adobe Systems Incorporated. All Rights Reserved. Search APIknife workstation env. roles attributes cookbooks recipes Git org Chef-DK github Nexus opscode rubygem data bags attributes env. data bags cookbooks recipes Chef-server nodes RSA key Auth ssh https yymaven redhat RSA Keys node objectrun-list rolesWeb UI versions RSA key Auth chef-clients RSA Key
  • 25. © 2014 Adobe Systems Incorporated. All Rights Reserved. How ?
  • 26. © 2014 Adobe Systems Incorporated. All Rights Reserved. Use case 0 : one AEM Author author
  • 27. © 2014 Adobe Systems Incorporated. All Rights Reserved. Use case 0 : Chef Automation –! Install the jdk –! Download the jar –! Install it as a service –! A few aem cookbooks on github •! https://github.com/francoisledroff/aem-cookbook •! https://github.com/tacitknowledge/aem-cookbook •! https://github.com/manosriglis/chef-aem •! https://github.com/QVCItalia/chef-aem
  • 28. © 2014 Adobe Systems Incorporated. All Rights Reserved. OSS from opscode and elsewhere Chef, Ruby, rvm, bundler knife workstation Chef-DK opscode $ curl –L https://www.opscode.com/chef/install.sh | sudo bash $ curl -sSL https://get.rvm.io | bash -s stable –- ruby=1.9.3 $ gem install bundler http://www.getchef.com/downloads/chef-dk
  • 29. © 2014 Adobe Systems Incorporated. All Rights Reserved. workstation Git ssh A Chef repo in Git Every Chef automated infra needs a Chef Repository github $ git clone https://github.com/opscode/chef-repo.git Made available for you at https://github.com/francoisledroff/connectcon-chef-repo
  • 30. © 2014 Adobe Systems Incorporated. All Rights Reserved. node Get Few Machines/Nodes to deploy your code/infra to workstation ssh ~/workspace/github/connectcon-chef-repo on ! master! $ vagrant plugin install vagrant-berkshelf --plugin-version 2.0.1 $ cat Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "CentOS-6.4-x86_64" config.vm.hostname = "connectcon-francois" config.vm.box_url = "http://developer.nrel.gov/downloads/vagrant-boxes/ CentOS-6.4-x86_64-v20130427.box" config.berkshelf.enabled = true End $ vagrant up $ vagrant ssh Welcome to your Vagrant-built virtual machine. [vagrant@connectcon-francois ~]$
  • 31. © 2014 Adobe Systems Incorporated. All Rights Reserved. A Chef Server comes in 3 flavors •! On premise OS Chef Server •! On premise Enterprise Chef •! Hosted Enterprise Chef server •! Local Alternatives: •! Chef-zero •! Chef-solo Chef-server
  • 32. © 2014 Adobe Systems Incorporated. All Rights Reserved. A Chef Org top-level entity for role-based access org Chef-server https (ldap) Auth Web UI ps (ldap) Authps (ldap) Auth https://chef.corp.adobe.com/organizations
  • 33. © 2014 Adobe Systems Incorporated. All Rights Reserved. workstation Git ssh A few private keys to associate your new chef repo with your chef server user and org ~/workspace/github/connectcon-chef-repo on ! master! $ ll .chef total 24 connectcon-validator.pem knife.rb ledroff.pem org Chef-server Web UI https(ldap)Auth RSA Keys
  • 34. © 2014 Adobe Systems Incorporated. All Rights Reserved. Bootstrap your nodes knife workstation Chef-server RSAkeyAuth node org RSA Keys chef-clients RSA Key RSAkeyAuth ~/workspace/github/connectcon-chef-repo on ! master! $ knife bootstrap <your-node-fqdn> --sudo -x <your-sudoer>
  • 35. © 2014 Adobe Systems Incorporated. All Rights Reserved. Chef-server nodes RSA key Auth Search API attributes node objectrun-list chef-clients Node Objects
  • 36. © 2014 Adobe Systems Incorporated. All Rights Reserved. Start Coding: Manage your Ruby dependencies •! Use Bundler for RubyGem ~/workspace/github/connectcon-chef-repo on ! master! $ cat Gemfile source 'https://rubygems.org’ gem 'chef', '~> 11.10.0’ gem 'berkshelf', '~> 3.1.3‘ $ bundle install
  • 37. © 2014 Adobe Systems Incorporated. All Rights Reserved. Start Coding: Manage your Chef dependencies •! A few aem cookbooks on github •! https://github.com/francoisledroff/aem-cookbook •! https://github.com/tacitknowledge/aem-cookbook •! Use Berkshelf $ cat Berksfile source "https://api.berkshelf.com” cookbook 'ntp', '~> 1.5.4' cookbook 'chef-client', '~> 3.2.0’ cookbook 'artifact', git: 'https://github.com/francoisledroff/artifact- cookbook.git', tag: '1.11.4’ cookbook 'aem', git: 'https://github.com/francoisledroff/aem-cookbook
  • 38. © 2014 Adobe Systems Incorporated. All Rights Reserved. Upload your cookbooks chef-client and ntp declared in your chef server org knife workstation org Chef-DK Chef-server httpsRSAkeyAuth RSA Keyscookbooks ~/workspace/github/connectcon-chef-repo on ! master! $ berks install $ berks upload cookbooks
  • 39. © 2014 Adobe Systems Incorporated. All Rights Reserved. Run-list run_list "recipe[chef-client::default]", "recipe[chef-client::delete_validation]", "recipe[ntp]", "recipe[openssl::upgrade]"
  • 40. © 2014 Adobe Systems Incorporated. All Rights Reserved. Role Base name ”base” Description ”connecton base server role” run_list "recipe[chef-client::default]", "recipe[chef-client::delete_validation]", "recipe[ntp]", "recipe[openssl::upgrade]"
  • 41. © 2014 Adobe Systems Incorporated. All Rights Reserved. Typical Roles connectcon-chef-repo/roles/ name ”publish” Description ”connecton aem publish server role” run_list ”role[base]”,”recipe[aem::publish]” Mongo Author Publish Dispatcher HA/LB name "lb_dispatcher" description "connectcon roles for lb" run_list ”role[base]”,”recipe[haproxy::app_lb]” override_attributes('haproxy' => {'app_server_role' => ’dispatcher’}) Base name ”base” Description ”connecton base server role” run_list "recipe[chef-client::default]", "recipe[chef-client::delete_validation]", "recipe[ntp]", "recipe[openssl::upgrade]"
  • 42. © 2014 Adobe Systems Incorporated. All Rights Reserved. Apply Run-List to Nodesattributes https://chef.corp.adobe.com/organizations ~/workspace/github/connectcon-chef-repo on ! master! $ knife node list $ knife node edit one.node.fqdn
  • 43. © 2014 Adobe Systems Incorporated. All Rights Reserved. Chef-client run [root@ot1slu010 ~]# sudo chef-client Starting Chef Client, version 11.12.8 resolving cookbooks for run list: ["chef-client::delete_validation", "ntp", “aem::author", “aem::start”] * remote_file[/apps/publish/aem-author-4502.jar] action create_if_missing (up to date) * file[/apps/publish/license.properties] action create (up to date) * cookbook_file[/apps/author/serverctl] action create (up to date) * execute[java] action run (skipped due to not_if) * service[aem] action enable (up to date) Recipe: aaem::start * ruby_block[block_until_cq_operational] action nothing (skipped due to action :nothing) * log[ensure_cq_is_running] action write Recipe: aaem::default * service[aem] action start - start service service[aem] Recipe: aaem::start * ruby_block[block_until_cq_operational] action create - execute the ruby block block_until_cq_operational Running handlers: Running handlers complete Chef Client finished, 2/27 resources updated in 9.770664 seconds
  • 44. © 2014 Adobe Systems Incorporated. All Rights Reserved. So we have an Author : Use Case 0 AuthorAuthor { "name": ”<author-connectcon-fqdn>", "chef_environment": "dev”, "run_list": [ "role[author]" ] } $ knife node edit author-connectcon-fqdn
  • 45. © 2014 Adobe Systems Incorporated. All Rights Reserved. Let’s add a publish : Use Case 1 { "name": ”<publish-connectcon-fqdn>", "chef_environment": "dev”, "run_list": [ "role[publish]" ] } $ knife node edit publish-connectcon-fqdn Publish Author
  • 46. © 2014 Adobe Systems Incorporated. All Rights Reserved. And there is magic: Chef search API •! tacit-aem-cookbook/providers/replicator.rb https://github.com/tacitknowledge/aem-cookbook hosts = [] search(:node, %Q(role:"#{role}" AND aem_cluster_name:"#{cluster_name}")) do |n| log "Found host: #{n[:fqdn]}" hosts << { :ipaddress => n[:ipaddress], … :name => n[:fqdn] } end … hosts.each do |h| … end
  • 47. © 2014 Adobe Systems Incorporated. All Rights Reserved. Replication configuration happens #{role}:”publish” #{cluster_name}:”dev” Author Publish
  • 48. © 2014 Adobe Systems Incorporated. All Rights Reserved. Aem-Replicator API aem_replicator "replicate_to_publish_servers" do local_user node[:aem][:author][:admin_user] local_password node[:aem][:author][:admin_password] local_port node[:aem][:author][:port] remote_hosts node[:aem][:author][:replication_hosts] dynamic_cluster node[:aem][:author][:find_replication_hosts_dynamically] cluster_name node[:aem][:cluster_name] cluster_role node[:aem][:publish][:cluster_role] type :publish action :add end •! tacit-aem-cookbook/recipes/author.rb https://github.com/tacitknowledge/aem-cookbook
  • 49. © 2014 Adobe Systems Incorporated. All Rights Reserved. What about Secret Management ? aem_replicator "replicate_to_publish_servers" do local_user node[:aem][:author][:admin_user] local_password node[:aem][:author][:admin_password] local_port node[:aem][:author][:port] remote_hosts node[:aem][:author][:replication_hosts] dynamic_cluster node[:aem][:author][:find_replication_hosts_dynamically] cluster_name node[:aem][:cluster_name] cluster_role node[:aem][:publish][:cluster_role] type :publish action :add end •! tacit-aem-cookbook/recipes/author.rb https://github.com/tacitknowledge/aem-cookbook
  • 50. © 2014 Adobe Systems Incorporated. All Rights Reserved. Git UX/Dev/QA/Ops dev dev-stable prod ps Chef-server https RSA private key Auth chef-client chef-client chef-client chef-client https RSA private key Auth •! Chef encrypted data bags •! Encrypted for •! admin users •! whitelisted nodes •! Managed by chef-vault ruby gem •! Git Back up •! Encrypted obviously Encrypted Data Bags with Chef-vault
  • 51. © 2014 Adobe Systems Incorporated. All Rights Reserved. Chef-Vault in Action: include_recipe 'chef-vault-util::default' item = chef_vault_item(node['aem']['vault_accounts'], node['aem'] ['vault_accounts_cq_admin_item']) cq_admin_username = item[node['aem']['vault_accounts_username_property']] cq_admin_password = item[node['aem']['vault_accounts_password_property']] log 'the secret accounts credential was fetched from a chef-vault enabled encrypted data_bag for username '+ cq_admin_username do level :info end •! francois-aem-cookbook/recipes/secure.rb https://github.com/francoisledroff/aem-cookbook https://github.com/francoisledroff/chef-vault-util $ knife vault update accounts prod_cq_admin -J accounts/prod_cq_admin.json -A "ledroff," --mode client -S "role:aem_server environment:prod"
  • 52. © 2014 Adobe Systems Incorporated. All Rights Reserved. Let’s add a Dispatcher : Use Case 2 Dispatcher Author Publish DispatcherDispatcher { "name": ”<dispatcher-connectcon-fqdn>", "chef_environment": "dev”, "run_list": [ "role[dispatcher]" ] } $ knife node edit dispatcher-connectcon-fqdn Another Search Publish Another Search
  • 53. © 2014 Adobe Systems Incorporated. All Rights Reserved. Let’s Add a Load Balancer : Use Case 3 HA/LB Dispatcher { "name": ”<lb-connectcon-fqdn>", "chef_environment": "dev”, "run_list": [ "role[lb_dispatcher]" ] } $ knife node edit lb-connectcon-fqdn Author Publish Author Publish Publish Publish Dispatcher Dispatcher Dispatcher Another Search } DispatcherDispatcher DispatcherDispatcher Another Search
  • 54. © 2014 Adobe Systems Incorporated. All Rights Reserved. •! myapp-cookbook/recipes/log.rb logrotate_app 'aem' do cookbook 'logrotate' path node['myapp']['log_dir'] frequency node['myapp']['logrotate']['frequency'] rotate node['myapp']['logrotate']['rotate'] end include_recipe 'it-splunkforwarder::default’ •! myapp-cookbook/attributes/log.rb default.splunkforwarder.inputs = [ {"input_path" => "#{node['aem']['log_dir']}/error.log", … ] default.splunkforwarder.inputs = [ {"input_path" => "#{node['aem']['log_dir']}/error.log", … ] Let’s add log monitoring: Use Case 4 myapp /recipes/log.rb logrotate_app 'aem' do cookbook 'logrotate' path node['myapp']['log_dir'] frequency node['myapp']['logrotate']['frequency'] rotate node['myapp']['logrotate']['rotate'] end include_recipe 'it-splunkforwarder::default’ Dispatcher Author Publish Author Publish Publish Publish Dispatcher Dispatcher DispatcherDispatcherDispatcher DispatcherDispatcher DispatcherDispatcherDispatcherDispatcher Publish DispatcherDispatcherDispatcherDispatcherDispatcherDispatcher Publish Publish DispatcherDispatcher DispatcherDispatcher Publish DispatcherDispatcherDispatcherDispatcher Add the above in the base role Add the above in the base role
  • 55. © 2014 Adobe Systems Incorporated. All Rights Reserved. Let’s cluster things!
  • 56. © 2014 Adobe Systems Incorporated. All Rights Reserved. AEM Production Infrastructure LB/HA Dispatcher Publish Author MongoDB servers Dispatcher !" 3rd parties (your legacy, your cloud)
  • 57. © 2014 Adobe Systems Incorporated. All Rights Reserved. you got it ?
  • 58. © 2014 Adobe Systems Incorporated. All Rights Reserved. Search APIknife workstation env. roles attributes cookbooks recipes Git org Chef-DK github Nexus opscode rubygem data bags attributes env. data bags cookbooks recipes Chef-server nodes RSA key Auth ssh https yymaven redhat RSA Keys node objectrun-list rolesWeb UI versions RSA key Auth chef-clients RSA Key
  • 59. © 2014 Adobe Systems Incorporated. All Rights Reserved. #LearnChef Learn Stuff Automate IT infrastructure and application delivery Learn Chef Slide inspired by Spice up your recipe By Seth Vargo
  • 60. © 2014 Adobe Systems Incorporated. All Rights Reserved. What Stuff ? •! Git Stuff •! Ruby stuff •! VM / Container stuff •! Cloud stuff •! Network stuff •! *nix tools and stuff •! OS Stuff –! package management –! services •! Chef Community Stuff •! Build and packaging stuff •! Continuous Delivery stuff •! Monitoring stuff •! Analytics stuff •! Messaging stuff •! Security Stuff
  • 61. © 2014 Adobe Systems Incorporated. All Rights Reserved. Why ?
  • 62. © 2014 Adobe Systems Incorporated. All Rights Reserved. Devops? “ You built it You run it! ”
  • 63. © 2014 Adobe Systems Incorporated. All Rights Reserved. Chef, Devops ? No silver bullet. https://twitter.com/DEVOPS_BORAT/status/52857016670105600
  • 64. © 2014 Adobe Systems Incorporated. All Rights Reserved. Chef, Devops ? No silver bullet. https://twitter.com/mindweather/status/458653460234502144
  • 65. © 2014 Adobe Systems Incorporated. All Rights Reserved. Why ? “Accelerate, Simplify, Scale” •! Breaking down the wall of confusion •! As infra is code, it becomes: –! Testable –! Versionable –! Disposable –! Reproducible •! “If it’s not in the source control system, it does not exist” @bdelacretaz
  • 66. © 2014 Adobe Systems Incorporated. All Rights Reserved. https://www.flickr.com/photos/francoisledroff/6107220850/in/set-72157626126325552
  • 67. © 2014 Adobe Systems Incorporated. All Rights Reserved. https://www.flickr.com/photos/blmoregon/7883684692
  • 68. © 2014 Adobe Systems Incorporated. All Rights Reserved. AEM Production Infrastructure LB/HA Dispatcher Publish Author MongoDB servers Dispatcher !" 3rd parties (your legacy, your cloud)
  • 69. © 2014 Adobe Systems Incorporated. All Rights Reserved. One more publish? LB/HA Dispatcher Publish Author !" MongoDB servers Dispatcher !" 3rd parties (cloud stuff)
  • 70. © 2014 Adobe Systems Incorporated. All Rights Reserved. This needs to be configured LB/HA Dispatcher Publish Author MongoDB servers Dispatcher !" 3rd parties (cloud stuff)
  • 71. © 2014 Adobe Systems Incorporated. All Rights Reserved. A more complex production
  • 72. © 2014 Adobe Systems Incorporated. All Rights Reserved. Next scale of complexity…
  • 73. © 2014 Adobe Systems Incorporated. All Rights Reserved. Let’s Share the love
  • 74. © 2014 Adobe Systems Incorporated. All Rights Reserved.