CINXE.COM

IBM - Customer story | Chef

<!doctype html> <html id="html" lang="en"> <head> <meta charset="utf-8" /><script type="text/html" id="sf-tracking-consent-manager"> <div id="tracking-consent-dialog" style="display:none" /> </script><script type="text/javascript" src="/WebResource.axd?d=DzHrpQl5URXarFHAtrmzFrYqRjD6gS4IuhzLeEyFON2caI2mkrIZ-cWZUhWtScTfFLwZXc15Hs5RXRN022ycP7VUuE8swl0YnCh5c2Ro-2N3MJzE0bDpP_DRygOemSWDX0sMq3Nk5OiQERq0n5_pLuhCzUYlqVxt4TQl_wf8C1E2ICF_Ny0cNvldm9qZdjk40&amp;t=638412637900000000"> </script> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="shortcut icon" href="/favicon.ico" /> <meta property="og:locale" content="en_US" /> <title> IBM - Customer story | Chef </title> <link href="https://d2i1toup5z0rfd.cloudfront.net/cache/b353bd728e285759634654fee2ec6d6bd44fce70/css/style.min.css" rel="stylesheet" type="text/css"> <meta property="og:title" content="IBM - Customer story | Chef" /><meta property="og:url" content="https://www.chef.io/customers/ibm" /><meta property="og:type" content="website" /><meta property="og:site_name" content="Chef Software" /><link href="https://d6vtbcy3ong79.cloudfront.net/fonts/2.0.0/css/metric.min.css" media="only screen and (min-width: 591px)" rel="stylesheet" type="text/css" /><link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700&display=swap" media="only screen and (min-width: 591px)" rel="stylesheet" type="text/css" /><style type="text/css" media="all">.grecaptcha-badge{z-index:2147483647;bottom:50px !important}</style><meta name="twitter:title" content="IBM - Customer story | Chef" /><meta name="twitter:url" content="https://www.chef.io/customers/ibm" /><meta property="og:image" content="https://www.chef.io/images/cheflibraries/logos/chef_progress_primary_logo.png" /><meta name="twitter:image" content="https://www.chef.io/images/cheflibraries/logos/chef_progress_primary_logo.png" /><meta property="fb:app_id" /><meta name="twitter:site" content="@chef" /><meta name="twitter:creator" content="@chef" /><meta name="twitter:card" content="summary_large_image" /><meta property="og:description" content="View the Customer Story." /><meta name="twitter:description" content="View the Customer Story." /><script type="application/json" id="sf-insight-metadata"> {"contentMetadata":"{\"Id\":\"39ed317d-9f84-483a-bbbe-e216ab438126\",\"ContentType\":\"Resource\",\"Title\":\"IBM\",\"CanonicalTitle\":\"IBM\",\"CanonicalUrl\":\"https://www.chef.io/customers/ibm\",\"DefaultLanguage\":\"en\",\"CreatedOn\":\"2023-02-17T16:30:19Z\",\"ModifiedOn\":\"2024-02-12T12:45:53.487Z\",\"SiteName\":\"Chef\",\"ModuleName\":\"Resources\",\"Hierarchies\":[{\"Id\":\"3b7f8098-7ba7-4833-bc3d-462e83eb7a0d\",\"Title\":\"Chef Automate\",\"Parent\":{\"Id\":\"281c8de2-841b-417a-859d-8fb41e825da4\",\"Title\":\"Products\"}},{\"Id\":\"59ad3ecf-6d69-49d3-a0de-989eda16cc38\",\"Title\":\"Chef Infra\",\"Parent\":{\"Id\":\"281c8de2-841b-417a-859d-8fb41e825da4\",\"Title\":\"Products\"}},{\"Id\":\"e89430cf-d2b2-4390-9caf-aeb2e5056399\",\"Title\":\"Chef InSpec\",\"Parent\":{\"Id\":\"281c8de2-841b-417a-859d-8fb41e825da4\",\"Title\":\"Products\"}},{\"Id\":\"105e306a-66f8-4133-b9de-4c3b03cf0a5c\",\"Title\":\"Cloud Technology\",\"Parent\":{\"Id\":\"aa03706d-944e-4126-9087-41a14d0fd203\",\"Title\":\"Solutions\"}},{\"Id\":\"b4d5cee1-03ea-4e98-82b2-13c6d3343f46\",\"Title\":\"Configuration Management\",\"Parent\":{\"Id\":\"aa03706d-944e-4126-9087-41a14d0fd203\",\"Title\":\"Solutions\"}},{\"Id\":\"35e120fe-546e-4900-a6c5-324a1ebce270\",\"Title\":\"Customer story\",\"Parent\":{\"Id\":\"e017e1bc-edfc-4f0f-9c30-52ed62bc8b14\",\"Title\":\"Content Types\"}},{\"Id\":\"0ef8cc19-a46c-4bf7-9a4c-0bbcbaa156d5\",\"Title\":\"DevOps\",\"Parent\":{\"Id\":\"aa03706d-944e-4126-9087-41a14d0fd203\",\"Title\":\"Solutions\"}},{\"Id\":\"d8f99942-30ba-44aa-ac0c-abd693a48573\",\"Title\":\"Infrastructure Automation\",\"Parent\":{\"Id\":\"aa03706d-944e-4126-9087-41a14d0fd203\",\"Title\":\"Solutions\"}}],\"PageHierarchies\":[{\"Id\":\"b5cc9d99-ebcd-4e01-a53b-95dfdb92ea63\",\"Title\":\"Chef\",\"Parent\":{\"Id\":\"281c8de2-841b-417a-859d-8fb41e825da4\",\"Title\":\"Products\"}}],\"SFDataProviderName\":\"chefresources\",\"PageId\":\"ae5de475-3c84-4013-926b-9b5953b6a997\",\"PageTitle\":\"Details\",\"PageCanonicalTitle\":\"Details\",\"PageCanonicalUrl\":\"https://www.chef.io/customers/details\"}","videosMetadata":"[]"} </script><script type="application/json" id="sf-insight-settings"> {"apiServerUrl":"https://api.insight.sitefinity.com","apiKey":"d76abbf8-03ac-fa14-ce7c-b1b276339fd0","applicationName":"Website","trackingCookieDomain":".chef.io","keepDecTrackingCookieOnTrackingConsentRejection":false,"slidingExpirationForTrackingCookie":false,"maxAgeForTrackingCookieInDays":365,"trackYouTubeVideos":true,"crossDomainTrackingEntries":["sso.kemp.ax","kemptechnologies.com","freeloadbalancer.com","www.whatsupgold.com","www.flowmon.com","www.chef.io","community.chef.io","www.sharefile.com"],"strategy":"Persist|False","docsHrefTestExpressions":[".*\\/docs\\/.+\\.{1}.+((\\?|\\\u0026)sfvrsn=.+){1}$",".+((\\?|\\\u0026)sf_dm_key=.+){1}$"]} </script><script type="text/javascript" src="/WebResource.axd?d=HtQyXelCu6mzSPcVcvK_BhlPLTDMuvhwyVIsZYSzKh9A_TKoc_ByxHb8c14vwAnBeA3ctohF6r8rKfkJZXEKbdFtWkvsH3a8fOuUKyKGfDp9F7j-4b34JuU3FUlo0cMKD7V6J6WHotQiz1Kgf6Kf5A1gPBtzOBHDBqAWX3IpZIo42gJC8WIL3-rkvfc--xLqIU-_llYtQ_z8SjnwKGw8fGxdM4dTzAm8U7e5GN_HLoI1&amp;t=638412637900000000"> </script><script src="https://cdn.insight.sitefinity.com/sdk/sitefinity-insight-client.min.3.1.13.js" crossorigin="" async="async"> </script><meta name="description" content="View the Customer Story." /></head> <body id="chef"> <nav class="Nav"> <div class="Nav-Container container"><div class="Nav-Logo"><a href="#Content_TDA3D64C3003_Col00" class="Skip-Link js-noanchor Btn Btn--ghost -tint-white -mt0" onclick="javascript: () => document.querySelector(`${this.getAttribute('href')} > :first-child`).focus()"> skip navigation </a> <a href="/"> <img height="41" width="195" src="https://d1l5pp53ux74mz.cloudfront.net/images/cheflibraries/logos/progress-chef-primary-logo-svg.svg?sfvrsn=5865c2aa_3" alt="Chef Progress Primary Logo" /> </a></div> <input type="checkbox" class="Nav-Toggle" id="mobile-nav" /> <label type="checkbox" class="Nav-ToggleLabel -fs40" for="mobile-nav"> <svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24" aria-label="Open Mobile Menu"> <path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z" fill="currentColor" /> </svg> </label> <div class="Nav-Content"> <div class="Nav-Main"> <ul> <li class="-has-dropdown js-tglslf-is-open"> <button type="button" aria-label="Open Products Dropdown">Products</button> <div class="Nav-Dropdown Nav-Dropdown--full"> <div class="container"> <div class="row -l-mb1"> <div class="col-6 -l-mb1"> <div class="row"> <div class="col-6"> <div> <h6 class="-mb2">Configure, Deploy, Manage</h6> <ul class="List0 -mb2"> <li><a href="/products/chef-infrastructure-management" class="-fw5">Configuration Management</a></li> <li><a href="/products/chef-app-delivery" class="-fw5">Application Delivery</a></li> <li><a href="/products/chef-edge-management" class="-fw5">Edge Management</a></li> </ul> <h6 class="-mb2">Enterprise Job Orchestration</h6> <ul class="List0"> <li><a href="/products/job-orchestration" target="_blank" class="-fw5">Chef Courier</a></li> </ul> </div> </div> <div class="col-6 -l-mb1"> <div> <h6 class="-mb2">Security and Compliance</h6> <ul class="List0"> <li><a href="/products/chef-compliance" class="-fw5">App Infrastructure Compliance</a></li> <li><a href="/products/chef-cloud-security" class="-fw5">Cloud Security &amp; Compliance</a></li> </ul> </div> </div> </div> <div class="-mta"> <hr class="-op-2 -mb3 -l-mb2 -l-mt0" /> <h6 class="-mb2">Achieving DevSecOps Success - Any Cloud to Any Edge</h6> <a href="/products" class="-c-link -i-next -fw5">All Products</a> </div> </div> <div class="col-6 -mb0"> <div class="row -l-mb0"> <div class="col-7"> <h6 class="-mb2">Featured Topics</h6> <ul class="List0 -mb1 -pr1"> <li><a href="/chef-enterprise" class="-fw5">Optimizing Open-Source Chef</a></li> <li><a href="/solutions/zero-trust-security" class="-fw5">Zero Trust Security</a></li> <li><a href="/solutions/cloud-native" class="-fw5">Cloud-Native App Delivery</a></li> <li><a href="/products/chef-saas" class="-fw5">SaaS Deployment of Chef Products</a></li> </ul> <a href="/solutions" class="-c-link -i-next -fw5">All Topics</a> </div> <div class="col-5 -col-decor -l-mb0 -l-pt1"> <p class="-fs16"> The Synergy of DevSecOps and Zero Trust Framework: A Chef Perspective </p> <a href="/ebooks/secure-your-digital-future-with-devsecops-and-zero-trust" class="-c-link -i-next -fw5">Download now</a> </div> </div> </div> </div> </div> </div> </li> <li class="-has-dropdown js-tglslf-is-open"> <button type="button" aria-label="Open Resources Dropdown">Resources</button> <div class="Nav-Dropdown Nav-Dropdown--3col"> <div class="container"> <div class="row"> <div class="col-4 -l-mb0"> <ul class="List0"> <li><a href="/downloads">Downloads</a></li> <li><a href="https://docs.chef.io" target="_blank">Documentation</a></li> <li><a href="/training/tutorials" target="_blank">Online Courses</a></li> <li><a href="https://community.chef.io" target="_blank">Developer Community</a></li> </ul> </div> <div class="col-4 -l-mb0"> <ul class="List0"> <li><a href="/blog">Blog</a></li> <li><a href="/webinars">Webinars</a></li> <li><a href="/customers">Customer Success</a></li> <li><a href="/resources">Resource Library</a></li> </ul> </div> <div class="col-4"> <ul class="List0"> <li><a href="/training">Training</a></li> <li><a href="/support">Support</a></li> <li><a href="/professional-services">Professional Services</a></li> <li><a href="https://www.progress.com/trust-center/chef" target="_blank" rel="noopener">Trust Center</a></li> </ul> </div> </div> </div> </div> </li> <li class="-has-dropdown js-tglslf-is-open"> <button type="button" aria-label="Open Partners Dropdown">Partners</button> <div class="Nav-Dropdown"> <div class="container"> <div class="row"> <div class="col-12"> <ul class="List0"> <li><a href="https://www.progress.com/partners/partner-locator?Products=Chef" target="_blank">Find a Partner</a></li> <li><a href="https://www.progress.com/partners/why-partner" target="_blank">Become a Partner</a></li> <li><a href="https://partnerlink.progress.com/s/" target="_blank">Partner Login</a></li> <li><a href="https://www.progress.com/partners/deal-registration" target="_blank">Deal Registration</a></li> </ul> </div> </div> </div> </div> </li> <li><a href="/how-to-buy">Pricing</a></li> <li class="-has-dropdown -icon"> <button type="button" id="js-search-trigger" aria-label="Open Search Dropdown"> <svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 12 12" aria-labelledby="chef-submit-search"> <title id="chef-submit-search">Submit Search</title> <path d="M8.09109 7.91051C7.4238 8.61947 6.53019 9.07357 5.56415 9.1946C4.5981 9.31563 3.62009 9.09602 2.79853 8.5736C1.97696 8.05117 1.36328 7.25862 1.06316 6.33243C0.763034 5.40625 0.795256 4.4044 1.15427 3.49941C1.51329 2.59443 2.17664 1.84295 3.03007 1.37439C3.8835 0.905835 4.87361 0.749527 5.82988 0.932386C6.78615 1.11524 7.64874 1.62582 8.26909 2.3762C8.88944 3.12657 9.22872 4.06977 9.22852 5.04337C9.22951 6.10928 8.82253 7.13516 8.09109 7.91051ZM8.09109 7.91051L11.3259 11.1428" style="fill: none" fill="none" stroke="currentColor"></path> </svg> </button> <div class="Nav-Dropdown Nav-Dropdown--full Search-Dropdown"> <form class="Nav-Search" method="GET" action="/search"> <input type="search" placeholder="Search…" name="q" required="required" /> <button type="submit" class="Btn Btn--ghost" aria-label="Search">Search</button> </form> </div> </li> <li class="-has-dropdown js-tglslf-is-open -icon"> <button type="button" id="js-user-trigger" aria-label="Open User Dropdown"> <svg width="15" height="15" viewBox="0 0 12 14" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="chef-login-icon"> <title id="chef-login-icon">Login</title> <path d="M0.857422 12.7151V11.4244C0.859235 10.2883 1.31134 9.19928 2.11468 8.39594C2.91801 7.59261 4.00705 7.1405 5.14314 7.13869H6.78878C7.92508 7.13982 9.01376 7.59246 9.81724 8.39594C10.6207 9.19942 11.0734 10.2881 11.0745 11.4244V12.7151H0.857422ZM3.17606 4.35465C3.17555 3.80296 3.33863 3.26335 3.64481 2.80442C3.951 2.3455 4.38577 1.98788 4.89537 1.77652C5.40497 1.56516 5.96642 1.50998 6.50753 1.61748C7.04865 1.72499 7.54544 1.99077 7.93555 2.38087C8.32565 2.77098 8.59144 3.26777 8.69894 3.80889C8.80644 4.35 8.75126 4.91145 8.5399 5.42105C8.32854 5.93065 7.97092 6.36543 7.512 6.67161C7.05307 6.9778 6.51346 7.14087 5.96177 7.14036C5.22303 7.14013 4.51372 6.84577 3.99135 6.3234C3.46898 5.80102 3.17629 5.09339 3.17606 4.35465Z" style="fill: none;" fill="none" stroke="currentColor"></path> </svg> <span class="-dn -l-dib -l-ml1">User</span> </button> <div class="Nav-Dropdown"> <div class="container"> <div class="row"> <div class="col-12"> <h6>My Account</h6> <ul class="List0"> <li><a href="https://manage.chef.io/login" target="_blank">Hosted Chef Console</a></li> <li><a href="https://community.progress.com/s/downloads-chef" target="_blank" rel="noopener">My Downloads</a></li> <li><a href="https://community.progress.com/s/products/chef" target="_blank" rel="noopener">SupportLink</a></li> </ul> </div> </div> </div> </div> </li> <li> <a href="/contact-us" class="Btn Btn--ghost -mb0 -ml2 -l-ml0 -l-mb2" aria-label="Contact Us">Contact Us</a> <a href="/trial" class="Btn -mb0 -ml2 -xl-ml1 -l-ml0 -l-mb1" aria-label="Request a Trial">Request a Trial</a> </li> </ul> </div> </div> </div> </nav><main id="Content_TDA3D64C3003_Col00" class="sf_colsIn Main Page-Content" data-sf-element="Row" data-placeholder-label="Main - Place page content here."> <!-- Header --> <div class="Section -tint-brand"> <div class="Section-bg -noc"> <img src="/images/cheflibraries/backgrounds/brand-refresh-q4-2021/customers-1.jpg?status=Temp" alt="Case Study Background" /> </div> <div class="container"> <div class="row"> <div class="col-7 -mb0 -m-full"> <h2 class="-fw5 -ttu -mb2 -fs18"> Customer Stories <!-- Customer story --> </h2> <h1> Continuous Availability at IBM </h1> <p class="-mb4">What it means to run the cloud that supports very visible event sites.</p> </div> </div> </div> </div> <!-- End Header --> <!-- Main + Sidebar --> <div class="Section"> <div class="container"> <div class="row"> <div class="col-6 -m-full"> <p class="-mb4">Brian is a Senior Technical Staff Member and has been at IBM since 2001. His focus is on the development side. His counterpart, Rich, is a software engineer whose focus in on the infrastructure side. He’s been at IBM since 1989. Brian set the stage by describing the team’s two overriding concerns. “Our focus is on continuous availability. You should always be able to get to our web sites. Continuous availability is the lens by which we examine all our technical decisions. “Also, our business is different from most because we have hard deadlines. Things don’t slip for us. A lot of our priorities are driven by that fact. You can’t push back and say, ‘Sorry, you’ll have to move the US Open to a couple days later.’ That doesn’t work. I’ve tried.”</p><h2>The IBM event cloud</h2><p>The IBM cloud that the events team uses is, in fact, a hybrid cloud. Some of their workloads run in the public cloud, on&nbsp;<a data-sf-ec-immutable="" href="http://www.softlayer.com/" target="_blank" rel="noopener">SoftLayer</a>, while others run in the private cloud, which is based on&nbsp;<a data-sf-ec-immutable="" href="http://www.openstack.org/" target="_blank" rel="noopener">OpenStack</a>. Currently, AIX makes up a large part of the infrastructure, along with SUSE Linux and Red Hat Linux. However, going forward, the team has decided to support a single platform, Red Hat Enterprise Linux (RHEL). They are gradually moving their systems over, and bringing them under Chef management as they do so. Their development workstations are a mix of Red Hat Linux, Ubuntu and OSX.</p><p>The overall environment is complex. There is a test environment, a pre-production environment, which consists of two separate locations, and a production environment, which consists of seven locations. Each production location is treated separately. It’s not unusual to take a cloud location down for a week or even two weeks at a time, or to keep it at an older version, while the web site itself is always available.</p> </div> <div class="col-5 col--offset-1 -l-half -m-full -ha"> <div class="Box -accent-lightgrey -p5 -pt3 -pb2"> <img src='https://www.chef.io/images/cheflibraries/customers/ibm-logo-centered.png?sfvrsn=a9750ba5_2' alt='' title='ibm logo centered' class='-mb3 -m-half -s-two-thirds' /> <div> <a href="https://www.ibm.com" target="_blank" class="-i-external">ibm.com</a> </div> </div> <div class="-tint-lightgrey -fs16 -p5 -pb2 -pt2"> <h4>About IBM</h4> <p>IBM sponsors many well-known sporting events, such as the&nbsp;<a data-sf-ec-immutable="" href="http://www.usopen.org/" target="_blank" rel="noopener">US Open</a>&nbsp;and the&nbsp;<a data-sf-ec-immutable="" href="http://www.wimbledon.com/" target="_blank" rel="noopener">Wimbledon Championships</a>. The IBM Continuous Availability Services – Events Infrastructure (CAS-EI) is the team that operates and manages the very popular web sites for these events. For example, during this year’s Wimbledon Championships, the team delivered half-a-billion page views during the two-week tournament. In this article, IBM CAS-EI members Brian O’Connell and Rich Bogdany talk about what it means to run the cloud that supports these very visible sites.</p> </div> </div> </div> </div> </div> <!-- End Main + Sidebar --> <!-- Testimonial --> <section class="Section -bg-darkpurple1" data-sf-element="Row"> <div class="container"> <figure class="Quote Quote--outside"> <blockquote> <p class="-fs28">Part of our infrastructure hasn’t been ported to Linux and Chef, yet. I keep seeing people re-doing things because they’re doing it manually. I keep saying, I can’t wait until that’s on Chef so we’re not doing that.</p> </blockquote> <figcaption> <cite class="-db -fs22"> Rich Bogdany </cite> <span class="-fs16"> Software Engineer<span>, </span> IBM </span> </figcaption> </figure> </div> </section> <!-- End Testimonial --> <!-- Additional --> <div class="Section"> <div class="container"> <h2>The event infrastructure automation stack</h2><div class="row"><div class="col-5 -l-full"><p><img alt="" src="/images/cheflibraries/resources/images/event-infrastructure-automation-stack.png?sfvrsn=a9db3a9b_0" width="399" height="332"></p></div><div class="col-6 -vam -l-full"><p>The automation stack is made up of three different products, each with its own area of responsibility. The following diagram shows the stack, and what each product does.</p></div></div><p>Rich described the role of&nbsp;<a data-sf-ec-immutable="" href="http://www-03.ibm.com/software/products/en/ibm-cloud-orchestrator" target="_blank" rel="noopener">IBM Cloud Orchestrator</a>&nbsp;(ICO). “The main functionality that IBM Cloud Orchestrator provides is the operating system (OS) provisioning. We’re using KVM virtualization. ICO also controls the hardware. It lets us allocate disk and networks and the virtual servers. It’s the whole virtualization layer. It does a little bit of orchestration just to get the Chef process kicked off.”</p><p>Describing the rest of the automation stack, Brian continues, “ICO hands it off to&nbsp;<a data-sf-ec-immutable="" href="/">Chef</a>. Chef manages the OS configuration, installs the middleware and does any sort of middleware configuration that’s required. We use the same cookbooks for both our public and private cloud.</p><p class="-mb4">“After that, we hand it off to our top layer, which is&nbsp;<a data-sf-ec-immutable="" href="http://www-03.ibm.com/software/products/en/ucdep" target="_blank" rel="noopener">UrbanCode Deploy</a>&nbsp;(UCD). All our subject matter experts, including ourselves, have access to this tool, to either push out applications or application configuration updates or to do things like updating Chef roles. (We consider that a deployment). All of our deploys are the same, whether it’s an application or a Chef update.”</p><h2>Treat everything as code</h2><p>If automation is to be truly effective, everything must be treated as code. The IBM team keeps their assets in&nbsp;<a data-sf-ec-immutable="" href="https://about.gitlab.com/" target="_blank" rel="noopener">GitLab</a>. They use&nbsp;<a data-sf-ec-immutable="" href="https://www.packer.io/" target="_blank" rel="noopener">Packer</a>&nbsp;to generate images for their public cloud, their private cloud,&nbsp;<a data-sf-ec-immutable="" href="https://www.virtualbox.org/" target="_blank" rel="noopener">VirtualBox</a>, and&nbsp; <a data-sf-ec-immutable="" href="http://www.vmware.com/" target="_blank" rel="noopener">VMware</a>, all from a single source.</p><p>Anything installable that’s pushed through the pipeline, whether it’s SSL keys or binary files, is packaged as an&nbsp;<a data-sf-ec-immutable="" href="http://rpm5.org/" target="_blank" rel="noopener">RPM</a>&nbsp;file. To create the packages the team uses&nbsp;<a data-sf-ec-immutable="" href="https://github.com/jordansissel/fpm/wiki" target="_blank" rel="noopener">FPM</a>&nbsp;and&nbsp;<a data-sf-ec-immutable="" href="https://github.com/bernd/fpm-cookery" target="_blank" rel="noopener">fpm-cookery</a>, which helps automate FPM. The RPM packages are deployed to an RPM repo, where they’re available to all the nodes. The relevant Chef cookbook is updated to point to the new RPM.</p><p class="-mb4">Team members do their development locally, then commit their work to source control. A commit triggers a&nbsp;<a data-sf-ec-immutable="" href="https://jenkins-ci.org/" target="_blank" rel="noopener">Jenkins job</a>, which uses&nbsp;<a data-sf-ec-immutable="" href="https://www.vagrantup.com/" target="_blank" rel="noopener">Vagrant</a>&nbsp;and Chef to spin up a build instance, execute fpm-cookery, and then build the RPM package. That package is then deployed by UCD.</p><h2>Choosing Chef</h2><p>The events team has used automation, in some form or another, since its inception. Brian says, “Our team was formed in preparation for the 1998 games in Nagano. We also delivered the 2000 games in Sydney. So, we’ve been around for a long time, delivering these sporting events.</p><p>“We have built, over time, a lot of automation, such as perl scripts, to do our jobs, but there were problems. Some scripts were run in one place, to bring up one piece of the infrastructure, and other scripts were run in another place to bring up a different part of the infrastructure.”</p><figure class="Quote Quote--outside -mb4"><blockquote><p class="-fs28">We need a fully automated build-and-converge system like Chef that can verify that everything is in place the way it should be…</p></blockquote><figcaption><cite class="-db -fs22">Brian O’Connell</cite> <span class="-fs16">Senior Technical Staff Member<span>, </span>IBM</span> </figcaption></figure><p>Rich talked about his own experiences. “I automated a lot of our infrastructure in a home-grown, shell script framework over 10 years ago, using templates. I would try not to change nodes. I would try to change the code first. Obviously, the frameworks that are available now are much more sophisticated and it’s much easier to get other folks involved. That was lacking in what we were doing before. I’d have to maintain the scripts because it was hard to share them.</p><p>“Another significant feature that was lacking was testing. I couldn’t test anything we were changing beforehand other than to try it on a test node. This whole change to a formalized testing methodology is relatively new for me, but I definitely see the value.”</p><p>Brian was first introduced to Chef in 2013. “We got into configuration management, I don’t want to say accidently, but I was at an IBM conference, and there was an IBM product team talking about IBM Cloud Orchestrator and how they had added some Chef integration to it. They seemed really excited about it, so I thought I should figure out what Chef is. I started learning about Chef and we also had a Chef consultant work with us for a few days. </p><p>“For us, what we mean when we talk about DevOps is that we want our customers to be able to deploy things at their own pace, and we want to help them meet their business drivers. That’s our interpretation of it. It’s strongly on the deployment side. (Customers are internal IBM development teams.)</p><p class="-mb4">“My view is, to get us there, we need a very strong and stable infrastructure. To achieve that, we need a fully automated build-and-converge system like Chef that can verify that everything is in place the way it should be, so we don’t shift our time from doing deployments ourselves to chasing down why a customer deployment failed. That’s why we didn’t just take a deployment tool and put it in place. We brought everything under configuration management and made it convergent, so we have confidence that, yes, the customer deployment is going to work because everything is the way it should be. We don’t do changes manually. That can cause drift across our nodes.”</p><h2>Deploying a cookbook</h2><p>Chef cookbooks use the same deployment pipeline as applications. Here is the workflow for cookbooks.</p><p><img src="/images/cheflibraries/resources/images/deploying-cookbook-1024x492.png?sfvrsn=a9d41c45_0" height="492" width="1024" alt=""></p><p class="-mb4">The Jenkins slave agents run in SoftLayer, the public cloud, because SoftLayer can provide bare-metal nodes. This capability means there is no need for nested virtualization, which is not currently available in the private cloud.</p><h2>Versioned roles</h2><p>The team began their work before Chef developed&nbsp;<a data-sf-ec-immutable="" href="https://docs.chef.io/config_rb_policyfile.html" target="_blank" rel="noopener">policy files</a>, so they used a technique called versioned roles to pin particular cookbooks to particular environments. With versioned roles, you use role names that include a version number. This way the team can be selective about the changes each environment receives and, for the production environment, which is made up of seven cloud regions, they can keep different clouds at different versions. The UCD tool allows them to keep an inventory of which clouds are associated with which roles. Here is the workflow for roles.</p><p><img src="/images/cheflibraries/resources/images/versioned-roles-1024x481.png?sfvrsn=ab5a37a5_0" height="481" width="1024" alt=""></p><p>The following screenshot is an example of how the UCD inventory keeps track of a subset of the versioned roles across different private cloud regions.</p><p><img src="/images/cheflibraries/resources/images/ucd-inventory-versioned-roles.png?sfvrsn=906d83b0_0" height="278" width="675" alt=""></p><p>Jenkins, in combination with&nbsp;<a data-sf-ec-immutable="" href="https://github.com/RiotGamesMinions/thor-scmversion" target="_blank" rel="noopener">scmversion</a>, takes care of naming the roles and of incrementing the version number. UCD updates the&nbsp; <a data-sf-ec-immutable="" href="https://docs.chef.io/run_lists.html" target="_blank" rel="noopener">run-list</a>&nbsp;on the node to set it to that versioned role.</p><p>UCD deploys versioned roles to both the public and private cloud. It also modifies the node attributes on the Chef server. UCD does this by overriding the run list and converging the node.</p><p>Brian explains the approach. “Overriding the run list on the node is how UCD and Chef work together to set a node to a new desired state. This ensures that Chef and UCD are always on the same page about the desired state of a node.”</p><p>The process performs the following steps:</p><ol><li>A set of artifacts that is generated by Jenkins is downloaded. The artifacts describe the role and version to be updated as a properties file.</li><li>The properties are read and made available to the subsequent steps.</li><li>A global lock is acquired for the Chef client that runs on the target node. The lock prevents multiple updates from clashing with each other. (The lock is automatically released when the workflow finishes.)</li><li>A regular expression and substitution is applied to replace run list items, which, in this case, are the role versions.</li><li>The node is converged.</li></ol><p>The following diagram shows the UCD process:</p><p><img src="/images/cheflibraries/resources/images/ucd-process-364x1024.png?sfvrsn=e6514600_0" height="512" width="182" alt="" class="-mb4"></p><h2>Packages</h2><p>All binary files are treated as packages. Here is the package workflow.</p><p class="-mb4"><img src="/images/cheflibraries/resources/images/package-workflow.png?sfvrsn=263ebff_0" height="1059" width="2221" alt=""></p><h2>Adopting Chef</h2><p>As in most companies, the IBM event team includes people with a variety of backgrounds. Some people are new to source control or new to Git. Some have development backgrounds, while others have operations backgrounds. Rich remarked on how the first step is rethinking how you approach a problem. “You have to change your mindset. Historically, our team would fix problems manually on individual nodes. Okay, but the next time you rebuild that node it’s going to have the same problem if you don’t fix the source of it.</p><p>“Just this morning, with Jenkins, we did something manually weeks ago and now we can’t remember why we changed it or how we fixed it. You’ve got to get to that mindset where you have to change the code first. That’s definitely the first hurdle to get over.”</p><p class="-mb4">To bring everyone up to speed, the team uses Chef to bootstrap a workstation setup, some Chef training, whether in person or through&nbsp;<a data-sf-ec-immutable="" href="https://learn.chef.io/" target="_blank" rel="noopener">Learn Chef</a>, individual mentoring, and code reviews.</p><h2>Setting up the workstation</h2><p class="-mb4">To ensure that everyone’s workstation looks the same, the team has a standard way of setting up the Chef development environment. Team members go to a wiki page that gives them a single command to run. That command downloads Chef and then Chef itself sets up the workstation. Brian says, “There are also some links to the online Chef training, which we encourage people to go through. We also have some links to some Ruby primers. Because not everyone is familiar with Git, the team has its own helper gems. For example, team members can update all the cookbooks with a single command.”</p><h2>Achieving reliability</h2><p>The event team uses a combination of testing, code reviews, and personal engagement to create reliable cookbooks that conform to a set of standards. Here is the process:</p><p><img src="/images/cheflibraries/resources/images/reliability-process.png?sfvrsn=72890f47_0" height="884" width="1638" alt=""></p><p>Brian explains, “We expect people to create feature branches. We expect them to write integration tests. We prefer that people write their tests first, although we can’t really enforce that. Do your red/green development. Write your&nbsp; <a data-sf-ec-immutable="" href="http://serverspec.org/" target="_blank" rel="noopener">ServerSpec</a>&nbsp;test and then write your feature to make that test pass.</p><p>“Before you submit something, we provide tooling so that when you test a cookbook locally, it’s tested the same way as in the pipeline, so you’ll know ahead of time if the cookbook’s going to pass or not.</p><p>“Assuming that it passes, you submit your merge request, GitLab tells Jenkins to run static analysis tests and integration tests, and notifies people that there’s a merge request waiting. Either the merge is approved or it’s not. If it’s not, we ask ourselves if the issue impacts our standards. If it does, we create a story and add it to our static analysis. If it’s approved, the change can be merged and the person is notified. Jenkins will then send the updated cookbook to the Chef server. It’s up to the person to promote the change through UCD and push it out.”</p><p>Here is a more fine-grained view of the development process:</p><p><img src="/images/cheflibraries/resources/images/development-process.png?sfvrsn=f7f5fe57_0" height="1294" width="1934" alt=""></p><p>Rich commented on the time it takes to get used to the team’s approach to testing. “Testing, putting all that effort into writing all those test cases, can be hard. There’s a lot of test cases to write. Sometimes there’s more test code than the cookbook itself. That’s another one of the hurdles to get over.</p><p class="-mb4">“The testing is worth it. Part of our infrastructure hasn’t been ported to Linux and Chef, yet. I keep seeing people re-doing things because they’re doing it manually. I keep saying, I can’t wait until that’s on Chef so we’re not doing that.”</p><h2>Code reviews</h2><p>Code reviews are important to the team. They help people learn how to write cookbooks, and they provide a good forum for giving feedback. In fact, the team moved to GitLab because it makes the code review process easier.</p><p>Brian says, “We try to have a very tight loop in the code review process. If we see something, and we think it should be done in a certain way, we open a story to write a&nbsp;<a data-sf-ec-immutable="" href="https://docs.chef.io/foodcritic.html" target="_blank" rel="noopener">Foodcritic</a>&nbsp;rule to get it in our development environment. We have, probably, 15 or 17 Foodcritic rules to enforce our various standards. For example, we need to examine the readme to make sure attributes are documented. </p><p class="-mb4">“We’re also in the process of adding&nbsp;<a data-sf-ec-immutable="" href="http://batsov.com/rubocop/" target="_blank" rel="noopener">RuboCop</a>&nbsp;to our pipeline, as well. What’s nice about RuboCop is that, for standards that are debatable, it’s nice to have an authoritative source that isn’t someone on the team. When you’re saying, “No, it’s two spaces, not tabs” you can point to the rules in RuboCop and say, “We’re going to go with that.”</p><h2>What’s Next</h2><p>Along with migrating the rest of their infrastructure to Red Hat Linux and Chef, one of the team’s priorities is to increase the number of customers who are in charge of their own deployments. Brian says, “We already have customers who can push the deployment button but they’re so close to our team they understand how things work. Now we’re broadening out to the rest of our customer base.”</p><p>Of course, there’s no lack of things to do. Brian says, “We’re always going to be iterating and improving. We’re still trying to figure out how to get all our customers on board, and still build everything repeatedly and easily. Let me put it this way, our backlog is growing, not shrinking.”</p> </div> </div> <!-- End Additional --> <div class="Section -bg-dark"> <div class="container"> <h2>Ready to Get Started?</h2> <a href="/contact-us" class="Btn col-3">Contact Sales</a> </div> </div></main> <section class="Chef-Footer" data-sf-element="Row"> <div id="Content_TDA3D64C3004_Col00" class="sf_colsIn container -oh" data-sf-element="Column 1" data-placeholder-label="Section"> <div class="row row--equal"><div class="col-8 -l-full -l-mb3"><div class="row"><div class="col-3 -xl-third"><h6 class="-co-black">Company</h6><ul class="List0 -vs1 -fs16"><li><a href="/blog" data-sf-ec-immutable="">Blog</a></li><li><a href="https://www.progress.com/company" target="_blank" data-sf-ec-immutable="">About Progress</a></li><li><a href="https://www.progress.com/company/leadership#exec" target="_blank" data-sf-ec-immutable="">Leadership</a></li><li><a href="/customers" data-sf-ec-immutable="">Customer Stories</a></li><li><a href="https://www.progress.com/company/press-coverage" target="_blank" data-sf-ec-immutable="">Press Coverage</a></li><li><a href="https://investors.progress.com/press-releases" target="_blank" data-sf-ec-immutable="">Press Releases</a></li><li><a href="https://www.progress.com/events?filter=product%5echef" target="_blank" data-sf-ec-immutable="">Events</a></li><li><a href="/careers" data-sf-ec-immutable="">Careers</a></li><li><a href="/contact-us" data-sf-ec-immutable="">Contact Us</a></li></ul></div><div class="col-3 -xl-third"><h6 class="-co-black">Using Chef</h6><ul class="List0 -vs1 -fs16"><li><a href="/training/tutorials" data-sf-ec-immutable="">LearnChef</a></li><li><a href="https://docs.chef.io/" target="_blank" data-sf-ec-immutable="">Docs</a></li><li><a href="/webinars" data-sf-ec-immutable="">Webinars</a></li><li><a href="https://discourse.chef.io/" target="_blank" data-sf-ec-immutable="">Forums</a></li><li><a href="/training" data-sf-ec-immutable="">Training</a></li><li><a href="/security" data-sf-ec-immutable="">Security</a></li><li><a href="https://github.com/chef/chef/blob/main/CONTRIBUTING.md#developer-certification-of-origin-dco" target="_blank" data-sf-ec-immutable="">Contributing to Chef</a></li><li><a href="https://www.progress.com/company/code-of-conduct" target="_blank" data-sf-ec-immutable="">Code of Conduct</a></li></ul></div><div class="col-5 -xl-third"><h6 class="-co-black">Legal</h6><ul class="List0 -vs1 -fs16"><li><a href="https://www.progress.com/legal/terms-of-use" target="_blank" data-sf-ec-immutable="">Terms &amp; Conditions</a></li><li><a href="https://www.progress.com/legal/privacy-policy" target="_blank" data-sf-ec-immutable="">Privacy Policy</a></li><li><a href="/online-master-agreement" data-sf-ec-immutable="">Online Master License and Services Agreement</a></li><li><a href="https://www.progress.com/legal/trademarks" target="_blank" data-sf-ec-immutable="">Trademark Policy</a></li><li><a href="/3rd-party-licenses" data-sf-ec-immutable="">3rd Party Software Licenses</a></li><li><a href="https://www.progress.com/legal/cookie-policy" target="_blank" data-sf-ec-immutable="">Cookie Policy</a></li></ul></div></div></div><div class="col-4 -l-half -s-three-fourths"><h6 class="-co-black -noc">Connect with us</h6><a href="/contact-us" class="Btn Btn--ghost -db -mb2" aria-label="Contact Us" data-sf-ec-immutable="">Contact Us</a> <div class="InlineItems InlineItems--social -fs24 -mb2"><a href="https://github.com/chef" target="_blank" rel="noopener noreferrer" aria-label="GitHub" data-sf-ec-immutable=""><svg width="24" height="24" viewBox="0 0 1536 1536"><path d="M394,1224q-8,9-20-3-13-11-4-19,8-9,20,3Q402,1216,394,1224Zm-42-61q9,12,0,19-8,6-17-7t0-18Q344,1150,352,1163Zm-61-60q-5,7-13,2-10-5-7-12,3-5,13-2Q294,1096,291,1103Zm31,34q-6,7-16-3-9-11-2-16,6-6,16,3Q329,1132,322,1137Zm129,112q-4,12-19,6-17-4-13-15t19-7Q454,1238,451,1249Zm63,5q0,11-16,11-17,2-17-11,0-11,16-11Q514,1241,514,1254Zm58-10q2,10-14,14t-18-8q-2-12,14-15Q570,1233,572,1244Zm964-956v960q0,119-84.5,203.5T1248,1536H1024a224.35,224.35,0,0,1-24.5-1,88.32,88.32,0,0,1-19.5-5,27.47,27.47,0,0,1-16-14.5q-5-10.5-5-27.5V1249q0-97-52-142,57-6,102.5-18t94-39q48.49-27,81-66.5t53-105Q1258,813,1258,728q0-121-79-206,37-91-8-204-28-9-81,11t-92,44l-38,24a721.92,721.92,0,0,0-384,0q-16-11-42.5-27T450,331.5Q393,309,364,318q-44,113-7,204-79,85-79,206,0,85,20.5,150T351,983q32,40,80.5,67t94,39q45.5,12,102.5,18-40,36-49,103a198,198,0,0,1-45,15q-24,5-57,5t-65.5-21.5Q379,1187,356,1146a161.33,161.33,0,0,0-48.5-52q-29.5-20-49.5-24l-20-3q-21,0-29,4.5t-5,11.5a55.07,55.07,0,0,0,9,14,72.75,72.75,0,0,0,13,12l7,5q22,10,43.5,38t31.5,51l10,23q13,38,44,61.5t67,30a427.11,427.11,0,0,0,69.5,7q33.5.49,55.5-3.5l23-4q0,38,.5,103t.5,68q0,22-11,33.5t-22,13q-11,1.5-33,1.5H288q-119,0-203.5-84.5T0,1248V288Q0,169,84.5,84.5T288,0h960q119,0,203.5,84.5T1536,288Z" fill="currentColor"></path></svg>&nbsp; </a> <a href="https://www.facebook.com/getchefdotcom" target="_blank" rel="noopener noreferrer" aria-label="Facebook" data-sf-ec-immutable=""> <svg width="24" height="24" viewBox="0 0 1536 1536"><path d="M1307,790l23-219H1132V462q0-49,15.5-68.5T1219,374h110V155H1154q-152,0-218,72T870,440V571H739V790H870v635h262V790Zm229-502v960q0,119-84.5,203.5T1248,1536H288q-119,0-203.5-84.5T0,1248V288Q0,169,84.5,84.5T288,0h960q119,0,203.5,84.5T1536,288Z" fill="currentColor"></path></svg>&nbsp; </a> <a href="https://x.com/chef" target="_blank" rel="noopener noreferrer" aria-label="X" data-sf-ec-immutable=""> <svg width="24" height="24" viewBox="0 0 24.91 24.91"><polygon fill="currentColor" points="12.61 11.26 8.85 5.88 6.84 5.88 11.5 12.55 12.09 13.38 16.07 19.09 18.08 19.09 13.19 12.1 12.61 11.26"></polygon><path fill="currentColor" d="m23.54,1.37C22.68.48,21.49-.02,20.24,0H4.67c-1.24-.02-2.44.48-3.3,1.37C.48,2.24-.02,3.43,0,4.67v15.57c-.02,1.24.48,2.44,1.37,3.3.86.89,2.06,1.39,3.3,1.37h15.57c2.58,0,4.67-2.09,4.67-4.67V4.67c.02-1.24-.48-2.44-1.37-3.3Zm-8.09,18.65l-4.04-5.87-5.05,5.87h-1.31l5.78-6.71L5.06,4.9h4.41l3.82,5.56,4.79-5.56h1.31l-5.51,6.41h0s5.99,8.71,5.99,8.71h-4.41Z"></path></svg>&nbsp; </a> <a href="https://www.linkedin.com/company/chef-software" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn" data-sf-ec-immutable=""> <svg width="24" height="24" viewBox="0 0 1536 1536"><path d="M237,1286H468V592H237ZM483,378q-1-52-36-86t-93-34q-58,0-94.5,34T223,378q0,51,35.5,85.5T351,498h1q59,0,95-34.5T483,378Zm585,908h231V888q0-154-73-233t-193-79q-136,0-209,117h2V592H595q3,66,0,694H826V898q0-38,7-56a154.36,154.36,0,0,1,45-59.5Q908,758,952,758q116,0,116,157Zm468-998v960q0,119-84.5,203.5T1248,1536H288q-119,0-203.5-84.5T0,1248V288Q0,169,84.5,84.5T288,0h960q119,0,203.5,84.5T1536,288Z" fill="currentColor"></path></svg>&nbsp; </a> <a href="https://www.youtube.com/user/getchef" target="_blank" rel="noopener noreferrer" aria-label="YouTube" data-sf-ec-immutable=""> <svg width="24" height="24" viewBox="0 0 1536 1536"><path d="M919,1175V1018q0-50-29-50-17,0-33,16v224q16,16,33,16Q919,1224,919,1175Zm184-122h66v-34q0-51-33-51t-33,51ZM532,787v70H452v423H378V857H300V787ZM733,913v367H666v-40q-39,45-76,45-33,0-42-28-6-16-6-54V913h66v270q0,24,1,26,1,15,15,15,20,0,42-31V913Zm252,111v146q0,52-7,73-12,42-53,42-35,0-68-41v36H790V787h67V948q32-40,68-40,41,0,53,42Q985,971,985,1024Zm251,129v9q0,29-2,43a94,94,0,0,1-15,40q-27,40-80,40-52,0-81-38-21-27-21-86V1032q0-59,20-86,29-38,80-38t78,38q21,28,21,86v76H1103v65q0,51,34,51,24,0,30-26,0-1,.5-7t.5-16.5V1153ZM785,329V485q0,51-32,51t-32-51V329q0-52,32-52T785,329Zm533,713q0-177-19-260-10-44-43-73.5T1180,674q-136-15-412-15-275,0-411,15-44,5-76.5,34.5T238,782q-20,87-20,260,0,176,20,260a140.53,140.53,0,0,0,42.5,73q32.5,30,75.5,35,137,15,412,15t412-15q43-5,75.5-35a140.53,140.53,0,0,0,42.5-73Q1318,1218,1318,1042ZM563,391,653,95H578L527,290,474,95H396l24,69s7.67,23,23,69q35,103,46,158V592h74Zm289,81V342q0-58-21-87-29-38-78-38-51,0-78,38-21,29-21,87V472q0,58,21,87,27,38,78,38,49,0,78-38Q852,532,852,472Zm181,120h67V222h-67V505q-22,31-42,31-15,0-16-16-1-2-1-26V222H907V515q0,37,6,55,11,27,43,27,36,0,77-45Zm503-304v960q0,119-84.5,203.5T1248,1536H288q-119,0-203.5-84.5T0,1248V288Q0,169,84.5,84.5T288,0h960q119,0,203.5,84.5T1536,288Z" fill="currentColor"></path></svg>&nbsp; </a> <a href="https://www.instagram.com/chef_software/" target="_blank" rel="noopener noreferrer" aria-label="Instagram" data-sf-ec-immutable=""> <svg width="24" height="24" viewBox="0 0 448 448"><path d="M224,170.66A53.34,53.34,0,1,0,277.36,224,53.34,53.34,0,0,0,224,170.66Zm124.71-41A54,54,0,0,0,318.3,99.25c-21-8.29-71-6.43-94.3-6.43s-73.25-1.93-94.31,6.43a54,54,0,0,0-30.41,30.41c-8.28,21-6.43,71.05-6.43,94.33S91,297.26,99.32,318.33a54,54,0,0,0,30.41,30.41c21,8.29,71,6.43,94.31,6.43s73.24,1.93,94.3-6.43a54,54,0,0,0,30.41-30.41c8.35-21,6.43-71,6.43-94.33s1.92-73.26-6.43-94.33ZM224,306a81.9,81.9,0,1,1,.2,0Zm85.38-148.3a19.14,19.14,0,1,1,19.13-19.15h0a19.1,19.1,0,0,1-19,19.18h-.07ZM400,0H48A48,48,0,0,0,0,48V400a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V48A48,48,0,0,0,400,0ZM382.88,290c-1.29,25.63-7.14,48.34-25.85,67s-41.4,24.63-67,25.85c-26.41,1.49-105.59,1.49-132,0-25.63-1.29-48.26-7.15-67-25.85S66.4,315.58,65.18,290c-1.49-26.42-1.49-105.61,0-132,1.29-25.63,7.07-48.34,25.85-67s41.47-24.56,67-25.78c26.41-1.49,105.59-1.49,132,0,25.63,1.29,48.33,7.15,67,25.85s24.63,41.42,25.85,67.05C384.37,184.44,384.37,263.56,382.88,290Z" fill="currentColor"></path></svg>&nbsp; </a> </div></div></div><hr class="-op-2 -mb4" /> <a href="https://www.progress.com" class="-mb2" data-sf-ec-immutable="" title="Progress-logo"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 120" width="144" style="width:144px;height:34px;"><path fill="#5ce500" d="M95.52,29.33h0v51a3.93,3.93,0,0,1-1.78,3.08l-1.67,1L79.35,91.76l-8.59,5-1.78,1V42.6L21.23,15,43.91,1.93,46,0.74a3.94,3.94,0,0,1,3.56,0L81,18.9l14.51,8.38v2.05ZM58.36,48.72l-9.79-5.66L25.66,29.83a4,4,0,0,0-3.56,0L1.77,41.57,0,42.6,34.49,62.51v39.83l20.3-11.73,1.79-1a3.94,3.94,0,0,0,1.78-3.08V48.72ZM0,82.43L23.86,96.21V68.63Z"></path><path fill="#4b4e52" d="M148.09,27.28h-26V97.76h11.55V70.1h14.57c15.77,0,24.45-7.7,24.45-21.69,0-6.35-2.4-21.12-24.55-21.12M160.89,48.6c0,7.95-4.12,11.19-14.24,11.19h-13V37.69h14.57c8.56,0,12.71,3.57,12.71,10.91M207,46.41l0.87,0.42-2,10.42-1.35-.42a11.32,11.32,0,0,0-3.34-.51c-10.79,0-11.67,8.59-11.67,19V97.76H178.87V46h10v6.24c2.73-4.2,6-6.37,10.37-6.9A14.55,14.55,0,0,1,207,46.41M233.29,45c-8.42,0-15.16,3.2-19.5,9.27-4.56,6.37-5.23,13.85-5.23,17.74,0,16.36,9.7,26.92,24.73,26.92,18.26,0,24.73-14.71,24.73-27.3,0-7.25-2.15-13.82-6-18.51-4.41-5.31-10.87-8.12-18.7-8.12m0,44.38c-8.37,0-13.57-6.66-13.57-17.37s5.2-17.55,13.57-17.55S247,61.23,247,71.78c0,10.83-5.24,17.56-13.66,17.56M347.89,46.41l0.87,0.42-2,10.42-1.35-.42a11.26,11.26,0,0,0-3.33-.51c-10.78,0-11.66,8.59-11.66,19V97.76H319.76V46h10v6.24c2.73-4.2,6-6.37,10.37-6.9a14.54,14.54,0,0,1,7.73,1.06m38.4,34.76-0.2.57c-2.23,6.36-7.57,7.7-11.65,7.7-8.09,0-13.3-5.37-13.81-14.09h36.59l0.13-1a31.26,31.26,0,0,0,.12-4.12c0-.34,0-0.64,0-0.93C396.93,54.78,387.48,45,374,45c-7.9,0-14.37,3.1-18.73,9a30.85,30.85,0,0,0-5.54,18c0,16,9.95,26.74,24.74,26.74,11.45,0,19.33-5.82,22.2-16.38L397,81.16h-10.7ZM361,66.05c0.9-7.17,5.81-11.73,12.79-11.73,5.33,0,11.64,3.1,12.52,11.73H361Zm-60.7-15.71c-3.45-3.58-8.06-5.39-13.76-5.39-15.69,0-22.83,13.81-22.83,26.63,0,13.16,7.06,26.44,22.83,26.44a18.33,18.33,0,0,0,13.35-5.42c0,2.28-.1,4.45-0.16,5.38-0.58,8.54-4.68,12.51-12.91,12.51-4.47,0-9.61-1.59-10.6-6l-0.22-1H265.46l0.17,1.41c1.1,9.12,9.11,14.79,20.9,14.79,10.34,0,17.7-3.9,21.28-11.26,1.73-3.55,2.6-8.72,2.6-15.37V46H300.28v4.34ZM287.19,88.49c-3.74,0-12.43-1.69-12.43-17.37,0-10.3,4.87-16.7,12.71-16.7,6.06,0,12.52,4.39,12.52,16.7,0,10.87-4.79,17.37-12.81,17.37m159.67-6.31c0,8.23-6.83,16.53-22.09,16.53-13.5,0-21.53-5.85-22.61-16.45L402,81.16h10.52L412.73,82c1.29,6.38,7.37,7.72,12.24,7.72,5.34,0,11-1.72,11-6.54,0-2.44-1.59-4.18-4.73-5.16-1.86-.55-4.15-1.2-6.56-1.87-4.16-1.16-8.47-2.38-11.12-3.29-6.56-2.35-10.33-6.93-10.33-12.56,0-10.43,10.16-15.11,20.22-15.11,13.46,0,20.42,5.07,21.3,15.49l0.09,1.07H434.5l-0.14-.82c-1-6-7-6.9-10.48-6.9-3,0-10,.53-10,5.5,0,2.25,1.93,3.91,5.89,5.06,1.18,0.33,2.94.78,5,1.31,4.22,1.09,9.48,2.46,12.13,3.37,6.59,2.32,9.93,6.67,9.93,13m49.39,0c0,8.23-6.83,16.53-22.09,16.53-13.5,0-21.53-5.85-22.61-16.45l-0.11-1.09H462L462.12,82c1.29,6.38,7.37,7.72,12.24,7.72,5.34,0,11-1.72,11-6.54,0-2.44-1.59-4.18-4.72-5.16-1.86-.55-4.15-1.2-6.57-1.87-4.16-1.16-8.46-2.38-11.11-3.29-6.57-2.35-10.33-6.93-10.33-12.56,0-10.43,10.16-15.11,20.22-15.11,13.46,0,20.42,5.07,21.29,15.49l0.09,1.07H483.9l-0.14-.82c-1-6-7-6.9-10.48-6.9-3,0-9.95.53-9.95,5.5,0,2.25,1.93,3.91,5.89,5.06,1.18,0.33,2.94.78,5,1.31,4.22,1.09,9.48,2.46,12.13,3.37,6.58,2.32,9.93,6.67,9.93,13"></path><path fill="#4b4e52" d="M504.71,51.49A7.37,7.37,0,1,1,512,44.12a7.23,7.23,0,0,1-7.29,7.37m0-13.49a6.12,6.12,0,1,0,6,6.12,5.91,5.91,0,0,0-6-6.12m-0.85,7.49v2.46h-2.17V40.21h3.62a2.58,2.58,0,0,1,2.86,2.7,2.26,2.26,0,0,1-1.49,2.34l1.77,2.7H506l-1.49-2.46h-0.68ZM505.07,42h-1.21v1.73h1.21a0.86,0.86,0,0,0,1-.85,0.88,0.88,0,0,0-1-.89"></path></svg> </a> <p class="-ff-base -fs13 -mb1">Chef is part of the Progress product portfolio. Progress is the leading provider of application development and digital experience technologies.</p><div class="row"><div class="col-8 -l-full"><ul class="InlineItems -fs18 -fw5 -pl0"><li class="-s-db"><a href="https://www.progress.com/company" target="_blank" rel="noopener" data-sf-ec-immutable="">About Us</a></li><li class="-ml2 -s-db -s-m0"><a href="/awards" data-sf-ec-immutable="">Awards</a></li><li class="-ml2 -s-db -s-m0"><a href="https://investors.progress.com/press-releases" target="_blank" rel="noopener" data-sf-ec-immutable="">Press Releases</a></li><li class="-ml2 -s-db -s-m0"><a href="https://www.progress.com/company/press-coverage" target="_blank" rel="noopener" data-sf-ec-immutable="">Media Coverage</a></li><li class="-ml2 -s-db -s-m0"><a href="/careers" data-sf-ec-immutable="">Careers</a></li><li class="-ml2 -s-db -s-m0"><a href="https://www.progress.com/company/offices" target="_blank" rel="noopener" data-sf-ec-immutable="">Offices</a></li></ul><p class="-ff-base -fs14 -fw5 -mb1">Copyright &copy; 2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.</p><p class="-ff-base -fs13">Progress and certain product names used herein are trademarks or registered trademarks of Progress Software Corporation and/or one of its subsidiaries or affiliates in the U.S. and/or other countries. See <a class="-tdu -c-black -h-op-6" href="https://www.progress.com/legal/trademarks" target="_blank" data-sf-ec-immutable="">Trademarks</a> for appropriate markings. </p></div><div class="col-4 -l-full -vab -tar -l-tal"><ul class="InlineItems -fs15 -fw5 -pl0 -mb0 -vs0"><li><a href="https://www.progress.com/trust-center" target="_blank" rel="noopener" data-sf-ec-immutable="" class="-pr1 -tdu">Security Center</a></li><li class="-ml1 -tdu"><a href="https://www.progress.com/legal" target="_blank" class="-tdu" rel="noopener" data-sf-ec-immutable="">License Agreement</a></li></ul><p class="-fs15 -mb0 -tdu"><a href="https://forms.progress.com/ccpa-subscription" target="_blank" rel="noopener" class="-fw5 -tdu -c-black -h-op-6" data-sf-ec-immutable="">Do Not Sell or Share My Personal Information</a></p><p class="-fs15">Powered by <a href="https://www.progress.com/sitefinity-cms" target="_blank" rel="noopener" class="-fw5 -tdu -c-black -h-op-6" data-sf-ec-immutable="">Progress Sitefinity</a></p></div></div></div> </section> <script type="text/javascript" src="/WebResource.axd?d=wnB2OjhYopty-dCFa4b2kF7JW_a6Rl5Sb5xAdHSsJT06YkxKod-9OLc69Cdbfi1d5vG_Yt6wGPJBRvY0WrTYe-_6T9Ubop3nLgZRp-H7gcYkOWLKgyTzf-AAeJYULDzcLjy-VjJ1a61q_71WJ_3_rmluYRwacqf5NG02Q4X61AEg0WUvryRjQM1PM-8X4wAWzAa6RWDtUXYMdXVk9gE0yLqnkSf_Bq3ZORuJKhFOuHY1&amp;t=638412637940000000"> </script><script data-sf-pers-id="11d3209e-d34c-4d15-a5a8-6b3787ba3cf4" data-sf-pers-raise-events="True" data-sf-pers-page-node-id="ae5de475-3c84-4013-926b-9b5953b6a997" data-sf-pers-page-data-id="ac6928ec-0289-40de-8d19-0e74ed98a966" data-sf-pers-page-node-key="AE5DE475-3C84-4013-926B-9B5953B6A997/4e802ee8-4136-4a06-9fea-937635e4717b/SitefinitySiteMap" data-sf-app-path="/" data-sf-loaded-scripts="['https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js', 'https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/3.4.1/jquery-migrate.min.js', '/Frontend-Assembly/Web.Widgets.SEO/Mvc/Scripts/Shared/referrer-policy.min.js?package=PureMVC&v=MS4wLjAuMzc4Mjc%3d', 'https://d2i1toup5z0rfd.cloudfront.net/cache/415029cae6bd80b18e45101e7380ced72f2909af/js/polyfills.min.js', 'https://d2i1toup5z0rfd.cloudfront.net/cache/45ad6efac379417912f8fbb0a92e07ecd4c62689/js/all.min.js']"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" type="text/javascript"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/3.4.1/jquery-migrate.min.js" type="text/javascript"></script> <script type="text/javascript"> var oneTrustHelper = (function () { function evalGTMScript() { var gtmScript = document.getElementById("GTMScript"); gtmScript.type = "text/javascript"; gtmScript.classList.remove("optanon-category-1"); eval(gtmScript.innerHTML); }; return { gtmFallback: function () { console.warn('OneTrust not loaded.'); if (document.readyState !== 'loading') { evalGTMScript(); } else { document.addEventListener('readystatechange', function () { if (document.readyState === 'interactive') { evalGTMScript(); } }); }; } }; })(); </script> <script onerror="oneTrustHelper.gtmFallback()" src="https://cdn.cookielaw.org/consent/e231efa5-3ed9-4b92-96bc-f4c0872ca486-test/otSDKStub.js" data-language="en" type="text/javascript" charset="UTF-8" data-domain-script="e231efa5-3ed9-4b92-96bc-f4c0872ca486-test"></script> <script type="text/javascript"> (function (w) { w.OptanonGroups = {"StrictlyNecessaryCookies":"1","PerformanceCookies":"2","FunctionalCookies":"3","TargetingCookies":"4"}; w.isOptanonGroupActive = function (groupId, explicit) { if (!w.OptanonActiveGroups) return false; var groupMatchKey = ',' + groupId + ','; return w.OptanonActiveGroups.indexOf(groupMatchKey) !== -1; } function toggleSitefinityTrackingConsent() { var performanceCookiesGroupId = w.OptanonGroups.PerformanceCookies; var isPerformanceCookiesGroupIdActive = w.isOptanonGroupActive(performanceCookiesGroupId, true); if (w.TrackingConsentManager) { w.TrackingConsentManager.updateUserConsent(isPerformanceCookiesGroupIdActive); } }; var trackingScriptsQueue = []; w.invokeTrackingScript = function (thisReference, trackingGroup, functionReference) { if (isOptanonGroupActive(trackingGroup, true)) { functionReference.call(thisReference); } else { trackingScriptsQueue.push({ thisReference: thisReference, trackingGroup: trackingGroup, functionReference: functionReference }); } } var isOptanonToggled = false; var preferenceChangeHandlerAdded = false; w.OptanonWrapper = function () { var newTrackingScriptsQueue = []; for (var i = 0; i < trackingScriptsQueue.length; i++) { var trackingScriptData = trackingScriptsQueue[i]; if (isOptanonGroupActive(trackingScriptData.trackingGroup, true)) { trackingScriptData.functionReference.call(trackingScriptData.thisReference); } else { newTrackingScriptsQueue.push(trackingScriptData); } } trackingScriptsQueue = newTrackingScriptsQueue; if (!isOptanonToggled && w.location.hash === '#cookie-settings' && true) { isOptanonToggled = true; Optanon.ToggleInfoDisplay(); } if(!preferenceChangeHandlerAdded){ OneTrust.OnConsentChanged(function() { // Trigger cookie check process after user makes changes to allowed cookie groups from the OneTrust cookie settings dialog. $.ajax( { url: '/webapi/CookiePreferences/Update', type: 'HEAD' }); }); preferenceChangeHandlerAdded = true; } toggleSitefinityTrackingConsent(); } })(window); </script> <script id="GTMScript" type="text/plain" class="optanon-category-1" >(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-NS7D7G');</script> <script src='https://d6vtbcy3ong79.cloudfront.net/external-assets/1.0.27/utils/store-lead-data.min.js' type="text/plain" class="optanon-category-2"> </script> <script type="text/javascript" defer src='/jsbundle/browsersession?v=tcPOfRs72PHBT4ETxfZH-MdC4rhmdlgJ9r1ORpYO_0Q1'></script> <script src="/Frontend-Assembly/Web.Widgets.SEO/Mvc/Scripts/Shared/referrer-policy.min.js?package=PureMVC&amp;v=MS4wLjAuMzc4Mjc%3d" type="text/javascript"></script><script src="https://d2i1toup5z0rfd.cloudfront.net/cache/415029cae6bd80b18e45101e7380ced72f2909af/js/polyfills.min.js" type="text/javascript"></script><script src="https://d2i1toup5z0rfd.cloudfront.net/cache/45ad6efac379417912f8fbb0a92e07ecd4c62689/js/all.min.js" type="text/javascript"></script><script type="text/plain" class="optanon-category-2"> (function() { var script = '//s1325.t.eloqua.com/visitor/v200/svrGP?pps=70&siteid=1325'; (function getScript(source, callback) { var script = document.createElement('script'); var prior = document.getElementsByTagName('script')[0]; script.async = 1; prior.parentNode.insertBefore(script, prior); script.onload = script.onreadystatechange = function( _, isAbort ) { if(isAbort || !script.readyState || /loaded|complete/.test(script.readyState) ) { script.onload = script.onreadystatechange = null; script = undefined; if(!isAbort) { if(callback) callback(); } } }; script.src = source; })(script, function() { if (typeof GetElqCustomerGUID == 'function') { var userId = GetElqCustomerGUID(); document.cookie = 'elqUserId=' + userId + '; path=/;SameSite=Lax;'; } }); })(); </script><script type="text/javascript"> (function() { if (window._dataLayerTimeout) { clearTimeout(window._dataLayerTimeout); } window._dataLayerTaxLoadedEvent = {"tax_pagenode_products":"chef","event":"tax_loaded"}; window._dataLayerTimeout = setTimeout(function() { window.dataLayer = window.dataLayer || []; window.dataLayer.push(window._dataLayerTaxLoadedEvent); }); })(); </script><script type="text/javascript"> (function() { if (window._dataLayerTimeout) { clearTimeout(window._dataLayerTimeout); } window._dataLayerTaxLoadedEvent = {"tax_pagenode_products":"chef-infra,chef-automate,chef-inspec","event":"tax_loaded","tax_resource_contenttype":"customer-story"}; window._dataLayerTimeout = setTimeout(function() { window.dataLayer = window.dataLayer || []; window.dataLayer.push(window._dataLayerTaxLoadedEvent); }); })(); </script><script type="application/json" id="PersonalizationTracker"> {"IsPagePersonalizationTarget":false,"IsUrlPersonalizationTarget":false,"PageId":"ae5de475-3c84-4013-926b-9b5953b6a997"} </script><script type="text/javascript" src="/WebResource.axd?d=NjxTqR2bqTw1rewxxlkHPne7wEMf8WdSHVNkpykxDiftDmdvziwtcCoYNKprF5asAczZ0ZiDwlp8Zh7zE8oiZpj5ua6BvpiDxr-zb3aexvWD6GOYcwcRQLOftdbfFPsd5Re3GYsrZYqBs3uKY6fVKoI4sbgmnJ29UtmOwscN1TgvHEQVQ4CiCZp4bEQbcQUvw9n9pMVuivrEsSbWUg9LCI9WKEI8rVI2PwSfh44po441&amp;t=638412637940000000"> </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10