SlideShare a Scribd company logo
1 of 96
Mandi Walls
Technical Community Manager for EMEA
@lnxchk
mandi@chef.io
https://www.habitat.sh/
http://slack.habitat.sh/
Ian Henry @Eeyun___ Habitat Community lead
EVERY business is a software business
We’re going to be a software
company with airplanes.
– CIO, Alaska Airlines
We Run Infrastructure
To Run Applications
That the Business Requires
How Do We Run Applications?
• On a computer
• With an OS
• And some libraries
• And some configuration
• And some way to start it and stop it
That isn’t managing
complexity.
It is Adding to it.
Or at least just moving it
around.
So. Habitat.
• Reduce snowflakeness
• Support microservices
• Manage container creep
https://www.bonanza.com/listings/Premier-Food-Storage-Containers-20-Piece-Set-Grey/443972348
Modern Applications Are Trending Toward
• Immutability
• Platform agnosticism
• Complexity reduction
• Scalability
https://amazingmusthaves.com/products/steel-insulated-food-containers/
Ways of Working with Habitat
• Artifacts run themselves via the supervisor
• Export to Docker
• Link your github to habitat builder and let us do the
work
• Build plans from scratch or leverage scaffolding
Habitat Goals
• Defer some decisions to runtime
• Do clean room builds
• Repeatable builds
• Distro agnostic packaging system
• Service runtime and discovery
• Configuration exposed via API
• Packages are signed by the system
Single Artifact Demo - Habitatize
• Ruby app with HTTP interface, ImageMagick
• Built via scaffolding
• Run locally
• Login to your machine
User: velocity
Pass: London2017
Run the Package
• sudo hab start learn-chef/habitatize -
-channel unstable
• Open http://{your machine IP}:8000 in a web
browser
Upload a Pic!
What’s in This Thing?
• https://github.com/burtlo/habitatize
pkg_name=habitatize
pkg_origin=franklinwebber
pkg_scaffolding="core/scaffolding-ruby"
pkg_version="1.0.0"
pkg_deps=(franklinwebber/imagemagick)
Basic Parts of a Simple Habitat App
• Your application code
• A plan file – can be as short as a few lines
Include dependencies or use a scaffolding package
• Habitat installation for running it
(and build, we’ll do that later)
• That’s it!
• Stop with
sudo hab stop learn-chef/habitatize
Dependencies?
Community
• Teams and individuals contribute packages to
builder
• The “core” packages are maintained by the Habitat
team
• You can use any public package on builder for your
dependencies
• Packages are libraries, runtimes, applications
Habitat and Builder
Application Automation Build Machine
Lab: Habitat and Builder
• The fastest way to get packages out of the Habitat
workflow is with Builder
• SaaS for automated build and publish
• Code -> Github -> Builder -> Docker Hub
• You’ll need Github and Docker Hub accounts
No worries, you can get them as we go along
Our Sample Application
• https://github.com/habitat-sh/sample-node-app
• Fork this to your github account
Sign in to Builder
• https://bldr.habitat.sh/#/sign-in
Origins
• Are like organizations for grouping habitat
applications
• You can publish to multiple origins as long as you
have the keys – we’ll talk about that later
• For now, create a new unique origin to use
“username-velocitylondon”
• Origins can be public or private
For this lab it doesn’t matter
Make the App Our Own
• In github, edit inline in the browser
• https://github.com/YOU/sample-node-
app/blob/master/habitat/plan.sh
• Change
pkg_origin
To your new origin
• Commit changes, add a comment if you want
Add Habitat Builder
• As an app in github
• https://github.com/apps/habitat-builder
• Install
• Choose repositories
All, or limit to just the sample-node-app repo
Add Docker Hub Integration
• We’ll link Docker Hub to our origin on habitat builder
Docker Hub
• https://hub.docker.com/
• Sign up for an account if you don’t have one
• Each time you create a new origin, you’ll need to
hook it to Docker Hub
Automatic Builds of Our Sample App
• Habitat Builder will watch our repo for changes
• New builds of our app will then initialize
• We connect Builder to github from “Packages” on
the Builder page
Turn on “Publish to Docker Hub”
Build It!
Our App Shows Up In Docker Hub
• Builder retrieved our code from github
• Built the latest version
• Exported to a Docker container
• Published to Docker Hub
Run Our App with Docker
sudo docker pull your-docker-org/your-
docker-repo
sudo run -it -p 8000:8000 your-docker-
org/your-docker-repo
Open {your IP}:8000/ in a browser
(Make sure you stopped habitatize)
sudo hab stop learn-chef/habitatize
Make a New Version
• On github, update your plan.sh file to show a new
version of your app – 1.0.2
• Commit your change
• Builder will pick up your change and start a new
build
Habitat Studio
Build Locally
Application Life
Source
Code
Repo
Artifact
Bare Metal
Container
Cloud Instance
VM
Artifact
Repo
Habitat Studio
• Provides a busy box clean
room for your app
• Plus a set of tools for
manipulating and running
harts
Why the Studio?
• Declare explicit dependencies
• Ship exactly what you need
• Sign your packages and store artifacts
Habitat Plans
• Plan files are where you put together your builds
• They are bash
• Plans are versioned and can be shared on the
habitat depot
• Plans have multiple sections for your needs
What’s In A Plan?
pkg_origin=firstnamelastname
pkg_name=national-parks
pkg_description="A sample JavaEE Web app deployed in Tomcat8"
pkg_version=0.1.3
pkg_maintainer="First Last <you@example.com>"
pkg_license=('Apache-2.0')
pkg_source=https://github.com/billmeyer/national-parks/archive/v${pkg_version}.tar.gz
pkg_shasum=56a70d7fc432ad275ba256150bd010ce2581346c848e40ddc0fd0f62c5b17a54
pkg_upstream_url=https://github.com/billmeyer/national-parks
pkg_deps=(core/tomcat8 billmeyer/mongodb)
pkg_build_deps=(core/git core/maven)
pkg_expose=(8080)
pkg_svc_user="root"
pkg_svc_group="root"
Plans Have Callbacks
Shell functions executed when building
artifacts:
• do_begin()
• do_download()
• do_verify()
• do_check()
• do_clean()
• do_unpack()
• do_prepare()
• do_build()
• do_install()
• do_strip()
• do_end()
Variables
• HAB_CACHE_SRC_PATH
The default path where source archives are downloaded, extracted, &
compiled.
• ${pkg_dirname}
Set to ${pkg_name}-${pkg_version} by default. If a .tar file extracts to a
directory that's different from the filename, then you would need to
override this value to match the directory name created during
extraction.
• ${pkg_filename}
Set manually in the plan.sh
• ${pkg_version}
Set manually in the plan.sh
Habitat Tools for Dependencies
• hab pkg path team/app
• You can have build deps and runtime deps
• Build deps get into your hab studio when you are
building
• Runtime deps come along into your hart
Keep artifacts small and under
control!
Scaffolding, like for habitatize
• Default core-built dependencies for common
runtimes
• Ruby and Node so far
Go, Python, Java on the way!
pkg_name=MY_APP
pkg_origin=MY_ORIGIN
pkg_version=MY_VERSION
pkg_scaffolding=core/scaffolding-ruby
What Gets Built?
• Everything. Sort of.
• Build your own apps from source
• Decide if you want upstream binaries or source for
things like runtime
You don’t have to build Tomcat, but you can
• For COTS, use the binaries and skip steps
Habitat Hooks
• Travels with the app
• Tell the app how to start, and if there is something
that needs to be done before start
• Let’s look at a run hook file
Run Hook for Tomcat
#!/bin/bash
exec 2>&1
echo "Starting Apache Tomcat"
export JAVA_HOME=$(hab pkg path core/jdk8)
export TOMCAT_HOME="$(hab pkg path core/tomcat8)/tc"
source {{pkg.svc_config_path}}/catalina-opts.conf
echo "$CATALINA_OPTS=$CATALINA_OPTS"
cp "$(hab pkg path {{pkg.origin}}/{{pkg.name}})/{{pkg.name}}.war" "$TOMCAT_HOME/webapps/"
exec ${TOMCAT_HOME}/bin/catalina.sh run
Configuration
• Can be manipulated at runtime
• Also travels with the app
• Provides variable substitution and templating
A catalina-opts File
{{~#if bind.database}}
{{~#each bind.database.members}}
export CATALINA_OPTS="-
DMONGODB_SERVICE_HOST={{address}} -
DMONGODB_SERVICE_PORT={{port}}"
{{~/each}}
{{~/if}}
Builder
• You can share plans with builder, and other hab
users share theirs
• Has team namespacing – our origin
• The core plans are those built by the Habitat team
• https://app.habitat.sh/
Caveat - Internet
• You can build your own stuff inside your own
network, sort of, when it’s all on one machine
• This isn’t the best way to use Habitat
• You’ll want internet connectivity on your build box
and on the hosts running habitat artifacts
• Builder provides private origins, linked to github
users
Build Output
• By default, it’s a hart – a compressed tarball with
some metadata and a signature
• The hart itself it runnable
• You can export to other formats, like Docker
containers like we saw eariler
Runtime
• The hab runtime includes management, service
discovery, other features
• The habs in your application create a mesh so they
can talk to each other
• You can even update your application via the mesh
without restarting every application manually
Running a Hart
sudo hab start learn-chef/habitatize --
channel unstable
sudo hab start nathenharvey/national-parks --
listen-gossip 0.0.0.0:9639 --listen-http
0.0.0.0:9632 --peer 127.0.0.1 –bind
database:mongodb.default
Setup
• On your remote host
• hab setup
• Set up a default origin? Yes
Enter what you used in builder – username-velocity
• Create a key – Yes
• Github access token!
Github Access Token
• Go to your account on github
• Select “settings” from your account on the top right
• Click “Developer Settings” on the left bar
• Click “Personal access tokens” on the left bar
• “Generate new token” button
• Description “habitat” or whatever
Select read:org and user:email
• Generate Token
Hab Setup continued
• Copy the github access token into the hab setup
HAB_AUTH_TOKEN
• Your github auth token
• Export as an environment variable
• Can be added to ~/.bashrc
• export HAB_AUTH_TOKEN=3db7f……yourtoken
Add Keys
• We generated new keys
• We need to add them to Builder
• From your host, run
hab origin key upload –s {YOUR ORIGIN}
A place to work
git clone
https://github.com/YOU/sample-node-
app.git
cd sample-node-app
• Your apps have a habitat/ subdirectory for hab-
related files
Hab Studio
• hab studio enter
• build
• hab svc start ORIGIN/sample-node-app
Habitat Supervisor
• Keeps an eye on your applications
• Also provides and API for viewing what’s going on
with the apps running in the supervisor
• http://{Your IP}:9631/services
• It’s running now for you as part of the studio, but
doesn’t need the studio to run
When you exit the studio, it will shut down
• Also allows for applications to connect to each other
Two-Tier Application: National Parks
• Java on Tomcat with MongoDB
• https://blog.chef.io/2016/09/07/deploy-java-web-
app-on-tomcat-8-with-habitat/
• You’ll want a couple terminals open to your host
App
Decomposing into Habitat
• Microservice architectures lend themselves well to
Habitat
Every service becomes a hab package
• For generic services like databases, the initial
package should be very basic
• Your application layer or a separate package
initializes the data
MongoDB
• Already built – we’re just going to use it
sudo hab start nathenharvey/mongodb --
channel unstable
https://bldr.habitat.sh/#/pkgs/nathenha
rvey/mongodb/latest
Java App
• https://bldr.habitat.sh/#/pkgs/nathenharvey/national-
parks/latest
• Let’s look at the plan.sh a bit
Where Is the Code Coming From
• This app isn’t hooked into the Builder pipeline
• The source code is downloaded from github into the
studio when the package is built
• A checksum can be included in the plan.sh
pkg_deps and pkg_build_deps
• Build deps are present in the studio or build
environment but don’t make it into the package
• In this case, we’re not taking Maven with us!
• Also notice the dependency on mongodb!
Finding Stuff that Lives in Other Packages
• Check out the setting for JAVA_HOME
• export JAVA_HOME=$(hab pkg path
core/jdk8)
• Java will be included in our package via the
dependencies
• It arrives via another habitat package
• The filesystem locations are different, so we have to
query for where java will live
Let’s Start the App
• sudo hab start nathenharvey/national-
parks --channel unstable
• The log output in this case will go to the MongoDB
screen (STDOUT for the supervisor)
hab-sup(MR): Unable to start nathenharvey/national-
parks, hab-
sup(SS)[src/manager/service/spec.rs:208:23]: Missing
required bind(s), database
Supervisor Can Help Us
Service
Discovery
Service
Groups
Service Groups
• Applications running in the supervisor belong to
service groups
mongodb.default(SR): Configuration recompiled
mongodb.default(SR): Initializing
mongodb.default(SV): Starting service as user=hab,
group=hab
• When connecting services, use the service group
• Groups can be 1 or N instances of an application
Uh Oh
national-parks.default(SR): Initializing
national-parks.default hook[init]:(HK): Seeding Mongo Collection
national-parks.default hook[init]:(HK): $MONGOIMPORT_OPTS=--host= --
port=27017
national-parks.default hook[init]:(HK): 2017-10-17T17:52:35.106+0000
connected to: localhost:27017
national-parks.default hook[init]:(HK): 2017-10-17T17:52:35.106+0000
dropping: demo.nationalparks
national-parks.default hook[init]:(HK): 2017-10-17T17:52:35.109+0000 Failed:
not authorized on demo to execute command { drop: "nationalparks" }
national-parks.default hook[init]:(HK): 2017-10-17T17:52:35.109+0000
imported 0 documents
national-parks.default(HK): Initialization failed! 'init' exited with status code 1
What is This?
• Our app brings along its seed data
• It needs permissions to load that data into
MongoDB
• The app isn’t authorized to do that!
YOLO!
• We’re going to open up mongo to the wild. It’s fine.
• Let’s see how MongoDB is currently configured
hab sup config nathenharvey/mongodb
• In the middle are some security settings
[mongod.security]
cluster_auth_mode = "keyFile"
javascript_enabled = true
key_file = ""
Tunables
• The supervisor allows us to update application
config at runtime
• Those mongod.security settings can be changed on
the fly
Make a new tunable toml
hab sup config nathenharvey/mongodb >
user.toml
Edit user.toml
• Around line 46 are the mongod.security settings
• Update cluster_auth_mode to “”
46 [mongod.security]
47 authorization = "disabled”
48 cluster_auth_mode = "”
49 javascript_enabled = true
50 key_file = ""
hab config apply
• Load this new config into the running mongodb:
sudo hab config apply mongodb.default 2 user.toml
• The serial number just has to increase; it’s not
otherwise meaningful
• Must be valid configuration
• The app will reload
Now try the Java again
sudo hab start nathenharvey/national-
parks --peer 127.0.0.1 --bind
database:mongodb.default
Check the Output
national-parks.default(O): 17-Oct-2017 18:07:58.322 INFO
[main] org.apache.catalina.startup.Catalina.load
Initialization processed in 525 ms
national-parks.default(O): 17-Oct-2017 18:07:58.348 INFO
[main] org.apache.catalina.core.StandardService.startInternal
Starting service Catalina
national-parks.default(O): 17-Oct-2017 18:07:58.348 INFO
[main] org.apache.catalina.core.StandardEngine.startInternal
Starting Servlet Engine: Apache Tomcat/8.5.9
national-parks.default(O): 17-Oct-2017 18:07:58.367 INFO
[localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployWAR Deploying
web application archive
/hab/pkgs/core/tomcat8/8.5.9/20170215223900/tc/webapps/nation
Check the Browser!
• http://{Your IP}:8080/national-parks/
Habitat Info
• http://{Your IP}:9631/services
Other Places to Find Hints
• https://github.com/habitat-sh/core-plans/
• The plan files for the core packages
• Good for “how do I do x?”
Join Us!
• On Slack!
http://slack.habitat.sh
• Online! With Tutorials!
https://www.habitat.sh/
• On Github!
https://github.com/habitat-sh
• This talk
Try it out!
Share your story!
Get some swag!!
goo.gl/WrHQTU
Other References
• Summary on The New Stack
https://thenewstack.io/chef-habitat-addresses-issues-
moving-containers-production
• Our YouTube Channel
https://www.youtube.com/user/getchef

More Related Content

What's hot

January OpenNTF Webinar: 4D - Domino Docker Deep Dive
January OpenNTF Webinar: 4D - Domino Docker Deep DiveJanuary OpenNTF Webinar: 4D - Domino Docker Deep Dive
January OpenNTF Webinar: 4D - Domino Docker Deep DiveHoward Greenberg
 
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...Edward Wilde
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to ChefKnoldus Inc.
 
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...Simplilearn
 
Microservices: The Right Way
Microservices: The Right WayMicroservices: The Right Way
Microservices: The Right WayDaniel Woods
 
February OpenNTF Webinar: Introduction to Ansible for Newbies
February OpenNTF Webinar: Introduction to Ansible for NewbiesFebruary OpenNTF Webinar: Introduction to Ansible for Newbies
February OpenNTF Webinar: Introduction to Ansible for NewbiesHoward Greenberg
 
Enterprise Docker Requires a Private Registry
Enterprise Docker Requires a Private RegistryEnterprise Docker Requires a Private Registry
Enterprise Docker Requires a Private RegistryChris Riley ☁
 
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1Howard Greenberg
 
August OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedAugust OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedHoward Greenberg
 
Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Ryan Cuprak
 
Building a PaaS using Chef
Building a PaaS using ChefBuilding a PaaS using Chef
Building a PaaS using ChefShaun Domingo
 
Ransack, an Application Built on Ansible's API for Rackspace -- AnsibleFest N...
Ransack, an Application Built on Ansible's API for Rackspace -- AnsibleFest N...Ransack, an Application Built on Ansible's API for Rackspace -- AnsibleFest N...
Ransack, an Application Built on Ansible's API for Rackspace -- AnsibleFest N...Paul Durivage
 
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
 
How kubernetes works community, velocity, and contribution - osls 2017 (1)
How kubernetes works  community, velocity, and contribution - osls 2017 (1)How kubernetes works  community, velocity, and contribution - osls 2017 (1)
How kubernetes works community, velocity, and contribution - osls 2017 (1)Brian Grant
 
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...Simplilearn
 
Overview of Chef - Fundamentals Webinar Series Part 1
Overview of Chef - Fundamentals Webinar Series Part 1Overview of Chef - Fundamentals Webinar Series Part 1
Overview of Chef - Fundamentals Webinar Series Part 1Chef
 
Automating your infrastructure with Chef
Automating your infrastructure with ChefAutomating your infrastructure with Chef
Automating your infrastructure with ChefJohn Ewart
 
July OpenNTF Webinar - HCL Presents Keep, a new API for Domino
July OpenNTF Webinar - HCL Presents Keep, a new API for DominoJuly OpenNTF Webinar - HCL Presents Keep, a new API for Domino
July OpenNTF Webinar - HCL Presents Keep, a new API for DominoHoward Greenberg
 

What's hot (20)

January OpenNTF Webinar: 4D - Domino Docker Deep Dive
January OpenNTF Webinar: 4D - Domino Docker Deep DiveJanuary OpenNTF Webinar: 4D - Domino Docker Deep Dive
January OpenNTF Webinar: 4D - Domino Docker Deep Dive
 
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
 
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
 
Microservices: The Right Way
Microservices: The Right WayMicroservices: The Right Way
Microservices: The Right Way
 
February OpenNTF Webinar: Introduction to Ansible for Newbies
February OpenNTF Webinar: Introduction to Ansible for NewbiesFebruary OpenNTF Webinar: Introduction to Ansible for Newbies
February OpenNTF Webinar: Introduction to Ansible for Newbies
 
Enterprise Docker Requires a Private Registry
Enterprise Docker Requires a Private RegistryEnterprise Docker Requires a Private Registry
Enterprise Docker Requires a Private Registry
 
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1
OpNovember Water Cooler Talk: The Mystery of Domino on Docker - Part 1
 
August OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedAugust OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub Explained
 
Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and
 
Learning chef
Learning chefLearning chef
Learning chef
 
Building a PaaS using Chef
Building a PaaS using ChefBuilding a PaaS using Chef
Building a PaaS using Chef
 
Ransack, an Application Built on Ansible's API for Rackspace -- AnsibleFest N...
Ransack, an Application Built on Ansible's API for Rackspace -- AnsibleFest N...Ransack, an Application Built on Ansible's API for Rackspace -- AnsibleFest N...
Ransack, an Application Built on Ansible's API for Rackspace -- AnsibleFest N...
 
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
 
How kubernetes works community, velocity, and contribution - osls 2017 (1)
How kubernetes works  community, velocity, and contribution - osls 2017 (1)How kubernetes works  community, velocity, and contribution - osls 2017 (1)
How kubernetes works community, velocity, and contribution - osls 2017 (1)
 
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...
Chef Tutorial | Chef Tutorial For Beginners | DevOps Chef Tutorial | DevOps T...
 
Overview of Chef - Fundamentals Webinar Series Part 1
Overview of Chef - Fundamentals Webinar Series Part 1Overview of Chef - Fundamentals Webinar Series Part 1
Overview of Chef - Fundamentals Webinar Series Part 1
 
Automating your infrastructure with Chef
Automating your infrastructure with ChefAutomating your infrastructure with Chef
Automating your infrastructure with Chef
 
Introduction to chef
Introduction to chefIntroduction to chef
Introduction to chef
 
July OpenNTF Webinar - HCL Presents Keep, a new API for Domino
July OpenNTF Webinar - HCL Presents Keep, a new API for DominoJuly OpenNTF Webinar - HCL Presents Keep, a new API for Domino
July OpenNTF Webinar - HCL Presents Keep, a new API for Domino
 

Similar to Modern Applications with Habitat

habitat at docker bud
habitat at docker budhabitat at docker bud
habitat at docker budMandi Walls
 
Cocoapods in action
Cocoapods in actionCocoapods in action
Cocoapods in actionHan Qin
 
How bigtop leveraged docker for build automation and one click hadoop provis...
How bigtop leveraged docker for build automation and  one click hadoop provis...How bigtop leveraged docker for build automation and  one click hadoop provis...
How bigtop leveraged docker for build automation and one click hadoop provis...Evans Ye
 
Scaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on OpenstackScaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on OpenstackBobby DeVeaux, DevOps Consultant
 
DockerCon 15 Keynote - Day 2
DockerCon 15 Keynote - Day 2DockerCon 15 Keynote - Day 2
DockerCon 15 Keynote - Day 2Docker, Inc.
 
How bigtop leveraged docker for build automation and one click hadoop provis...
How bigtop leveraged docker for build automation and  one click hadoop provis...How bigtop leveraged docker for build automation and  one click hadoop provis...
How bigtop leveraged docker for build automation and one click hadoop provis...Evans Ye
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Michael Lihs
 
Habitat at LinuxLab IT
Habitat at LinuxLab ITHabitat at LinuxLab IT
Habitat at LinuxLab ITMandi Walls
 
Neev Open Source Contributions
Neev Open Source ContributionsNeev Open Source Contributions
Neev Open Source ContributionsNeev Technologies
 
Making sense of Apache Bigtop's role in ODPi and how it matters to Apache Apex
Making sense of Apache Bigtop's role in ODPi and how it matters to Apache ApexMaking sense of Apache Bigtop's role in ODPi and how it matters to Apache Apex
Making sense of Apache Bigtop's role in ODPi and how it matters to Apache ApexApache Apex
 
Stop making, start composing - Using Composer for Drupal development
Stop making, start composing - Using Composer for Drupal developmentStop making, start composing - Using Composer for Drupal development
Stop making, start composing - Using Composer for Drupal developmentkaspergarnaes
 
Week 8 lecture material
Week 8 lecture materialWeek 8 lecture material
Week 8 lecture materialAnkit Gupta
 
Github for Serious Business Professional
Github for Serious Business ProfessionalGithub for Serious Business Professional
Github for Serious Business Professionalzwheller
 
Containers and Microservices for Realists
Containers and Microservices for RealistsContainers and Microservices for Realists
Containers and Microservices for RealistsOracle Developers
 
Containers and microservices for realists
Containers and microservices for realistsContainers and microservices for realists
Containers and microservices for realistsKarthik Gaekwad
 
Cloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment WorkshopCloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment WorkshopManuel Garcia
 
Modern Web-site Development Pipeline
Modern Web-site Development PipelineModern Web-site Development Pipeline
Modern Web-site Development PipelineGlobalLogic Ukraine
 
LuisRodriguezLocalDevEnvironmentsDrupalOpenDays
LuisRodriguezLocalDevEnvironmentsDrupalOpenDaysLuisRodriguezLocalDevEnvironmentsDrupalOpenDays
LuisRodriguezLocalDevEnvironmentsDrupalOpenDaysLuis Rodríguez Castromil
 

Similar to Modern Applications with Habitat (20)

habitat at docker bud
habitat at docker budhabitat at docker bud
habitat at docker bud
 
Cocoapods in action
Cocoapods in actionCocoapods in action
Cocoapods in action
 
How bigtop leveraged docker for build automation and one click hadoop provis...
How bigtop leveraged docker for build automation and  one click hadoop provis...How bigtop leveraged docker for build automation and  one click hadoop provis...
How bigtop leveraged docker for build automation and one click hadoop provis...
 
Scaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on OpenstackScaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on Openstack
 
DockerCon 15 Keynote - Day 2
DockerCon 15 Keynote - Day 2DockerCon 15 Keynote - Day 2
DockerCon 15 Keynote - Day 2
 
How bigtop leveraged docker for build automation and one click hadoop provis...
How bigtop leveraged docker for build automation and  one click hadoop provis...How bigtop leveraged docker for build automation and  one click hadoop provis...
How bigtop leveraged docker for build automation and one click hadoop provis...
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
Habitat at LinuxLab IT
Habitat at LinuxLab ITHabitat at LinuxLab IT
Habitat at LinuxLab IT
 
Neev Open Source Contributions
Neev Open Source ContributionsNeev Open Source Contributions
Neev Open Source Contributions
 
Making sense of Apache Bigtop's role in ODPi and how it matters to Apache Apex
Making sense of Apache Bigtop's role in ODPi and how it matters to Apache ApexMaking sense of Apache Bigtop's role in ODPi and how it matters to Apache Apex
Making sense of Apache Bigtop's role in ODPi and how it matters to Apache Apex
 
Stop making, start composing - Using Composer for Drupal development
Stop making, start composing - Using Composer for Drupal developmentStop making, start composing - Using Composer for Drupal development
Stop making, start composing - Using Composer for Drupal development
 
R meetup 20161011v2
R meetup 20161011v2R meetup 20161011v2
R meetup 20161011v2
 
Why to docker
Why to dockerWhy to docker
Why to docker
 
Week 8 lecture material
Week 8 lecture materialWeek 8 lecture material
Week 8 lecture material
 
Github for Serious Business Professional
Github for Serious Business ProfessionalGithub for Serious Business Professional
Github for Serious Business Professional
 
Containers and Microservices for Realists
Containers and Microservices for RealistsContainers and Microservices for Realists
Containers and Microservices for Realists
 
Containers and microservices for realists
Containers and microservices for realistsContainers and microservices for realists
Containers and microservices for realists
 
Cloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment WorkshopCloud Foundry: Hands-on Deployment Workshop
Cloud Foundry: Hands-on Deployment Workshop
 
Modern Web-site Development Pipeline
Modern Web-site Development PipelineModern Web-site Development Pipeline
Modern Web-site Development Pipeline
 
LuisRodriguezLocalDevEnvironmentsDrupalOpenDays
LuisRodriguezLocalDevEnvironmentsDrupalOpenDaysLuisRodriguezLocalDevEnvironmentsDrupalOpenDays
LuisRodriguezLocalDevEnvironmentsDrupalOpenDays
 

More from Mandi Walls

DOD Raleigh Gamedays with Chaos Engineering.pdf
DOD Raleigh Gamedays with Chaos Engineering.pdfDOD Raleigh Gamedays with Chaos Engineering.pdf
DOD Raleigh Gamedays with Chaos Engineering.pdfMandi Walls
 
Addo reducing trauma in organizations with SLOs and chaos engineering
Addo  reducing trauma in organizations with SLOs and chaos engineeringAddo  reducing trauma in organizations with SLOs and chaos engineering
Addo reducing trauma in organizations with SLOs and chaos engineeringMandi Walls
 
Full Service Ownership
Full Service OwnershipFull Service Ownership
Full Service OwnershipMandi Walls
 
PagerDuty: Best Practices for On Call Teams
PagerDuty: Best Practices for On Call TeamsPagerDuty: Best Practices for On Call Teams
PagerDuty: Best Practices for On Call TeamsMandi Walls
 
InSpec at DevOps ATL Meetup January 22, 2020
InSpec at DevOps ATL Meetup January 22, 2020InSpec at DevOps ATL Meetup January 22, 2020
InSpec at DevOps ATL Meetup January 22, 2020Mandi Walls
 
Prescriptive Security with InSpec - All Things Open 2019
Prescriptive Security with InSpec - All Things Open 2019Prescriptive Security with InSpec - All Things Open 2019
Prescriptive Security with InSpec - All Things Open 2019Mandi Walls
 
Using Chef InSpec for Infrastructure Security
Using Chef InSpec for Infrastructure SecurityUsing Chef InSpec for Infrastructure Security
Using Chef InSpec for Infrastructure SecurityMandi Walls
 
Adding Security to Your Workflow With InSpec - SCaLE17x
Adding Security to Your Workflow With InSpec - SCaLE17xAdding Security to Your Workflow With InSpec - SCaLE17x
Adding Security to Your Workflow With InSpec - SCaLE17xMandi Walls
 
BuildStuff.LT 2018 InSpec Workshop
BuildStuff.LT 2018 InSpec WorkshopBuildStuff.LT 2018 InSpec Workshop
BuildStuff.LT 2018 InSpec WorkshopMandi Walls
 
InSpec Workshop at Velocity London 2018
InSpec Workshop at Velocity London 2018InSpec Workshop at Velocity London 2018
InSpec Workshop at Velocity London 2018Mandi Walls
 
DevOpsDays InSpec Workshop
DevOpsDays InSpec WorkshopDevOpsDays InSpec Workshop
DevOpsDays InSpec WorkshopMandi Walls
 
Adding Security and Compliance to Your Workflow with InSpec
Adding Security and Compliance to Your Workflow with InSpecAdding Security and Compliance to Your Workflow with InSpec
Adding Security and Compliance to Your Workflow with InSpecMandi Walls
 
InSpec - June 2018 at Open28.be
InSpec - June 2018 at Open28.beInSpec - June 2018 at Open28.be
InSpec - June 2018 at Open28.beMandi Walls
 
Ingite Slides for InSpec
Ingite Slides for InSpecIngite Slides for InSpec
Ingite Slides for InSpecMandi Walls
 
InSpec Workshop DevSecCon 2017
InSpec Workshop DevSecCon 2017InSpec Workshop DevSecCon 2017
InSpec Workshop DevSecCon 2017Mandi Walls
 
InSpec Workflow for DevOpsDays Riga 2017
InSpec Workflow for DevOpsDays Riga 2017InSpec Workflow for DevOpsDays Riga 2017
InSpec Workflow for DevOpsDays Riga 2017Mandi Walls
 
Habitat at SRECon
Habitat at SREConHabitat at SRECon
Habitat at SREConMandi Walls
 
InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017Mandi Walls
 
Adding Security to Your Workflow with InSpec (MAY 2017)
Adding Security to Your Workflow with InSpec (MAY 2017)Adding Security to Your Workflow with InSpec (MAY 2017)
Adding Security to Your Workflow with InSpec (MAY 2017)Mandi Walls
 
Configuration Management is Old and Boring
Configuration Management is Old and BoringConfiguration Management is Old and Boring
Configuration Management is Old and BoringMandi Walls
 

More from Mandi Walls (20)

DOD Raleigh Gamedays with Chaos Engineering.pdf
DOD Raleigh Gamedays with Chaos Engineering.pdfDOD Raleigh Gamedays with Chaos Engineering.pdf
DOD Raleigh Gamedays with Chaos Engineering.pdf
 
Addo reducing trauma in organizations with SLOs and chaos engineering
Addo  reducing trauma in organizations with SLOs and chaos engineeringAddo  reducing trauma in organizations with SLOs and chaos engineering
Addo reducing trauma in organizations with SLOs and chaos engineering
 
Full Service Ownership
Full Service OwnershipFull Service Ownership
Full Service Ownership
 
PagerDuty: Best Practices for On Call Teams
PagerDuty: Best Practices for On Call TeamsPagerDuty: Best Practices for On Call Teams
PagerDuty: Best Practices for On Call Teams
 
InSpec at DevOps ATL Meetup January 22, 2020
InSpec at DevOps ATL Meetup January 22, 2020InSpec at DevOps ATL Meetup January 22, 2020
InSpec at DevOps ATL Meetup January 22, 2020
 
Prescriptive Security with InSpec - All Things Open 2019
Prescriptive Security with InSpec - All Things Open 2019Prescriptive Security with InSpec - All Things Open 2019
Prescriptive Security with InSpec - All Things Open 2019
 
Using Chef InSpec for Infrastructure Security
Using Chef InSpec for Infrastructure SecurityUsing Chef InSpec for Infrastructure Security
Using Chef InSpec for Infrastructure Security
 
Adding Security to Your Workflow With InSpec - SCaLE17x
Adding Security to Your Workflow With InSpec - SCaLE17xAdding Security to Your Workflow With InSpec - SCaLE17x
Adding Security to Your Workflow With InSpec - SCaLE17x
 
BuildStuff.LT 2018 InSpec Workshop
BuildStuff.LT 2018 InSpec WorkshopBuildStuff.LT 2018 InSpec Workshop
BuildStuff.LT 2018 InSpec Workshop
 
InSpec Workshop at Velocity London 2018
InSpec Workshop at Velocity London 2018InSpec Workshop at Velocity London 2018
InSpec Workshop at Velocity London 2018
 
DevOpsDays InSpec Workshop
DevOpsDays InSpec WorkshopDevOpsDays InSpec Workshop
DevOpsDays InSpec Workshop
 
Adding Security and Compliance to Your Workflow with InSpec
Adding Security and Compliance to Your Workflow with InSpecAdding Security and Compliance to Your Workflow with InSpec
Adding Security and Compliance to Your Workflow with InSpec
 
InSpec - June 2018 at Open28.be
InSpec - June 2018 at Open28.beInSpec - June 2018 at Open28.be
InSpec - June 2018 at Open28.be
 
Ingite Slides for InSpec
Ingite Slides for InSpecIngite Slides for InSpec
Ingite Slides for InSpec
 
InSpec Workshop DevSecCon 2017
InSpec Workshop DevSecCon 2017InSpec Workshop DevSecCon 2017
InSpec Workshop DevSecCon 2017
 
InSpec Workflow for DevOpsDays Riga 2017
InSpec Workflow for DevOpsDays Riga 2017InSpec Workflow for DevOpsDays Riga 2017
InSpec Workflow for DevOpsDays Riga 2017
 
Habitat at SRECon
Habitat at SREConHabitat at SRECon
Habitat at SRECon
 
InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017
 
Adding Security to Your Workflow with InSpec (MAY 2017)
Adding Security to Your Workflow with InSpec (MAY 2017)Adding Security to Your Workflow with InSpec (MAY 2017)
Adding Security to Your Workflow with InSpec (MAY 2017)
 
Configuration Management is Old and Boring
Configuration Management is Old and BoringConfiguration Management is Old and Boring
Configuration Management is Old and Boring
 

Recently uploaded

What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsMehedi Hasan Shohan
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 

Recently uploaded (20)

What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software Solutions
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 

Modern Applications with Habitat

  • 1.
  • 2. Mandi Walls Technical Community Manager for EMEA @lnxchk mandi@chef.io https://www.habitat.sh/ http://slack.habitat.sh/ Ian Henry @Eeyun___ Habitat Community lead
  • 3. EVERY business is a software business We’re going to be a software company with airplanes. – CIO, Alaska Airlines
  • 4.
  • 5. We Run Infrastructure To Run Applications That the Business Requires
  • 6. How Do We Run Applications? • On a computer • With an OS • And some libraries • And some configuration • And some way to start it and stop it
  • 7. That isn’t managing complexity. It is Adding to it. Or at least just moving it around.
  • 8. So. Habitat. • Reduce snowflakeness • Support microservices • Manage container creep https://www.bonanza.com/listings/Premier-Food-Storage-Containers-20-Piece-Set-Grey/443972348
  • 9. Modern Applications Are Trending Toward • Immutability • Platform agnosticism • Complexity reduction • Scalability https://amazingmusthaves.com/products/steel-insulated-food-containers/
  • 10. Ways of Working with Habitat • Artifacts run themselves via the supervisor • Export to Docker • Link your github to habitat builder and let us do the work • Build plans from scratch or leverage scaffolding
  • 11. Habitat Goals • Defer some decisions to runtime • Do clean room builds • Repeatable builds • Distro agnostic packaging system • Service runtime and discovery • Configuration exposed via API • Packages are signed by the system
  • 12. Single Artifact Demo - Habitatize • Ruby app with HTTP interface, ImageMagick • Built via scaffolding • Run locally • Login to your machine User: velocity Pass: London2017
  • 13. Run the Package • sudo hab start learn-chef/habitatize - -channel unstable • Open http://{your machine IP}:8000 in a web browser
  • 14.
  • 16. What’s in This Thing? • https://github.com/burtlo/habitatize pkg_name=habitatize pkg_origin=franklinwebber pkg_scaffolding="core/scaffolding-ruby" pkg_version="1.0.0" pkg_deps=(franklinwebber/imagemagick)
  • 17. Basic Parts of a Simple Habitat App • Your application code • A plan file – can be as short as a few lines Include dependencies or use a scaffolding package • Habitat installation for running it (and build, we’ll do that later) • That’s it! • Stop with sudo hab stop learn-chef/habitatize
  • 19. Community • Teams and individuals contribute packages to builder • The “core” packages are maintained by the Habitat team • You can use any public package on builder for your dependencies • Packages are libraries, runtimes, applications
  • 20. Habitat and Builder Application Automation Build Machine
  • 21. Lab: Habitat and Builder • The fastest way to get packages out of the Habitat workflow is with Builder • SaaS for automated build and publish • Code -> Github -> Builder -> Docker Hub • You’ll need Github and Docker Hub accounts No worries, you can get them as we go along
  • 22. Our Sample Application • https://github.com/habitat-sh/sample-node-app • Fork this to your github account
  • 23. Sign in to Builder • https://bldr.habitat.sh/#/sign-in
  • 24.
  • 25. Origins • Are like organizations for grouping habitat applications • You can publish to multiple origins as long as you have the keys – we’ll talk about that later • For now, create a new unique origin to use “username-velocitylondon” • Origins can be public or private For this lab it doesn’t matter
  • 26.
  • 27. Make the App Our Own • In github, edit inline in the browser • https://github.com/YOU/sample-node- app/blob/master/habitat/plan.sh • Change pkg_origin To your new origin • Commit changes, add a comment if you want
  • 28. Add Habitat Builder • As an app in github • https://github.com/apps/habitat-builder • Install • Choose repositories All, or limit to just the sample-node-app repo
  • 29. Add Docker Hub Integration • We’ll link Docker Hub to our origin on habitat builder
  • 30. Docker Hub • https://hub.docker.com/ • Sign up for an account if you don’t have one • Each time you create a new origin, you’ll need to hook it to Docker Hub
  • 31.
  • 32.
  • 33. Automatic Builds of Our Sample App • Habitat Builder will watch our repo for changes • New builds of our app will then initialize • We connect Builder to github from “Packages” on the Builder page
  • 34.
  • 35.
  • 36. Turn on “Publish to Docker Hub”
  • 38.
  • 39.
  • 40. Our App Shows Up In Docker Hub • Builder retrieved our code from github • Built the latest version • Exported to a Docker container • Published to Docker Hub
  • 41. Run Our App with Docker sudo docker pull your-docker-org/your- docker-repo sudo run -it -p 8000:8000 your-docker- org/your-docker-repo Open {your IP}:8000/ in a browser (Make sure you stopped habitatize) sudo hab stop learn-chef/habitatize
  • 42.
  • 43. Make a New Version • On github, update your plan.sh file to show a new version of your app – 1.0.2 • Commit your change • Builder will pick up your change and start a new build
  • 46. Habitat Studio • Provides a busy box clean room for your app • Plus a set of tools for manipulating and running harts
  • 47. Why the Studio? • Declare explicit dependencies • Ship exactly what you need • Sign your packages and store artifacts
  • 48. Habitat Plans • Plan files are where you put together your builds • They are bash • Plans are versioned and can be shared on the habitat depot • Plans have multiple sections for your needs
  • 49. What’s In A Plan? pkg_origin=firstnamelastname pkg_name=national-parks pkg_description="A sample JavaEE Web app deployed in Tomcat8" pkg_version=0.1.3 pkg_maintainer="First Last <you@example.com>" pkg_license=('Apache-2.0') pkg_source=https://github.com/billmeyer/national-parks/archive/v${pkg_version}.tar.gz pkg_shasum=56a70d7fc432ad275ba256150bd010ce2581346c848e40ddc0fd0f62c5b17a54 pkg_upstream_url=https://github.com/billmeyer/national-parks pkg_deps=(core/tomcat8 billmeyer/mongodb) pkg_build_deps=(core/git core/maven) pkg_expose=(8080) pkg_svc_user="root" pkg_svc_group="root"
  • 50. Plans Have Callbacks Shell functions executed when building artifacts: • do_begin() • do_download() • do_verify() • do_check() • do_clean() • do_unpack() • do_prepare() • do_build() • do_install() • do_strip() • do_end()
  • 51. Variables • HAB_CACHE_SRC_PATH The default path where source archives are downloaded, extracted, & compiled. • ${pkg_dirname} Set to ${pkg_name}-${pkg_version} by default. If a .tar file extracts to a directory that's different from the filename, then you would need to override this value to match the directory name created during extraction. • ${pkg_filename} Set manually in the plan.sh • ${pkg_version} Set manually in the plan.sh
  • 52. Habitat Tools for Dependencies • hab pkg path team/app • You can have build deps and runtime deps • Build deps get into your hab studio when you are building • Runtime deps come along into your hart Keep artifacts small and under control!
  • 53. Scaffolding, like for habitatize • Default core-built dependencies for common runtimes • Ruby and Node so far Go, Python, Java on the way! pkg_name=MY_APP pkg_origin=MY_ORIGIN pkg_version=MY_VERSION pkg_scaffolding=core/scaffolding-ruby
  • 54. What Gets Built? • Everything. Sort of. • Build your own apps from source • Decide if you want upstream binaries or source for things like runtime You don’t have to build Tomcat, but you can • For COTS, use the binaries and skip steps
  • 55. Habitat Hooks • Travels with the app • Tell the app how to start, and if there is something that needs to be done before start • Let’s look at a run hook file
  • 56. Run Hook for Tomcat #!/bin/bash exec 2>&1 echo "Starting Apache Tomcat" export JAVA_HOME=$(hab pkg path core/jdk8) export TOMCAT_HOME="$(hab pkg path core/tomcat8)/tc" source {{pkg.svc_config_path}}/catalina-opts.conf echo "$CATALINA_OPTS=$CATALINA_OPTS" cp "$(hab pkg path {{pkg.origin}}/{{pkg.name}})/{{pkg.name}}.war" "$TOMCAT_HOME/webapps/" exec ${TOMCAT_HOME}/bin/catalina.sh run
  • 57. Configuration • Can be manipulated at runtime • Also travels with the app • Provides variable substitution and templating
  • 58. A catalina-opts File {{~#if bind.database}} {{~#each bind.database.members}} export CATALINA_OPTS="- DMONGODB_SERVICE_HOST={{address}} - DMONGODB_SERVICE_PORT={{port}}" {{~/each}} {{~/if}}
  • 59. Builder • You can share plans with builder, and other hab users share theirs • Has team namespacing – our origin • The core plans are those built by the Habitat team • https://app.habitat.sh/
  • 60. Caveat - Internet • You can build your own stuff inside your own network, sort of, when it’s all on one machine • This isn’t the best way to use Habitat • You’ll want internet connectivity on your build box and on the hosts running habitat artifacts • Builder provides private origins, linked to github users
  • 61. Build Output • By default, it’s a hart – a compressed tarball with some metadata and a signature • The hart itself it runnable • You can export to other formats, like Docker containers like we saw eariler
  • 62. Runtime • The hab runtime includes management, service discovery, other features • The habs in your application create a mesh so they can talk to each other • You can even update your application via the mesh without restarting every application manually
  • 63. Running a Hart sudo hab start learn-chef/habitatize -- channel unstable sudo hab start nathenharvey/national-parks -- listen-gossip 0.0.0.0:9639 --listen-http 0.0.0.0:9632 --peer 127.0.0.1 –bind database:mongodb.default
  • 64. Setup • On your remote host • hab setup • Set up a default origin? Yes Enter what you used in builder – username-velocity • Create a key – Yes • Github access token!
  • 65. Github Access Token • Go to your account on github • Select “settings” from your account on the top right • Click “Developer Settings” on the left bar • Click “Personal access tokens” on the left bar • “Generate new token” button • Description “habitat” or whatever Select read:org and user:email • Generate Token
  • 66. Hab Setup continued • Copy the github access token into the hab setup
  • 67. HAB_AUTH_TOKEN • Your github auth token • Export as an environment variable • Can be added to ~/.bashrc • export HAB_AUTH_TOKEN=3db7f……yourtoken
  • 68. Add Keys • We generated new keys • We need to add them to Builder • From your host, run hab origin key upload –s {YOUR ORIGIN}
  • 69. A place to work git clone https://github.com/YOU/sample-node- app.git cd sample-node-app • Your apps have a habitat/ subdirectory for hab- related files
  • 70. Hab Studio • hab studio enter • build • hab svc start ORIGIN/sample-node-app
  • 71. Habitat Supervisor • Keeps an eye on your applications • Also provides and API for viewing what’s going on with the apps running in the supervisor • http://{Your IP}:9631/services • It’s running now for you as part of the studio, but doesn’t need the studio to run When you exit the studio, it will shut down • Also allows for applications to connect to each other
  • 72. Two-Tier Application: National Parks • Java on Tomcat with MongoDB • https://blog.chef.io/2016/09/07/deploy-java-web- app-on-tomcat-8-with-habitat/ • You’ll want a couple terminals open to your host
  • 73. App
  • 74. Decomposing into Habitat • Microservice architectures lend themselves well to Habitat Every service becomes a hab package • For generic services like databases, the initial package should be very basic • Your application layer or a separate package initializes the data
  • 75. MongoDB • Already built – we’re just going to use it sudo hab start nathenharvey/mongodb -- channel unstable https://bldr.habitat.sh/#/pkgs/nathenha rvey/mongodb/latest
  • 77. Where Is the Code Coming From • This app isn’t hooked into the Builder pipeline • The source code is downloaded from github into the studio when the package is built • A checksum can be included in the plan.sh
  • 78. pkg_deps and pkg_build_deps • Build deps are present in the studio or build environment but don’t make it into the package • In this case, we’re not taking Maven with us! • Also notice the dependency on mongodb!
  • 79. Finding Stuff that Lives in Other Packages • Check out the setting for JAVA_HOME • export JAVA_HOME=$(hab pkg path core/jdk8) • Java will be included in our package via the dependencies • It arrives via another habitat package • The filesystem locations are different, so we have to query for where java will live
  • 80. Let’s Start the App • sudo hab start nathenharvey/national- parks --channel unstable • The log output in this case will go to the MongoDB screen (STDOUT for the supervisor) hab-sup(MR): Unable to start nathenharvey/national- parks, hab- sup(SS)[src/manager/service/spec.rs:208:23]: Missing required bind(s), database
  • 81. Supervisor Can Help Us Service Discovery Service Groups
  • 82. Service Groups • Applications running in the supervisor belong to service groups mongodb.default(SR): Configuration recompiled mongodb.default(SR): Initializing mongodb.default(SV): Starting service as user=hab, group=hab • When connecting services, use the service group • Groups can be 1 or N instances of an application
  • 83. Uh Oh national-parks.default(SR): Initializing national-parks.default hook[init]:(HK): Seeding Mongo Collection national-parks.default hook[init]:(HK): $MONGOIMPORT_OPTS=--host= -- port=27017 national-parks.default hook[init]:(HK): 2017-10-17T17:52:35.106+0000 connected to: localhost:27017 national-parks.default hook[init]:(HK): 2017-10-17T17:52:35.106+0000 dropping: demo.nationalparks national-parks.default hook[init]:(HK): 2017-10-17T17:52:35.109+0000 Failed: not authorized on demo to execute command { drop: "nationalparks" } national-parks.default hook[init]:(HK): 2017-10-17T17:52:35.109+0000 imported 0 documents national-parks.default(HK): Initialization failed! 'init' exited with status code 1
  • 84. What is This? • Our app brings along its seed data • It needs permissions to load that data into MongoDB • The app isn’t authorized to do that!
  • 85. YOLO! • We’re going to open up mongo to the wild. It’s fine. • Let’s see how MongoDB is currently configured hab sup config nathenharvey/mongodb • In the middle are some security settings [mongod.security] cluster_auth_mode = "keyFile" javascript_enabled = true key_file = ""
  • 86. Tunables • The supervisor allows us to update application config at runtime • Those mongod.security settings can be changed on the fly
  • 87. Make a new tunable toml hab sup config nathenharvey/mongodb > user.toml
  • 88. Edit user.toml • Around line 46 are the mongod.security settings • Update cluster_auth_mode to “” 46 [mongod.security] 47 authorization = "disabled” 48 cluster_auth_mode = "” 49 javascript_enabled = true 50 key_file = ""
  • 89. hab config apply • Load this new config into the running mongodb: sudo hab config apply mongodb.default 2 user.toml • The serial number just has to increase; it’s not otherwise meaningful • Must be valid configuration • The app will reload
  • 90. Now try the Java again sudo hab start nathenharvey/national- parks --peer 127.0.0.1 --bind database:mongodb.default
  • 91. Check the Output national-parks.default(O): 17-Oct-2017 18:07:58.322 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 525 ms national-parks.default(O): 17-Oct-2017 18:07:58.348 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina national-parks.default(O): 17-Oct-2017 18:07:58.348 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.9 national-parks.default(O): 17-Oct-2017 18:07:58.367 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /hab/pkgs/core/tomcat8/8.5.9/20170215223900/tc/webapps/nation
  • 92. Check the Browser! • http://{Your IP}:8080/national-parks/
  • 93. Habitat Info • http://{Your IP}:9631/services
  • 94. Other Places to Find Hints • https://github.com/habitat-sh/core-plans/ • The plan files for the core packages • Good for “how do I do x?”
  • 95. Join Us! • On Slack! http://slack.habitat.sh • Online! With Tutorials! https://www.habitat.sh/ • On Github! https://github.com/habitat-sh • This talk Try it out! Share your story! Get some swag!! goo.gl/WrHQTU
  • 96. Other References • Summary on The New Stack https://thenewstack.io/chef-habitat-addresses-issues- moving-containers-production • Our YouTube Channel https://www.youtube.com/user/getchef

Editor's Notes

  1. We might run infrastructure as our business But generally not And in the future, less and less We need to run applications
  2. On prem or in the cloud. Or in a hybrid cloud. Or in containers. Or something. On Ubuntu. Or on Red Hat. Or on CentOS if it’s not production. Or that one weird team that wants something else. OS, distribution, version? Packaging type? Initialization system type? Omg it’s systemd Where does it live? /opt /bin /company How to config? .conf .json .yml .dat What version of the language runtime??
  3. Habitat aims to take the chaos and snowflakeness out of running applications With the move towards microservices and increasingly distributed systems, taming this chaos is important The application comes first
  4. Single build can be run natively or in containers Don’t have to care what’s already on the target systems. Bring all your stuff with you – and only what you need Share your plan.sh files with others via depot
  5. Packages totally won. But added a bunch of complexity where they were meant to alleviate it Some upstream will be hard to build, and the provider may recommend packages Habitat community is helping with that