mirror of
https://github.com/fleetdm/fleet
synced 2026-05-24 09:28:54 +00:00
modern device management image update <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Style** * Updated feature image assets on multiple pages with higher resolution variants <!-- end of auto-generated comment: release notes by coderabbit.ai -->
556 lines
24 KiB
Text
Vendored
556 lines
24 KiB
Text
Vendored
<div id="fleet-gitops" v-cloak>
|
||
<div purpose="page-container">
|
||
<div purpose="page-hero">
|
||
<div purpose="hero-text">
|
||
<div>
|
||
<h4>Infrastructure as code</h4>
|
||
<h1>Manage devices as code</h1>
|
||
</div>
|
||
<p>See every change, undo any error, repeat every success. Define your fleet in version-controlled YAML. Review changes in pull requests. Let Fleet enforce the desired state.</p>
|
||
<div purpose="button-row">
|
||
<a purpose="cta-button" class="btn btn-primary" href="/whitepapers/modern-endpoint-management-managing-devices-as-code">Read the whitepaper</a>
|
||
<animated-arrow-button href="/gitops-workshop">Free in-person workshop</animated-arrow-button>
|
||
</div>
|
||
</div>
|
||
<div purpose="hero-image">
|
||
<img alt="A report being added to Fleet with GitOps" src="/images/infrastructure-as-code-hero-504x378@2x.png">
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div purpose="page-section">
|
||
<div purpose="section-title">
|
||
<h2>ClickOps does not scale</h2>
|
||
<p>Most device management happens through a GUI: click, configure, repeat. That works at small scale. As your organization grows, manual processes create problems that compound.</p>
|
||
</div>
|
||
<div purpose="features-section">
|
||
<div purpose="feature">
|
||
<h5>No record of intent</h5>
|
||
<p>Audit logs show who changed a setting and when, not why, what the old value was, or whether it was tested.</p>
|
||
</div>
|
||
<div purpose="feature">
|
||
<h5>Configuration drift</h5>
|
||
<p>One engineer tweaks a setting. Another makes a conflicting change. Six months later, what’s "standard" is unclear.</p>
|
||
</div>
|
||
<div purpose="feature">
|
||
<h5>Knowledge leaves with people</h5>
|
||
<p>Configuration knowledge lives in the minds of admins. When someone leaves, undocumented context is lost.</p>
|
||
</div>
|
||
<div purpose="feature">
|
||
<h5>Compliance audits take too long</h5>
|
||
<p>Proving compliance means gathering screenshots, exporting reports, and reconstructing timelines from scattered logs.</p>
|
||
</div>
|
||
<div purpose="feature">
|
||
<h5>Teams stay reactive</h5>
|
||
<p>Repetitive GUI tasks consume time that could go toward higher-priority work.</p>
|
||
</div>
|
||
<div purpose="feature">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<%# Quote section %>
|
||
<div purpose="page-section">
|
||
<div purpose="section-quote">
|
||
<div purpose="quote-image">
|
||
<img alt="Fastly logo" src="/images/fastly-logo-104x40@2x.png">
|
||
</div>
|
||
<p purpose="quote-text">"The shift to GitOps has modernized our operations, giving us the agility and change control we needed, giving leadership real-time confidence in device health and compliance."</p>
|
||
<div purpose="quote-author-info">
|
||
<div purpose="quote-author-image">
|
||
<img alt="Dan Jackson" src="/images/testimonial-author-dan-jackson-48x48@2x.png">
|
||
</div>
|
||
<div purpose="name-and-title">
|
||
<p purpose="author-name">Dan Jackson</p>
|
||
<p purpose="author-title">Sr Manager Systems Engineering, Fastly</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div purpose="page-section">
|
||
<div purpose="section-title">
|
||
<h2>Less manual work, faster recovery, <br>simpler compliance.</h2>
|
||
<p>When your device configurations live in Git, every change is reviewable, reversible, and documented by default.</p>
|
||
</div>
|
||
<div purpose="two-column-features">
|
||
<div purpose="feature">
|
||
<h5>Scale without adding headcount</h5>
|
||
<p>Manage thousands of devices with the same team. Automation handles the repetitive work, so your team can focus on higher-value projects.</p>
|
||
</div>
|
||
<div purpose="feature">
|
||
<h5>Recover in minutes, not hours</h5>
|
||
<p>Configuration for your entire fleet lives in Git. If a change causes an issue, revert the last commit. Recovery takes minutes.</p>
|
||
</div>
|
||
<div purpose="feature">
|
||
<h5>Pass audits with version history</h5>
|
||
<p>Every change is tracked with a Git commit. Auditors get a commit history, not screenshots. Compliance stays continuous.</p>
|
||
</div>
|
||
<div purpose="feature">
|
||
<h5>Onboard engineers faster</h5>
|
||
<p>New team members read the repository to understand device configurations. No Slack threads to dig through, no senior admin to shadow.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<%# Feature with images sections %>
|
||
<div purpose="page-section">
|
||
<div purpose="section-title">
|
||
<div>
|
||
<h4>Core methodology</h4>
|
||
<h2>Define the state. Let Fleet enforce it.</h2>
|
||
</div>
|
||
<p>Infrastructure as code replaces ClickOps with version-controlled configuration files. You describe what "correct" looks like. Fleet brings devices into alignment.</p>
|
||
</div>
|
||
|
||
<div purpose="feature-with-image">
|
||
<div purpose="feature-image">
|
||
<img alt="An example of Fleet's YAML configuration" src="/images/infrastructure-as-code-feature-image-1-504x378@2x.png">
|
||
</div>
|
||
<div purpose="feature-text">
|
||
<h5>Declarative, not imperative</h5>
|
||
<p>Define the desired state in YAML. Fleet compares and applies only the changes needed. No coding required. YAML files are structured, readable, and reusable across your organization.</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="feature-with-image" class="reverse">
|
||
<div purpose="feature-image">
|
||
<img alt="Single source of truth" src="/images/infrastructure-as-code-feature-image-2-504x378@2x.png">
|
||
</div>
|
||
<div purpose="feature-text">
|
||
<h5>Single source of truth</h5>
|
||
<p>Your Git repository defines the correct state of every device. All changes flow through it. If someone changes a setting locally, Fleet restores the approved state. The repository stays as the single source of truth.</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="feature-with-image">
|
||
<div purpose="feature-image">
|
||
<img alt="Idempotent by design" src="/images/infrastructure-as-code-feature-image-3-504x378@2x.png">
|
||
</div>
|
||
<div purpose="feature-text">
|
||
<h5>Idempotent by design</h5>
|
||
<p>Push the same YAML to Fleet ten times. The result is identical every time. No side effects, no accidental changes, no surprises during a fleet-wide update. Failed runs can be retried without risk.</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="feature-with-image" class="reverse">
|
||
<div purpose="feature-image">
|
||
<img alt="Keep knowledge in code" src="/images/infrastructure-as-code-feature-image-4-504x378@2x.png">
|
||
</div>
|
||
<div purpose="feature-text">
|
||
<h5>Keep knowledge in code</h5>
|
||
<p>Every configuration is version-controlled. See who changed it, when, and why. Knowledge stays when people leave.</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="feature-with-image">
|
||
<div purpose="feature-image">
|
||
<img alt="Policy as code" src="/images/infrastructure-as-code-feature-image-5-504x378@2x.png">
|
||
</div>
|
||
<div purpose="feature-text">
|
||
<h5>Policy as code</h5>
|
||
<p>Define security policies in code. Fleet checks every device and blocks rollout if a policy fails, so you can catch issues before they reach devices.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div purpose="page-section">
|
||
<div purpose="section-title">
|
||
<div>
|
||
<h4>The workflow</h4>
|
||
<h2>Deploy with built-in checkpoints</h2>
|
||
</div>
|
||
<p>Every change passes through a structured pipeline before it reaches devices. Peer review, validation, and testing are built into the process.</p>
|
||
</div>
|
||
<div purpose="feature-with-image">
|
||
<div purpose="feature-text">
|
||
<div purpose="list-item">
|
||
<h5>Pull requests as quality gates</h5>
|
||
<p>Every change is peer-reviewed before reaching devices. No unreviewed changes reach production.</p>
|
||
</div>
|
||
<div purpose="list-item">
|
||
<h5>Continuous reconciliation</h5>
|
||
<p>Fleet compares actual device state against Git. If a device drifts, Fleet restores the approved configuration automatically.</p>
|
||
</div>
|
||
<div purpose="list-item">
|
||
<h5>Pull-based security</h5>
|
||
<p>Devices pull configurations from Fleet. Your Git repository never holds device credentials. Smaller blast radius.</p>
|
||
</div>
|
||
</div>
|
||
<div purpose="feature-image">
|
||
<img alt="An image showing the process of the Fleet infrastructure as code workflow. An IT admin pushes a device management profile to GitHub, and an IT admin approves the new profile. When the updated profile is merged, the CI/CD runner sends the profile to a Fleet server. The Fleet server then sends the updated profile to a managed device and verifies the result." src="/images/infrastructure-as-code-feature-image-6-504x378@2x.png">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="page-section">
|
||
<div purpose="section-title">
|
||
<h2>From clicks to commits</h2>
|
||
<p>See how infrastructure as code compares to the way most organizations manage devices today.</p>
|
||
</div>
|
||
|
||
<div purpose="section-table">
|
||
<table purpose="features-table">
|
||
<thead>
|
||
<tr>
|
||
<th scope="col" aria-label="Capability"> </th>
|
||
<th scope="col">ClickOps</th>
|
||
<th scope="col">Fleet GitOps (IaC)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>Primary interface</td>
|
||
<td>GUI or web console</td>
|
||
<td>
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Git repository and YAML</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Source of truth</td>
|
||
<td>Spreadsheets or vendor database</td>
|
||
<td>
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Version-controlled files</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Change control</td>
|
||
<td>Verbal approval or action logs</td>
|
||
<td>
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Pull requests with peer review</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Drift management</td>
|
||
<td>Manual or periodic reporting</td>
|
||
<td>
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Continuous self-healing</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Rollback</td>
|
||
<td>Manual redo or backups/restore</td>
|
||
<td>
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Revert a Git commit</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Audit trail</td>
|
||
<td>Fragmented or click history</td>
|
||
<td>
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Immutable commit history</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<div purpose="mobile-features-table">
|
||
<div purpose="mobile-table">
|
||
<div purpose="feature-name">
|
||
Primary interface
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">ClickOps</div>
|
||
<div purpose="comparison-status">GUI or web console</div>
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">Fleet GitOps (IaC)</div>
|
||
<div purpose="comparison-status">
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Git repository and YAML</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="mobile-table">
|
||
<div purpose="feature-name">
|
||
Source of truth
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">ClickOps</div>
|
||
<div purpose="comparison-status">Spreadsheets or vendor database</div>
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">Fleet GitOps (IaC)</div>
|
||
<div purpose="comparison-status">
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Version-controlled files</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="mobile-table">
|
||
<div purpose="feature-name">
|
||
Change control
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">ClickOps</div>
|
||
<div purpose="comparison-status">Verbal approval or action logs</div>
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">Fleet GitOps (IaC)</div>
|
||
<div purpose="comparison-status">
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Pull requests with peer review</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="mobile-table">
|
||
<div purpose="feature-name">
|
||
Drift management
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">ClickOps</div>
|
||
<div purpose="comparison-status">Manual or periodic reporting</div>
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">Fleet GitOps (IaC)</div>
|
||
<div purpose="comparison-status">
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Continuous self-healing</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="mobile-table">
|
||
<div purpose="feature-name">
|
||
Rollback
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">ClickOps</div>
|
||
<div purpose="comparison-status">Manual redo or backups/restore</div>
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">Fleet GitOps (IaC)</div>
|
||
<div purpose="comparison-status">
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Revert a Git commit</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="mobile-table">
|
||
<div purpose="feature-name">
|
||
Audit trail
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">ClickOps</div>
|
||
<div purpose="comparison-status">Fragmented or click history</div>
|
||
</div>
|
||
<div purpose="row">
|
||
<div purpose="comparison-name">Fleet GitOps (IaC)</div>
|
||
<div purpose="comparison-status">
|
||
<div purpose="fleet-cell">
|
||
<img alt="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
|
||
<p>Immutable commit history</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div purpose="page-section">
|
||
<div purpose="section-title">
|
||
<div>
|
||
<h4>What makes Fleet different</h4>
|
||
<h2>GitOps that ships with the product</h2>
|
||
</div>
|
||
<p>Most device management tools have an API. Some have community Terraform providers. Fleet is the only MDM where GitOps is a first-party, supported workflow that covers the entire management surface.</p>
|
||
</div>
|
||
<div purpose="features-section">
|
||
<div purpose="feature">
|
||
<h5>Terraform not required</h5>
|
||
<p>Fleet ships <a href="/guides/fleetctl">fleetctl</a>, a CLI that reads YAML and applies it to your Fleet server. Connect it to your CI/CD runner for a complete GitOps pipeline.</p>
|
||
</div>
|
||
<div purpose="feature">
|
||
<h5>Full console coverage</h5>
|
||
<p>Fleet's GitOps controls profiles, policies, software, queries, labels, and settings. Manage your entire admin console in code, not a subset.</p>
|
||
</div>
|
||
<div purpose="feature">
|
||
<h5>Works with any Git provider</h5>
|
||
<p>GitHub, GitLab, Bitbucket, or any Git-compatible repository. Your choice of toolchain, not ours. No vendor-specific cloud subscription required.</p>
|
||
</div>
|
||
<div purpose="feature" class="fixed-width">
|
||
<h5>Every operating system</h5>
|
||
<p>The same GitOps workflow manages macOS, Windows, Linux, iOS, iPadOS, and Android. One repository. One workflow. Every platform.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div purpose="page-section" class="banner-section">
|
||
<div purpose="section-title">
|
||
<div>
|
||
<h4>AI-accelerated IT</h4>
|
||
<h2>GitOps is the foundation for AI-assisted device management</h2>
|
||
</div>
|
||
<p>Without GitOps, there is no path to AI-accelerated device management. With GitOps, everyone can contribute. IT stays the human in the loop.</p>
|
||
</div>
|
||
<div purpose="feature-with-image">
|
||
<div purpose="feature-text">
|
||
<h3>Skip the ticket queue</h3>
|
||
<p>Move faster with fewer handoffs. Propose changes in natural language using your existing LLM, including air-gapped models.</p>
|
||
<p>Connect tools like Kilo Code with Slack or Microsoft Teams. Engineers, security, and operations teams propose changes. IT reviews and approves before anything ships.</p>
|
||
</div>
|
||
<div purpose="feature-image">
|
||
<img alt="An example of an AI-assisted Gitops workflow" src="/images/mdm-modern-change-management-600x435@2x.png">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="page-section">
|
||
<div purpose="section-title" class="text-center w-100">
|
||
<h2>Organizations managing devices as code</h2>
|
||
</div>
|
||
<div purpose="cards">
|
||
<div purpose="card">
|
||
<img alt="Stripe logo" src="/images/stripe-logo-96x40@2x.png">
|
||
<p>Stripe moved 10,000 Macs to Fleet, saving hundreds of thousands annually.</p>
|
||
<a href="/case-study/stripe">Read their story</a>
|
||
</div>
|
||
|
||
|
||
<%# <div purpose="card">
|
||
<p><strong>Global social media platform</strong></p>
|
||
<p>Global social media platform migrates to Fleet.</p>
|
||
<a href="/case-study/">Read their story</a>
|
||
</div> %>
|
||
|
||
<div purpose="card">
|
||
<img alt="Foursquare logo" src="/images/foursquare-logo-212x40@2x.png">
|
||
<p>Foursquare cut costs and gained 114% ROI with Fleet.</p>
|
||
<a href="/case-study/foursquare">Read their story</a>
|
||
</div>
|
||
|
||
<div purpose="card">
|
||
<p><strong>Security and authentication platform</strong></p>
|
||
<p>Worldwide security and authentication platform chooses Fleet for Linux management.</p>
|
||
<a href="/case-study/worldwide-security-and-authentication-platform">Read their story</a>
|
||
</div>
|
||
|
||
<div purpose="card">
|
||
<img alt="Fastly logo" src="/images/fastly-logo-104x40@2x.png">
|
||
<p>Fastly gains visibility into all endpoints and critical infrastructure around the world.</p>
|
||
<a href="/case-study/fastly">Read their story</a>
|
||
</div>
|
||
|
||
<div purpose="card">
|
||
<p><strong>Online gaming platform</strong></p>
|
||
<p>Large gaming company enhances server observability with Fleet.</p>
|
||
<a href="/case-study/online-gaming-platform">Read their story</a>
|
||
</div>
|
||
|
||
<div purpose="card">
|
||
<div purpose="logo">
|
||
<img alt="Fastly logo" src="/images/fastly-logo-104x40@2x.png">
|
||
</div>
|
||
<p purpose="quote">
|
||
The shift to GitOps has modernized our operations, giving us the agility and change control we needed, giving leadership real-time confidence in device health and compliance.
|
||
</p>
|
||
<div purpose="quote-author-info" class="d-flex flex-row align-items-center">
|
||
<div purpose="profile-picture">
|
||
<img alt="Dan Jackson" src="/images/dan-jackson-120x120@2x.png">
|
||
</div>
|
||
<div class="d-flex flex-column align-self-top">
|
||
<p purpose="name" class="font-weight-bold m-0">Dan Jackson</p>
|
||
<p purpose="job-title" class="m-0">Sr Manager Systems Engineering, Fastly</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="card">
|
||
<div purpose="logo">
|
||
<img alt="Faire logo" src="/images/faire-logo-192x40@2x.png">
|
||
</div>
|
||
<p purpose="quote">
|
||
Fleet has opened a lot of opportunities for us. My team is loving managing devices via GitOps, and the built-in support for CIS benchmarks has made it easy to enforce these on our devices.
|
||
</p>
|
||
<div purpose="quote-author-info" class="d-flex flex-row align-items-center">
|
||
<div purpose="profile-picture">
|
||
<img alt="Jeremy Baker" src="/images/jeremy-baker-120x120@2x.png">
|
||
</div>
|
||
<div class="d-flex flex-column align-self-top">
|
||
<p purpose="name" class="font-weight-bold m-0">Jeremy Baker</p>
|
||
<p purpose="job-title" class="m-0">Engineering Manager, Faire</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div purpose="card" style="height: min-content">
|
||
<div purpose="logo">
|
||
<img alt="Thumbtack logo" src="/images/thumbtack-logo-197x40@2x.png">
|
||
</div>
|
||
<p purpose="quote">
|
||
I really like how robust Fleet's API is. (using GitOps)
|
||
</p>
|
||
<div purpose="quote-author-info" class="d-flex flex-row align-items-center">
|
||
<div purpose="profile-picture">
|
||
<img alt="Adam Anklewicz" src="/images/adam-anklewicz-120x120@2x.png">
|
||
</div>
|
||
<div class="d-flex flex-column align-self-top">
|
||
<p purpose="name" class="font-weight-bold m-0">Adam Anklewicz</p>
|
||
<p purpose="job-title" class="m-0">Manager, IT Endpoint Engineering, Thumbtack</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div purpose="page-container">
|
||
<div purpose="page-section">
|
||
<div purpose="bottom-cta">
|
||
<div>
|
||
<h4>Get started</h4>
|
||
<h2>Infrastructure as code for device management</h2>
|
||
</div>
|
||
<div purpose="button-row">
|
||
<a purpose="cta-button" class="btn btn-primary" href="/whitepapers/modern-endpoint-management-managing-devices-as-code">Read the whitepaper</a>
|
||
<animated-arrow-button href="/gitops-workshop">Free in-person workshop</animated-arrow-button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<%/* Cloud city banner */%>
|
||
<parallax-city></parallax-city>
|
||
</div>
|
||
<%- /* Expose server-rendered data as window.SAILS_LOCALS :: */ exposeLocalsToBrowser() %>
|