SlideShare a Scribd company logo
A Supermarket of Your Own: Running a
Private Supermarket
Nell Shamrell-Harrington
Who am I?
Nell Shamrell-Harrington
• Software Development Engineer at Chef
• Twitter: @nellshamrell
• Email: nshamrell@chef.io
Why Private Supermarket?
Supermarket – in the beginning…
• Started as the public community cookbooks site
• Can browse cookbooks from anywhere
• People really liked it!
However…
• Some companies create very company-specific cookbooks
• And cannot share those cookbooks publicly
• Still want to share internally
Before Private Supermarket
• Store Cookbooks on Github Enterprise
PROBLEM: Hard to know exactly what to search for
• Use Berkshelf with Github Enterprise
PROBLEM: Resolving dependencies directly from Github repos is slow
Private Supermarket – in the beginning…
• Chef Summit 2014 - Customers requested ability to run their own copy of
Supermarket
• Hadn’t thought of this before…but ready to try it
• Build a stand alone Supermarket package using Chef Omnibus Packager
https://github.com/chef/omnibus
Benefits of Private Supermarket
• Easily searchable cookbook repository that can on a company’s internal network
• Friendly GUI and command line interfaces
• Supermarket API simplifies and speeds up Berkshelf runs
• Easier to formalize process of release cookbooks
Sounds Great…
How Do I Get My Own Private Supermarket?
Installing Private Supermarket
Requirements
• Running Chef Server – need for oc-id (Chef Oauth Provider)
Requirements
• Running Chef Server – need for oc-id (Chef Oauth Provider)
• Admin User Account on Chef Server
Requirements
• Running Chef Server – need for oc-id (Chef Oauth Provider)
• Admin User Account on Chef Server
• Key for User Account on Chef Server
Requirements
• Running Chef Server – need for oc-id (Chef Oauth Provider)
• Admin User Account on Chef Server
• Key for User Account on Chef Server
• Fresh VM with 1 GB Memory (we use an Ubuntu instance on AWS)
What is oc-id?
• Chef’s Authentication/Authorization
Service
• Use credentials for Chef Server users to
access other applications
• Uses OAuth2 to talk to any applications
authorized by Chef Server
What is oc-id?
What is oc-id?
User clicks “Sign
In”
What is oc-id? User redirected to Chef
Server
What is oc-id? User signs into Chef Server
What is oc-id?
User is redirected to Supermarket, now signed
in!
Preparing Your Chef Server
• SSH into your Chef Server
$ (your workstation) ssh user@your-chef-server
Preparing Your Chef Server
• Open up /etc/opscode/chef-server.rb
$ (your chef server) sudo vim /etc/opscode/chef-server.rb
Preparing Your Chef Server
• Add this content, then save and exit the file
oc_id[‘applications’] = {
‘supermarket’ => {
‘redirect_uri’ => ‘https://supermarket-
hostname/auth/chef_oauth2/callback’
}
}
Preparing Your Chef Server
• Reconfigure your Chef Server
$ (your chef server) sudo chef-server-ctl reconfigure
Preparing Your Chef Server
• Look at /etc/opscode/oc-id-applications/supermarket.json – will need these
values later
$ (your chef server) sudo cat /etc/opscode/oc-id-
applications/supermarket.json
{
“name”: “supermarket”,
“uid”: “123……989”
“secret”: “1234…897”
“redirect uri”: “https://supermarket-
hostname/auth/chef_oauth2/callback”
}
Preparing Your Supermarket
• Will be using Irving Popovetsky’s supermarket-omnibus-cookbook
https://github.com/irvingpop/supermarket-omnibus-cookbook
• There IS another community cookbook, but uses an outdated method for installing Supermarket
and is (as of 8/17) no longer supported by Chef
• A blog post on converting from the old community cookbook to the new Supermarket cookbook is coming
soon!
• Good practice – using a wrapper cookbook with Irving’s cookbook
• Will need to supply certain attributes through wrapper cookbook
Preparing Your Supermarket
Preparing Your Supermarket
Wrapper
Cookbook
• Defines node[supemarket_omnibus]
attributes
Preparing Your Supermarket
Wrapper
Cookbook
Omnibus
Supermarket
Cookbook
• Defines node[supemarket_omnibus]
attributes
• Installs supermarket omnibus
package
• Writes node[supermarket_omnibus]
attributes to
/etc/supermarket/supermarket.json
Preparing Your Supermarket
Wrapper
Cookbook
Omnibus
Supermarket
Cookbook
Omnibus
Supermarket
Package
• Has internal Chef cookbook to run
• Configures package using
attributes defined in:
/etc/supermarket/supermarket.json
• supermarket-ctl reconfigure
• Like running chef solo
• Defines node[supemarket_omnibus]
attributes
• Installs supermarket omnibus
package
• Writes node[supermarket_omnibus]
attributes to
/etc/supermarket/supermarket.json
Preparing Your Supermarket
• Create wrapper cookbook on your local workstation
$ (your workstation) chef generate cookbook my-supermarket-wrapper
$ (your workstation) cd my-supermarket-wrapper
Preparing Your Supermarket
• Open your cookbook’s metadata.rb
$ (your workstation) vim metadata.rb
Preparing Your Supermarket
• Add dependency on the supermarket-omnibus-cookbook to metadata.rb. Save
and close file.
depends ‘supermarket-omnibus-cookbook’
Preparing Your Supermarket
• Open your cookbook’s default recipe at recipes/default.rb
$ (your workstation) vim recipes/default.rb
Preparing Your Supermarket
• Include the default recipe of the supermarket-omnibus-cookbook
include_recipe ‘supermarket-omnibus-cookbook’
Preparing Your Supermarket
• Next, need to define attributes for your Supermarket and how it connects to Chef
Server
• Can hard code attributes in your wrapper cookbook’s default recipe
• Better practice – place attributes in a databag, then reference it in your recipe
• At minimum – must define
• chef_server_url
• chef_oauth2_app_id
• chef_oauth2_secret
Preparing Your Supermarket
• Add attributes to wrapper cookbook’s default recipe
# calling the data bag
app = data_bag_item(‘apps’, ‘supermarket’)
Preparing Your Supermarket
• Add attributes to wrapper cookbook’s default recipe, save and close.
# calling the data bag
app = data_bag_item(‘apps’, ‘supermarket’)
node.set[‘supermarket_omnibus’][‘chef_server_url’] = app[‘chef_server_url’]
node.set['supermarket_omnibus']['chef_oauth2_app_id'] = app[‘app_id’]
node.set['supermarket_omnibus']['chef_oauth2_secret'] = app[‘secret’]
Preparing Your Supermarket
• Download dependent cookbooks using Berkshelf
$ (your workstation) berks install
Preparing Your Supermarket
• Then upload all dependent cookbooks to your Chef Server
$ (your workstation) cd ~/.berkshelf/cookbooks
$ (your workstation) knife cookbook upload -a
Preparing Your Supermarket
• Now upload your wrapper cookbook
$ (your workstation) cd path/to/wrapper/cookbook/..
$ (your workstation) knife cookbook upload -a
Preparing Your Supermarket
• Bootstrap and register your Supermarket node with your Chef Server
# For an Ubuntu node on AWS
$ (your workstation) knife bootstrap ip_address –N supermarket-
node –x ubuntu --sudo
Preparing Your Supermarket
• Bootstrap and register your Supermarket node with your Chef Server
# For an Ubuntu node on AWS
$ (your workstation) knife bootstrap ip_address –N supermarket-
node –x ubuntu –-sudo
# -N flag defines name of node
Preparing Your Supermarket
• Bootstrap and register your Supermarket node with your Chef Server
# For an Ubuntu node on AWS
$ (your workstation) knife bootstrap ip_address –N supermarket-
node –x ubuntu –sudo
# -N flag defines name of node
# -x flag defines username to use (default on AWS is ubuntu)
Preparing Your Supermarket
• Bootstrap and register your Supermarket node with your Chef Server
# For an Ubuntu node on AWS
$ (your workstation) knife bootstrap ip_address –N supermarket-
node –x ubuntu –sudo
# -N flag defines name of node
# -x flag defines username to use (default on AWS is ubuntu)
# --sudo runs bootstrap command as sudo on node
Preparing Your Supermarket
• Edit your Supermarket node
$ (your workstation) knife node edit supermarket-node
Preparing Your Supermarket
• Add wrapper cookbook’s default recipe to Supermarket node’s run list, save and
quit file
"run_list": [
“recipe[my_supermarket_wrapper::default]”
]
Preparing Your Supermarket
• SSH into your Supermarket node
# For an Ubuntu instance on AWS
$ (your workstation) ssh ubuntu@your-supermarket-node-public-dns
Preparing Your Supermarket
• Run Chef Client
$ (your-supermarket-node) sudo chef-client
Using Private Supermarket
Using Private Supermarket
• Open up /etc/hosts on your local workstation
$ (your workstation) vim /etc/hosts
Using Private Supermarket
• Add an entry for your Supermarket instance
# Supermarket ip address Supermarket hostname
00.00.000.000 supermarket-hostname
Using Private Supermarket
• Visit Supermarket hostname in browser (accept SSL certificate)
• Click the “Create Account” link
Using Private Supermarket
• Log into your Chef Server
Using Private Supermarket
• Authorize the app to use your Chef Server account
Using Private Supermarket
• And you’re in!
Using Private Supermarket
• Knife Supermarket Plugin
Best current way to interact with a private Supermarket
https://github.com/chef/knife-supermarket
Using Private Supermarket
• Install knife-supermarket
# If using the Chef DK
$ chef gem install knife-supermarket
# If not using the Chef DK
$ gem install knife-supermarket
Using Private Supermarket
• Open up knife.rb
$ vim .chef/knife.rb
Using Private Supermarket
• Define supermarket site in knife.rb, then save and close.
knife[:supermarket_site] = ‘https://your-private-supermarket’
Using Private Supermarket
• knife supermarket commands
• same as knife cookbook site commands
• see https://docs.chef.io/knife_cookbook_site.html
Using Private Supermarket
• Using knife supermarket share
$ (your-workstation) knife supermarket share ‘my_cookbook’
Using Private Supermarket
• When you first use this command, might see an SSL error
$ (your-workstation) knife supermarket share ‘my_cookbook’
Making tarball my_cookbook.tgz
ERROR: Error uploading cookbook my_cookbook to the Opscode
Cookbook Site: SSL_connect returned=1 errno=0 state=SSLv3 read
server certificate B: certificate verify failed. Increase log
verbosity (-VV) for more information.
Using Private Supermarket
• By default, Chef 12 enforces ssl when sharing cookbooks (Chef 11 did NOT do
this)
• Private Supermarkets (by default) use self-signed certificates
• When using chef-client 12.4 or above, can fix error through fetching
Supermarket’s ssl certificate
• When using < chef-client 12.4, must set knife[:ssl_verification] = :verify_none
Using Private Supermarket
• When using >= Chef 12.4, fetch the ssl certificate of your Private Supermarket
$ (your workstation) knife ssl fetch https://your-private-supermarket
Using Private Supermarket
• When using >= Chef 12.4, fetch the ssl certificate of your Private Supermarket
$ (your workstation) knife ssl fetch https://your-private-
supermarket
WARNING: Certificates from your-private-supermarket will be fetched
and placed in your trusted_cert
directory (/home/ubuntu/.chef/trusted_certs).
Knife has no means to verify these are the correct certificates. You
should
verify the authenticity of these certificates after downloading.
Using Private Supermarket
• Then check the ssl certificate
$ (your-workstation) knife ssl check https://your-private-supermarket
Using Private Supermarket
• Then check the ssl certificate
$ (your-workstation) knife ssl check https://your-private-supermarket
[Connecting to host your-private-supermarket:443
Successfully verified certificates from `your-private-supermarket'
Using Private Supermarket
• Now try sharing the cookbook again
$ (your-workstation) knife supermarket share ‘my_cookbook’
Using Private Supermarket
• Success!
$ (your workstation) knife supermarket share ‘my_cookbook’
Generating metadata for my_cookbook from /tmp/chef-my_cookbook-
build20150722-14976-8e8bdz/my_cookbook/metadata.rb
Making tarball my_cookbook.tgz
Upload complete!
Managing Private Supermarket
Managing Private Supermarket
• You can manage services and other settings of your instance with supermarket-
ctl
Managing Private Supermarket
• You can manage services and other settings of your instance with supermarket-
ctl
• Examples:
supermarket-ctl reconfigure - does an internal Chef run based on the cookbooks
included
within the omnibus package
supermarket-ctl make-admin user - makes a supermarket user an admin user
supermarket-ctl restart - stops services if they are running, then starts them again
Managing Private Supermarket
• Restarting services on your Supermarket instance
$ (your-supermarket-node) sudo supermarket-ctl restart
ok: run: nginx: (pid 16737) 1s
ok: run: postgresql: (pid 16742) 0s
ok: run: rails: (pid 16751) 1s
ok: run: redis: (pid 16755) 0s
ok: run: sidekiq: (pid 16760) 0s
Managing Private Supermarket
• Monitoring URL: https://your_private_supermarket/status
Other Tools You Can Use
With Private Supermarket
Stove
https://github.com/sethvargo/stove
Berkshelf Integration
Berksfile
source 'https://supermarket.yourcompany.com'
source 'https://supermarket.chef.io'
...
Dependency Resolution
• Multiple sources can be defined in a Berksfile
• Cookbook dependency resolution is performed from the top down. i.e. the
source defined first in the Berksfile will be searched for a cookbook version
before the second source and so on.
Alternative Datastores / HA
Public Supermarket HA configuration
Why?
• Make better use of Amazon's services RDS, Elasticache and S3
• Make your company’s existing infrastructure better
• Handle a heavy traffic load spike
• Improve uptime
Load Balancing
Load Balancer Health Checks
http://app1-staging-supermarket.internal/status
{
"status":"ok",
...
}
External Database
Postgres / RDS
node.set['supermarket_omnibus']['postgresql']['enable'] = false
node.set['supermarket_omnibus']['database']['user'] = 'supermarket'
node.set['supermarket_omnibus']['database']['name'] = 'supermarket'
node.set['supermarket_omnibus']['database']['host'] = 'yourcompany...rds.amazon.com'
node.set['supermarket_omnibus']['database']['port'] = '5432'
node.set['supermarket_omnibus']['database']['pool'] = '25'
node.set['supermarket_omnibus']['database']['password'] = 'topsecretneverguessit'
Cache
Cache Configuration
node.set['supermarket_omnibus']['redis']['enable'] = false
node.set['supermarket_omnibus']['redis_url'] =
'redis://supermarket.yourcompany.use1.cache.amazonaws.com:6379'
Storage
Cookbook Storage Methods
• Local Filesystem
• S3
S3 Configuration
node.set['supermarket_omnibus']['s3_access_key_id'] = 'XYZXYZXYZXYZXYZXYZ'
node.set['supermarket_omnibus']['s3_bucket'] = 'supermarket'
node.set['supermarket_omnibus']['s3_secret_access_key'] = 'wXYzwXYzwXYzwXYzwXYz'
Additional Configuration Options
• https://github.com/chef/omnibus-
supermarket/blob/master/cookbooks/omnibus-
supermarket/attributes/default.rb
A Supermarket of Your Own: Running a Private Chef Supermarket

More Related Content

What's hot

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 Chef
Knoldus Inc.
 
Chaione Ember.js Training
Chaione Ember.js TrainingChaione Ember.js Training
Chaione Ember.js Training
aortbals
 
Chef + AWS + CodeIgniter
Chef + AWS + CodeIgniterChef + AWS + CodeIgniter
Chef + AWS + CodeIgniterciconf
 
The Environment Restaurant
The Environment RestaurantThe Environment Restaurant
The Environment Restaurant
Martin de Keijzer
 
Chasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
Chasing AMI - Building Amazon machine images with Puppet, Packer and JenkinsChasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
Chasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
Tomas Doran
 
Opscode tech festa july 2013
Opscode tech festa   july 2013Opscode tech festa   july 2013
Opscode tech festa july 2013
Chef Software, Inc.
 
Chef Tutorial for DEVOPS Newbies
Chef Tutorial for DEVOPS NewbiesChef Tutorial for DEVOPS Newbies
Chef Tutorial for DEVOPS Newbies
Mamun Rashid, CCDH
 
Introduction to Chef - Techsuperwomen Summit
Introduction to Chef - Techsuperwomen SummitIntroduction to Chef - Techsuperwomen Summit
Introduction to Chef - Techsuperwomen Summit
Jennifer Davis
 
Chef ignited a DevOps revolution – BK Box
Chef ignited a DevOps revolution – BK BoxChef ignited a DevOps revolution – BK Box
Chef ignited a DevOps revolution – BK Box
Chef Software, Inc.
 
Introduction to Chef - April 22 2015
Introduction to Chef - April 22 2015Introduction to Chef - April 22 2015
Introduction to Chef - April 22 2015
Jennifer Davis
 
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
Chef
 
Automated Deployment and Configuration Engines. Ansible
Automated Deployment and Configuration Engines. AnsibleAutomated Deployment and Configuration Engines. Ansible
Automated Deployment and Configuration Engines. Ansible
Alberto Molina Coballes
 
Chef introduction
Chef introductionChef introduction
Chef introduction
FENG Zhichao
 
Chef, Devops, and You
Chef, Devops, and YouChef, Devops, and You
Chef, Devops, and You
Bryan Berry
 
Atmosphere 2014: Really large scale systems configuration - Phil Dibowitz
Atmosphere 2014: Really large scale systems configuration - Phil DibowitzAtmosphere 2014: Really large scale systems configuration - Phil Dibowitz
Atmosphere 2014: Really large scale systems configuration - Phil Dibowitz
PROIDEA
 
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.
 
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.
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with Chef
Jonathan Weiss
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Chef
 

What's hot (20)

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
 
Chaione Ember.js Training
Chaione Ember.js TrainingChaione Ember.js Training
Chaione Ember.js Training
 
Chef + AWS + CodeIgniter
Chef + AWS + CodeIgniterChef + AWS + CodeIgniter
Chef + AWS + CodeIgniter
 
The Environment Restaurant
The Environment RestaurantThe Environment Restaurant
The Environment Restaurant
 
Chasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
Chasing AMI - Building Amazon machine images with Puppet, Packer and JenkinsChasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
Chasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
 
Opscode tech festa july 2013
Opscode tech festa   july 2013Opscode tech festa   july 2013
Opscode tech festa july 2013
 
Chef Tutorial for DEVOPS Newbies
Chef Tutorial for DEVOPS NewbiesChef Tutorial for DEVOPS Newbies
Chef Tutorial for DEVOPS Newbies
 
Introduction to Chef - Techsuperwomen Summit
Introduction to Chef - Techsuperwomen SummitIntroduction to Chef - Techsuperwomen Summit
Introduction to Chef - Techsuperwomen Summit
 
Chef ignited a DevOps revolution – BK Box
Chef ignited a DevOps revolution – BK BoxChef ignited a DevOps revolution – BK Box
Chef ignited a DevOps revolution – BK Box
 
Introduction to Chef - April 22 2015
Introduction to Chef - April 22 2015Introduction to Chef - April 22 2015
Introduction to Chef - April 22 2015
 
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
 
Automated Deployment and Configuration Engines. Ansible
Automated Deployment and Configuration Engines. AnsibleAutomated Deployment and Configuration Engines. Ansible
Automated Deployment and Configuration Engines. Ansible
 
Chef introduction
Chef introductionChef introduction
Chef introduction
 
Chef, Devops, and You
Chef, Devops, and YouChef, Devops, and You
Chef, Devops, and You
 
Atmosphere 2014: Really large scale systems configuration - Phil Dibowitz
Atmosphere 2014: Really large scale systems configuration - Phil DibowitzAtmosphere 2014: Really large scale systems configuration - Phil Dibowitz
Atmosphere 2014: Really large scale systems configuration - Phil Dibowitz
 
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 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...
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with Chef
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5
 

Viewers also liked

Designing Supermarket
Designing SupermarketDesigning Supermarket
Designing Supermarketglenferry
 
Projeto Communicative Approach: a Day in a Supermarket
Projeto Communicative Approach: a Day in a SupermarketProjeto Communicative Approach: a Day in a Supermarket
Projeto Communicative Approach: a Day in a Supermarket
Denise
 
Designing a Manufacturing Supermarket - November 2016
Designing a Manufacturing Supermarket - November 2016Designing a Manufacturing Supermarket - November 2016
Designing a Manufacturing Supermarket - November 2016
W3 Group Canada Inc.
 
Supermarket delivery system
Supermarket delivery systemSupermarket delivery system
Supermarket delivery system
mwrye
 
Supermarkets
SupermarketsSupermarkets
Supermarkets
josemiguelmc
 
Power point presentation (grocery store)
Power point presentation (grocery store)Power point presentation (grocery store)
Power point presentation (grocery store)Alina Hacopian
 
Installing WordPress on AWS
Installing WordPress on AWSInstalling WordPress on AWS
Installing WordPress on AWS
Manish Jain
 
Pantaloons ppt
Pantaloons pptPantaloons ppt
Pantaloons ppt
sandipkumar1987
 
FMCG SECTOR ANALYSIS
FMCG SECTOR ANALYSISFMCG SECTOR ANALYSIS
FMCG SECTOR ANALYSISarjunarg
 

Viewers also liked (9)

Designing Supermarket
Designing SupermarketDesigning Supermarket
Designing Supermarket
 
Projeto Communicative Approach: a Day in a Supermarket
Projeto Communicative Approach: a Day in a SupermarketProjeto Communicative Approach: a Day in a Supermarket
Projeto Communicative Approach: a Day in a Supermarket
 
Designing a Manufacturing Supermarket - November 2016
Designing a Manufacturing Supermarket - November 2016Designing a Manufacturing Supermarket - November 2016
Designing a Manufacturing Supermarket - November 2016
 
Supermarket delivery system
Supermarket delivery systemSupermarket delivery system
Supermarket delivery system
 
Supermarkets
SupermarketsSupermarkets
Supermarkets
 
Power point presentation (grocery store)
Power point presentation (grocery store)Power point presentation (grocery store)
Power point presentation (grocery store)
 
Installing WordPress on AWS
Installing WordPress on AWSInstalling WordPress on AWS
Installing WordPress on AWS
 
Pantaloons ppt
Pantaloons pptPantaloons ppt
Pantaloons ppt
 
FMCG SECTOR ANALYSIS
FMCG SECTOR ANALYSISFMCG SECTOR ANALYSIS
FMCG SECTOR ANALYSIS
 

Similar to A Supermarket of Your Own: Running a Private Chef Supermarket

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
Chef
 
IT Automation with Chef
IT Automation with ChefIT Automation with Chef
IT Automation with Chef
Anuchit Chalothorn
 
Chef - Infrastructure Automation for the Masses
Chef - Infrastructure Automation for the Masses�Chef - Infrastructure Automation for the Masses�
Chef - Infrastructure Automation for the Masses
Sai Perchard
 
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
George Miranda
 
AWS OpsWorks for Chef Automate
AWS OpsWorks for Chef AutomateAWS OpsWorks for Chef Automate
AWS OpsWorks for Chef Automate
Amazon Web Services
 
Vagrant and Chef on FOSSASIA 2014
Vagrant and Chef on FOSSASIA 2014Vagrant and Chef on FOSSASIA 2014
Vagrant and Chef on FOSSASIA 2014
Michael Lihs
 
CIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef CookbooksCIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
ICF CIRCUIT
 
Chef for Openstack
Chef for OpenstackChef for Openstack
Chef for OpenstackMohit Sethi
 
Chef advance
Chef advanceChef advance
Chef advance
Ramesh Sencha
 
Chef advance
Chef advanceChef advance
Chef advance
Ramesh Sencha
 
Using Nagios with Chef
Using Nagios with ChefUsing Nagios with Chef
Using Nagios with Chef
Bryan McLellan
 
Avoiding surprises with Chef and Vagrant
Avoiding surprises with Chef and VagrantAvoiding surprises with Chef and Vagrant
Avoiding surprises with Chef and Vagrantandygale
 
AWS re:Invent 2016: Configuration Management in the Cloud (DEV305)
AWS re:Invent 2016: Configuration Management in the Cloud (DEV305)AWS re:Invent 2016: Configuration Management in the Cloud (DEV305)
AWS re:Invent 2016: Configuration Management in the Cloud (DEV305)
Amazon Web Services
 
Automating your infrastructure with Chef
Automating your infrastructure with ChefAutomating your infrastructure with Chef
Automating your infrastructure with Chef
John Ewart
 
Chef Provisioning a Chef Server Cluster - ChefConf 2015
Chef Provisioning a Chef Server Cluster - ChefConf 2015Chef Provisioning a Chef Server Cluster - ChefConf 2015
Chef Provisioning a Chef Server Cluster - ChefConf 2015
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
Chef
 
Chef Cookbook Workflow
Chef Cookbook WorkflowChef Cookbook Workflow
Chef Cookbook Workflow
Amazon Web Services
 
Testable Infrastructure with Chef, Test Kitchen, and Docker
Testable Infrastructure with Chef, Test Kitchen, and DockerTestable Infrastructure with Chef, Test Kitchen, and Docker
Testable Infrastructure with Chef, Test Kitchen, and Docker
Mandi Walls
 
Michelin Starred Cooking with Chef
Michelin Starred Cooking with ChefMichelin Starred Cooking with Chef
Michelin Starred Cooking with Chef
Jon Cowie
 

Similar to A Supermarket of Your Own: Running a Private Chef Supermarket (20)

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
 
IT Automation with Chef
IT Automation with ChefIT Automation with Chef
IT Automation with Chef
 
Chef - Infrastructure Automation for the Masses
Chef - Infrastructure Automation for the Masses�Chef - Infrastructure Automation for the Masses�
Chef - Infrastructure Automation for the Masses
 
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
 
AWS OpsWorks for Chef Automate
AWS OpsWorks for Chef AutomateAWS OpsWorks for Chef Automate
AWS OpsWorks for Chef Automate
 
Vagrant and Chef on FOSSASIA 2014
Vagrant and Chef on FOSSASIA 2014Vagrant and Chef on FOSSASIA 2014
Vagrant and Chef on FOSSASIA 2014
 
CIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef CookbooksCIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
CIRCUIT 2015 - AEM Infrastructure Automation with Chef Cookbooks
 
Chef for Openstack
Chef for OpenstackChef for Openstack
Chef for Openstack
 
Chef advance
Chef advanceChef advance
Chef advance
 
Chef advance
Chef advanceChef advance
Chef advance
 
Chef for openstack
Chef for openstackChef for openstack
Chef for openstack
 
Using Nagios with Chef
Using Nagios with ChefUsing Nagios with Chef
Using Nagios with Chef
 
Avoiding surprises with Chef and Vagrant
Avoiding surprises with Chef and VagrantAvoiding surprises with Chef and Vagrant
Avoiding surprises with Chef and Vagrant
 
AWS re:Invent 2016: Configuration Management in the Cloud (DEV305)
AWS re:Invent 2016: Configuration Management in the Cloud (DEV305)AWS re:Invent 2016: Configuration Management in the Cloud (DEV305)
AWS re:Invent 2016: Configuration Management in the Cloud (DEV305)
 
Automating your infrastructure with Chef
Automating your infrastructure with ChefAutomating your infrastructure with Chef
Automating your infrastructure with Chef
 
Chef Provisioning a Chef Server Cluster - ChefConf 2015
Chef Provisioning a Chef Server Cluster - ChefConf 2015Chef Provisioning a Chef Server Cluster - ChefConf 2015
Chef Provisioning a Chef Server Cluster - ChefConf 2015
 
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
 
Chef Cookbook Workflow
Chef Cookbook WorkflowChef Cookbook Workflow
Chef Cookbook Workflow
 
Testable Infrastructure with Chef, Test Kitchen, and Docker
Testable Infrastructure with Chef, Test Kitchen, and DockerTestable Infrastructure with Chef, Test Kitchen, and Docker
Testable Infrastructure with Chef, Test Kitchen, and Docker
 
Michelin Starred Cooking with Chef
Michelin Starred Cooking with ChefMichelin Starred Cooking with Chef
Michelin Starred Cooking with Chef
 

More from Nell Shamrell-Harrington

This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!
Nell Shamrell-Harrington
 
The Rust Borrow Checker
The Rust Borrow CheckerThe Rust Borrow Checker
The Rust Borrow Checker
Nell Shamrell-Harrington
 
Higher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with HabitatHigher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with Habitat
Nell Shamrell-Harrington
 
Habitat Service Discovery
Habitat Service DiscoveryHabitat Service Discovery
Habitat Service Discovery
Nell Shamrell-Harrington
 
Web Operations101
Web Operations101Web Operations101
Web Operations101
Nell Shamrell-Harrington
 
Rust Traits And You: A Deep Dive
Rust Traits And You: A Deep DiveRust Traits And You: A Deep Dive
Rust Traits And You: A Deep Dive
Nell Shamrell-Harrington
 
Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!
Nell Shamrell-Harrington
 
Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!
Nell Shamrell-Harrington
 
Chef Vault: A Deep Dive
Chef Vault: A Deep DiveChef Vault: A Deep Dive
Chef Vault: A Deep Dive
Nell Shamrell-Harrington
 
Open Source Governance 101
Open Source Governance 101Open Source Governance 101
Open Source Governance 101
Nell Shamrell-Harrington
 
DevOps in Politics
DevOps in PoliticsDevOps in Politics
DevOps in Politics
Nell Shamrell-Harrington
 
Open Source Governance - The Hard Parts
Open Source Governance - The Hard PartsOpen Source Governance - The Hard Parts
Open Source Governance - The Hard Parts
Nell Shamrell-Harrington
 
Creating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef HabitatCreating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef Habitat
Nell Shamrell-Harrington
 
Refactoring terraform
Refactoring terraformRefactoring terraform
Refactoring terraform
Nell Shamrell-Harrington
 
Refactoring Infrastructure Code
Refactoring Infrastructure CodeRefactoring Infrastructure Code
Refactoring Infrastructure Code
Nell Shamrell-Harrington
 
Devops: A History
Devops: A HistoryDevops: A History
Devops: A History
Nell Shamrell-Harrington
 
First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)
Nell Shamrell-Harrington
 
First Do No Harm: Surgical Refactoring
First Do No Harm: Surgical RefactoringFirst Do No Harm: Surgical Refactoring
First Do No Harm: Surgical Refactoring
Nell Shamrell-Harrington
 
Beneath the Surface - Rubyconf 2013
Beneath the Surface - Rubyconf 2013Beneath the Surface - Rubyconf 2013
Beneath the Surface - Rubyconf 2013
Nell Shamrell-Harrington
 
Beneath the Surface: Regular Expressions in Ruby
Beneath the Surface: Regular Expressions in RubyBeneath the Surface: Regular Expressions in Ruby
Beneath the Surface: Regular Expressions in Ruby
Nell Shamrell-Harrington
 

More from Nell Shamrell-Harrington (20)

This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!
 
The Rust Borrow Checker
The Rust Borrow CheckerThe Rust Borrow Checker
The Rust Borrow Checker
 
Higher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with HabitatHigher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with Habitat
 
Habitat Service Discovery
Habitat Service DiscoveryHabitat Service Discovery
Habitat Service Discovery
 
Web Operations101
Web Operations101Web Operations101
Web Operations101
 
Rust Traits And You: A Deep Dive
Rust Traits And You: A Deep DiveRust Traits And You: A Deep Dive
Rust Traits And You: A Deep Dive
 
Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!
 
Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!
 
Chef Vault: A Deep Dive
Chef Vault: A Deep DiveChef Vault: A Deep Dive
Chef Vault: A Deep Dive
 
Open Source Governance 101
Open Source Governance 101Open Source Governance 101
Open Source Governance 101
 
DevOps in Politics
DevOps in PoliticsDevOps in Politics
DevOps in Politics
 
Open Source Governance - The Hard Parts
Open Source Governance - The Hard PartsOpen Source Governance - The Hard Parts
Open Source Governance - The Hard Parts
 
Creating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef HabitatCreating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef Habitat
 
Refactoring terraform
Refactoring terraformRefactoring terraform
Refactoring terraform
 
Refactoring Infrastructure Code
Refactoring Infrastructure CodeRefactoring Infrastructure Code
Refactoring Infrastructure Code
 
Devops: A History
Devops: A HistoryDevops: A History
Devops: A History
 
First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)
 
First Do No Harm: Surgical Refactoring
First Do No Harm: Surgical RefactoringFirst Do No Harm: Surgical Refactoring
First Do No Harm: Surgical Refactoring
 
Beneath the Surface - Rubyconf 2013
Beneath the Surface - Rubyconf 2013Beneath the Surface - Rubyconf 2013
Beneath the Surface - Rubyconf 2013
 
Beneath the Surface: Regular Expressions in Ruby
Beneath the Surface: Regular Expressions in RubyBeneath the Surface: Regular Expressions in Ruby
Beneath the Surface: Regular Expressions in Ruby
 

Recently uploaded

How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaTop 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Yara Milbes
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 

Recently uploaded (20)

How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaTop 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 

A Supermarket of Your Own: Running a Private Chef Supermarket

  • 1. A Supermarket of Your Own: Running a Private Supermarket Nell Shamrell-Harrington
  • 3. Nell Shamrell-Harrington • Software Development Engineer at Chef • Twitter: @nellshamrell • Email: nshamrell@chef.io
  • 5. Supermarket – in the beginning… • Started as the public community cookbooks site • Can browse cookbooks from anywhere • People really liked it!
  • 6. However… • Some companies create very company-specific cookbooks • And cannot share those cookbooks publicly • Still want to share internally
  • 7. Before Private Supermarket • Store Cookbooks on Github Enterprise PROBLEM: Hard to know exactly what to search for • Use Berkshelf with Github Enterprise PROBLEM: Resolving dependencies directly from Github repos is slow
  • 8. Private Supermarket – in the beginning… • Chef Summit 2014 - Customers requested ability to run their own copy of Supermarket • Hadn’t thought of this before…but ready to try it • Build a stand alone Supermarket package using Chef Omnibus Packager https://github.com/chef/omnibus
  • 9. Benefits of Private Supermarket • Easily searchable cookbook repository that can on a company’s internal network • Friendly GUI and command line interfaces • Supermarket API simplifies and speeds up Berkshelf runs • Easier to formalize process of release cookbooks
  • 10. Sounds Great… How Do I Get My Own Private Supermarket?
  • 12. Requirements • Running Chef Server – need for oc-id (Chef Oauth Provider)
  • 13. Requirements • Running Chef Server – need for oc-id (Chef Oauth Provider) • Admin User Account on Chef Server
  • 14. Requirements • Running Chef Server – need for oc-id (Chef Oauth Provider) • Admin User Account on Chef Server • Key for User Account on Chef Server
  • 15. Requirements • Running Chef Server – need for oc-id (Chef Oauth Provider) • Admin User Account on Chef Server • Key for User Account on Chef Server • Fresh VM with 1 GB Memory (we use an Ubuntu instance on AWS)
  • 16. What is oc-id? • Chef’s Authentication/Authorization Service • Use credentials for Chef Server users to access other applications • Uses OAuth2 to talk to any applications authorized by Chef Server
  • 18. What is oc-id? User clicks “Sign In”
  • 19. What is oc-id? User redirected to Chef Server
  • 20. What is oc-id? User signs into Chef Server
  • 21. What is oc-id? User is redirected to Supermarket, now signed in!
  • 22. Preparing Your Chef Server • SSH into your Chef Server $ (your workstation) ssh user@your-chef-server
  • 23. Preparing Your Chef Server • Open up /etc/opscode/chef-server.rb $ (your chef server) sudo vim /etc/opscode/chef-server.rb
  • 24. Preparing Your Chef Server • Add this content, then save and exit the file oc_id[‘applications’] = { ‘supermarket’ => { ‘redirect_uri’ => ‘https://supermarket- hostname/auth/chef_oauth2/callback’ } }
  • 25. Preparing Your Chef Server • Reconfigure your Chef Server $ (your chef server) sudo chef-server-ctl reconfigure
  • 26. Preparing Your Chef Server • Look at /etc/opscode/oc-id-applications/supermarket.json – will need these values later $ (your chef server) sudo cat /etc/opscode/oc-id- applications/supermarket.json { “name”: “supermarket”, “uid”: “123……989” “secret”: “1234…897” “redirect uri”: “https://supermarket- hostname/auth/chef_oauth2/callback” }
  • 27. Preparing Your Supermarket • Will be using Irving Popovetsky’s supermarket-omnibus-cookbook https://github.com/irvingpop/supermarket-omnibus-cookbook • There IS another community cookbook, but uses an outdated method for installing Supermarket and is (as of 8/17) no longer supported by Chef • A blog post on converting from the old community cookbook to the new Supermarket cookbook is coming soon!
  • 28. • Good practice – using a wrapper cookbook with Irving’s cookbook • Will need to supply certain attributes through wrapper cookbook Preparing Your Supermarket
  • 29. Preparing Your Supermarket Wrapper Cookbook • Defines node[supemarket_omnibus] attributes
  • 30. Preparing Your Supermarket Wrapper Cookbook Omnibus Supermarket Cookbook • Defines node[supemarket_omnibus] attributes • Installs supermarket omnibus package • Writes node[supermarket_omnibus] attributes to /etc/supermarket/supermarket.json
  • 31. Preparing Your Supermarket Wrapper Cookbook Omnibus Supermarket Cookbook Omnibus Supermarket Package • Has internal Chef cookbook to run • Configures package using attributes defined in: /etc/supermarket/supermarket.json • supermarket-ctl reconfigure • Like running chef solo • Defines node[supemarket_omnibus] attributes • Installs supermarket omnibus package • Writes node[supermarket_omnibus] attributes to /etc/supermarket/supermarket.json
  • 32. Preparing Your Supermarket • Create wrapper cookbook on your local workstation $ (your workstation) chef generate cookbook my-supermarket-wrapper $ (your workstation) cd my-supermarket-wrapper
  • 33. Preparing Your Supermarket • Open your cookbook’s metadata.rb $ (your workstation) vim metadata.rb
  • 34. Preparing Your Supermarket • Add dependency on the supermarket-omnibus-cookbook to metadata.rb. Save and close file. depends ‘supermarket-omnibus-cookbook’
  • 35. Preparing Your Supermarket • Open your cookbook’s default recipe at recipes/default.rb $ (your workstation) vim recipes/default.rb
  • 36. Preparing Your Supermarket • Include the default recipe of the supermarket-omnibus-cookbook include_recipe ‘supermarket-omnibus-cookbook’
  • 37. Preparing Your Supermarket • Next, need to define attributes for your Supermarket and how it connects to Chef Server • Can hard code attributes in your wrapper cookbook’s default recipe • Better practice – place attributes in a databag, then reference it in your recipe • At minimum – must define • chef_server_url • chef_oauth2_app_id • chef_oauth2_secret
  • 38. Preparing Your Supermarket • Add attributes to wrapper cookbook’s default recipe # calling the data bag app = data_bag_item(‘apps’, ‘supermarket’)
  • 39. Preparing Your Supermarket • Add attributes to wrapper cookbook’s default recipe, save and close. # calling the data bag app = data_bag_item(‘apps’, ‘supermarket’) node.set[‘supermarket_omnibus’][‘chef_server_url’] = app[‘chef_server_url’] node.set['supermarket_omnibus']['chef_oauth2_app_id'] = app[‘app_id’] node.set['supermarket_omnibus']['chef_oauth2_secret'] = app[‘secret’]
  • 40. Preparing Your Supermarket • Download dependent cookbooks using Berkshelf $ (your workstation) berks install
  • 41. Preparing Your Supermarket • Then upload all dependent cookbooks to your Chef Server $ (your workstation) cd ~/.berkshelf/cookbooks $ (your workstation) knife cookbook upload -a
  • 42. Preparing Your Supermarket • Now upload your wrapper cookbook $ (your workstation) cd path/to/wrapper/cookbook/.. $ (your workstation) knife cookbook upload -a
  • 43. Preparing Your Supermarket • Bootstrap and register your Supermarket node with your Chef Server # For an Ubuntu node on AWS $ (your workstation) knife bootstrap ip_address –N supermarket- node –x ubuntu --sudo
  • 44. Preparing Your Supermarket • Bootstrap and register your Supermarket node with your Chef Server # For an Ubuntu node on AWS $ (your workstation) knife bootstrap ip_address –N supermarket- node –x ubuntu –-sudo # -N flag defines name of node
  • 45. Preparing Your Supermarket • Bootstrap and register your Supermarket node with your Chef Server # For an Ubuntu node on AWS $ (your workstation) knife bootstrap ip_address –N supermarket- node –x ubuntu –sudo # -N flag defines name of node # -x flag defines username to use (default on AWS is ubuntu)
  • 46. Preparing Your Supermarket • Bootstrap and register your Supermarket node with your Chef Server # For an Ubuntu node on AWS $ (your workstation) knife bootstrap ip_address –N supermarket- node –x ubuntu –sudo # -N flag defines name of node # -x flag defines username to use (default on AWS is ubuntu) # --sudo runs bootstrap command as sudo on node
  • 47. Preparing Your Supermarket • Edit your Supermarket node $ (your workstation) knife node edit supermarket-node
  • 48. Preparing Your Supermarket • Add wrapper cookbook’s default recipe to Supermarket node’s run list, save and quit file "run_list": [ “recipe[my_supermarket_wrapper::default]” ]
  • 49. Preparing Your Supermarket • SSH into your Supermarket node # For an Ubuntu instance on AWS $ (your workstation) ssh ubuntu@your-supermarket-node-public-dns
  • 50. Preparing Your Supermarket • Run Chef Client $ (your-supermarket-node) sudo chef-client
  • 52. Using Private Supermarket • Open up /etc/hosts on your local workstation $ (your workstation) vim /etc/hosts
  • 53. Using Private Supermarket • Add an entry for your Supermarket instance # Supermarket ip address Supermarket hostname 00.00.000.000 supermarket-hostname
  • 54. Using Private Supermarket • Visit Supermarket hostname in browser (accept SSL certificate) • Click the “Create Account” link
  • 55. Using Private Supermarket • Log into your Chef Server
  • 56. Using Private Supermarket • Authorize the app to use your Chef Server account
  • 57. Using Private Supermarket • And you’re in!
  • 58. Using Private Supermarket • Knife Supermarket Plugin Best current way to interact with a private Supermarket https://github.com/chef/knife-supermarket
  • 59. Using Private Supermarket • Install knife-supermarket # If using the Chef DK $ chef gem install knife-supermarket # If not using the Chef DK $ gem install knife-supermarket
  • 60. Using Private Supermarket • Open up knife.rb $ vim .chef/knife.rb
  • 61. Using Private Supermarket • Define supermarket site in knife.rb, then save and close. knife[:supermarket_site] = ‘https://your-private-supermarket’
  • 62. Using Private Supermarket • knife supermarket commands • same as knife cookbook site commands • see https://docs.chef.io/knife_cookbook_site.html
  • 63. Using Private Supermarket • Using knife supermarket share $ (your-workstation) knife supermarket share ‘my_cookbook’
  • 64. Using Private Supermarket • When you first use this command, might see an SSL error $ (your-workstation) knife supermarket share ‘my_cookbook’ Making tarball my_cookbook.tgz ERROR: Error uploading cookbook my_cookbook to the Opscode Cookbook Site: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed. Increase log verbosity (-VV) for more information.
  • 65. Using Private Supermarket • By default, Chef 12 enforces ssl when sharing cookbooks (Chef 11 did NOT do this) • Private Supermarkets (by default) use self-signed certificates • When using chef-client 12.4 or above, can fix error through fetching Supermarket’s ssl certificate • When using < chef-client 12.4, must set knife[:ssl_verification] = :verify_none
  • 66. Using Private Supermarket • When using >= Chef 12.4, fetch the ssl certificate of your Private Supermarket $ (your workstation) knife ssl fetch https://your-private-supermarket
  • 67. Using Private Supermarket • When using >= Chef 12.4, fetch the ssl certificate of your Private Supermarket $ (your workstation) knife ssl fetch https://your-private- supermarket WARNING: Certificates from your-private-supermarket will be fetched and placed in your trusted_cert directory (/home/ubuntu/.chef/trusted_certs). Knife has no means to verify these are the correct certificates. You should verify the authenticity of these certificates after downloading.
  • 68. Using Private Supermarket • Then check the ssl certificate $ (your-workstation) knife ssl check https://your-private-supermarket
  • 69. Using Private Supermarket • Then check the ssl certificate $ (your-workstation) knife ssl check https://your-private-supermarket [Connecting to host your-private-supermarket:443 Successfully verified certificates from `your-private-supermarket'
  • 70. Using Private Supermarket • Now try sharing the cookbook again $ (your-workstation) knife supermarket share ‘my_cookbook’
  • 71. Using Private Supermarket • Success! $ (your workstation) knife supermarket share ‘my_cookbook’ Generating metadata for my_cookbook from /tmp/chef-my_cookbook- build20150722-14976-8e8bdz/my_cookbook/metadata.rb Making tarball my_cookbook.tgz Upload complete!
  • 73. Managing Private Supermarket • You can manage services and other settings of your instance with supermarket- ctl
  • 74. Managing Private Supermarket • You can manage services and other settings of your instance with supermarket- ctl • Examples: supermarket-ctl reconfigure - does an internal Chef run based on the cookbooks included within the omnibus package supermarket-ctl make-admin user - makes a supermarket user an admin user supermarket-ctl restart - stops services if they are running, then starts them again
  • 75. Managing Private Supermarket • Restarting services on your Supermarket instance $ (your-supermarket-node) sudo supermarket-ctl restart ok: run: nginx: (pid 16737) 1s ok: run: postgresql: (pid 16742) 0s ok: run: rails: (pid 16751) 1s ok: run: redis: (pid 16755) 0s ok: run: sidekiq: (pid 16760) 0s
  • 76. Managing Private Supermarket • Monitoring URL: https://your_private_supermarket/status
  • 77. Other Tools You Can Use With Private Supermarket
  • 81. Dependency Resolution • Multiple sources can be defined in a Berksfile • Cookbook dependency resolution is performed from the top down. i.e. the source defined first in the Berksfile will be searched for a cookbook version before the second source and so on.
  • 83. Public Supermarket HA configuration
  • 84. Why? • Make better use of Amazon's services RDS, Elasticache and S3 • Make your company’s existing infrastructure better • Handle a heavy traffic load spike • Improve uptime
  • 86. Load Balancer Health Checks http://app1-staging-supermarket.internal/status { "status":"ok", ... }
  • 88. Postgres / RDS node.set['supermarket_omnibus']['postgresql']['enable'] = false node.set['supermarket_omnibus']['database']['user'] = 'supermarket' node.set['supermarket_omnibus']['database']['name'] = 'supermarket' node.set['supermarket_omnibus']['database']['host'] = 'yourcompany...rds.amazon.com' node.set['supermarket_omnibus']['database']['port'] = '5432' node.set['supermarket_omnibus']['database']['pool'] = '25' node.set['supermarket_omnibus']['database']['password'] = 'topsecretneverguessit'
  • 89. Cache
  • 90. Cache Configuration node.set['supermarket_omnibus']['redis']['enable'] = false node.set['supermarket_omnibus']['redis_url'] = 'redis://supermarket.yourcompany.use1.cache.amazonaws.com:6379'
  • 92. Cookbook Storage Methods • Local Filesystem • S3
  • 93. S3 Configuration node.set['supermarket_omnibus']['s3_access_key_id'] = 'XYZXYZXYZXYZXYZXYZ' node.set['supermarket_omnibus']['s3_bucket'] = 'supermarket' node.set['supermarket_omnibus']['s3_secret_access_key'] = 'wXYzwXYzwXYzwXYzwXYz'
  • 94. Additional Configuration Options • https://github.com/chef/omnibus- supermarket/blob/master/cookbooks/omnibus- supermarket/attributes/default.rb

Editor's Notes

  1. Intro – mention thoughts about live demo, will be going through slides at a somewhat quick pace, WILL post slides right after this talk
  2. Let’s go over the process of installing a private Supermarket
  3. [Go through who we are]
  4. Let’s go over why you might want a private Supermarket
  5. Last year, we released the public Supermarket as the new community cookbooks site, and the response was very positive
  6. But….
  7. Companies already had a couple of options for sharing internal cookbooks, but each had its own problems
  8. Companies that now use a private version of Supermarket have described it as…
  9. Let’s go over the process of installing a private Supermarket
  10. Define oc-id application hash First application is Supermarket Redirect URI – where chef server will redirect to the application after oc-id authenticates/authorizes an account
  11. Let’s look at this visually
  12. The wrapper cookbook will define attributes for your Supermarket instance, then
  13. It will pass those to the Omnibus Supermarket cookbook your cookbook is wrapping. This cookbook will install the supermarket omnibus package, then write the attributes to your Supermarket server in a file at /opt/supermarket/supermarket.json
  14. Omnibus Supermarket package Has own internal Chef cookbook to install and configure services required to run Supermarket Uses attributes in /opt/supermarket/supermarket.json, remember those attributes were placed in the file by the omnibus supermarket cookbook You run the internal Chef recipes by using the supermarket-ctl reconfigure command – which we’ll show an example of in just a moment. Supermarket-ctl reconfigure is a lot like running knife solo. It does an internal Chef run on the server with the Supermarket package installed.
  15. This will take a while to run. But once this completes successfully, my Supermarket server should be ready for use.
  16. You may be prompted to accept an SSL certificate. Supermarket, by default, uses a self signed ssl certificate and this generates warnings in some browsers. Go ahead and accept the certificate and you should be brought to your new private Supermarket.
  17. So that’s how you log into Supermarket. Now let’s go over how you can use your private Supermarket from the command line.
  18. Similar to knife cookbook site commands, but those currently do not support use with a private Supermarket. Knife Supermarket does.
  19. Turn over to Kirt
  20. This will take a while to run. But once this completes successfully, my Supermarket server should be ready for use.
  21. Turn over to Kirt
  22. The source defined first in the Berksfile will be searched for a cookbook version before the second source and so on.