SlideShare a Scribd company logo
Maintenance Mode
Gilbert Sanchez
Señor Systems Engineer
Leveraging Chef to Schedule Patching, Reboot, etc.
• Me:
• GitHub: https://github.com/HeyItsGilbert
• Twitter @HeyItsGilbertS
• Facebook:
• Prod: https://github.com/facebook/chef-cookbooks
• CPE: https://github.com/facebook/IT-CPE
Who?
• Manage Corporate Windows Servers
• Automate patch deployment
• Image builds
• Collaborate with Client Platform Engineering team
What is it that you do here?
A Few Facebook-isms
• Initialization Cookbooks (See fb_init, cpe_init)
• API cookbooks
• Sharding
It's Not You, Its Me
Facebook Approach
Where did it all go wrong?
Classic Recipe for Disaster
• Small change
• Delete deprecated code
• Friday night
• Looming deadlines
# In cookbook A
reboot "PostInstallReboot" do
action :nothing
end
----
# In cookbook B
windows_package "WMF5" do
notify "reboot[PostInstallReboot]"
end
Danger Zone
Reboot Resources
Phase 1: Planning
• Operational tasks to patch machines that failed
vulnerability scans
• Deploying software that required reboots
• Unknown responsibility throughout the patching
process
Current State
What are the current pain points?
• Opt Out - Some teams want/need to be able to
patch on their own schedule
• High Availability - Don't reboot all the machines at
the same time
• PST? EST? - How to handle multi region services
Requirements
What will our end users need from us?
• Who doesn't love calculating time!
• Offer a UTC solution
Timezones?
Source: https://en.wikipedia.org/wiki/Time_zone
Phase 2: Execution
• New apps installed?
• New patches installed?
• This would have prevented the previous issue.
• Leverage reboot_pending?
Pending Reboots
1. Read your
attributes
2. Drop your scripts/
modules/etc.
3. Setup your
scheduler
Chef Custom Resource
Run time vs Compile time is critical
Source: https://docs.chef.io/attributes.html
• Chef is config management, don't use as a
scheduler
• Leverage the appropriate scheduler on your OS
• Calculating time is hard for you, and harder for your
users
• Leave a file on disk for them to check
Warnings
Classic Pitfalls
default['your_cookbook'] = {
'auto_reboot' => true,
'day' => 'Saturday',
'duration' => 5, # 5hrs
'opt_out' => false,
'start_hour' => 1, # 1am
'trusted_tester' => false,
'utc' => false,
}
Default Options
Possible Attributes
# User has their own special process? FINE!

node.default['your_cookbook']['opt_out'] = True
# Midweek reboots at noon but 1hr window
node.default['your_cookbook']['day'] = 'Wednesday'
node.default['your_cookbook']['start_hour'] = 12
node.default['your_cookbook']['duration'] = 1
Cookbook for my set of machines
Customizing
Phase 3: More Work
• Roll out to your test boxes
• Don't have any? Get some now.
• Have your owners set their attributes even just to
verify
Ready to Roll
Code is ready. What's next?
• See cpe_utils cookbook in supermarket
• Leverage shard_over_a_week_*
Slow Roll
Catch possible errors with sharing
Whats next from us?
• Working on creating a custom shutdown option
• Useful for larger services
• Open Source!
More ToDo's
Yay!
• Thanks to the team!
• Specifically Korey Shirey and Kamber Borders!
Shout Outs
Questions?
Maintenance Mode: Leveraging Chef to Schedule Patching, Reboot, etc.

More Related Content

What's hot

Agilebuddy Tour Sprint Page Final
Agilebuddy Tour Sprint Page FinalAgilebuddy Tour Sprint Page Final
Agilebuddy Tour Sprint Page Final
agilebuddy
 
Continuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two ApproachesContinuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two Approaches
Ross Snyder
 
Windows Configuration Management: Managing Packages, Services, & Power Shell-...
Windows Configuration Management: Managing Packages, Services, & Power Shell-...Windows Configuration Management: Managing Packages, Services, & Power Shell-...
Windows Configuration Management: Managing Packages, Services, & Power Shell-...
Puppet
 
The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013
D
 
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
D
 
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
D
 

What's hot (20)

Agilebuddy Tour Sprint Page Final
Agilebuddy Tour Sprint Page FinalAgilebuddy Tour Sprint Page Final
Agilebuddy Tour Sprint Page Final
 
Development, Deployment and Collaboration at Etsy
Development, Deployment and Collaboration at EtsyDevelopment, Deployment and Collaboration at Etsy
Development, Deployment and Collaboration at Etsy
 
Continuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two ApproachesContinuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two Approaches
 
DevTools at Etsy
DevTools at EtsyDevTools at Etsy
DevTools at Etsy
 
Vagrant and chef
Vagrant and chefVagrant and chef
Vagrant and chef
 
Google App Engine: For PHP Developers
Google App Engine: For PHP DevelopersGoogle App Engine: For PHP Developers
Google App Engine: For PHP Developers
 
Plugin for CakePHP2.0
Plugin for CakePHP2.0Plugin for CakePHP2.0
Plugin for CakePHP2.0
 
Perfect workflow with vagrant
Perfect workflow with vagrantPerfect workflow with vagrant
Perfect workflow with vagrant
 
Chef for beginners module 1
Chef for beginners   module 1Chef for beginners   module 1
Chef for beginners module 1
 
First Real Pull Request Ever
First Real Pull Request EverFirst Real Pull Request Ever
First Real Pull Request Ever
 
Chef for beginners module 5
Chef for beginners   module 5Chef for beginners   module 5
Chef for beginners module 5
 
Windows Configuration Management: Managing Packages, Services, & Power Shell-...
Windows Configuration Management: Managing Packages, Services, & Power Shell-...Windows Configuration Management: Managing Packages, Services, & Power Shell-...
Windows Configuration Management: Managing Packages, Services, & Power Shell-...
 
Testing all your code through HipChat in Docker
Testing all your code through HipChat in DockerTesting all your code through HipChat in Docker
Testing all your code through HipChat in Docker
 
Build r
Build rBuild r
Build r
 
The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013
 
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
 
DIY Java & Kubernetes
DIY Java & KubernetesDIY Java & Kubernetes
DIY Java & Kubernetes
 
Puppet Release Workflows at Jive Software
Puppet Release Workflows at Jive SoftwarePuppet Release Workflows at Jive Software
Puppet Release Workflows at Jive Software
 
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
 
Pipe your script to slack
Pipe your script to slackPipe your script to slack
Pipe your script to slack
 

Similar to Maintenance Mode: Leveraging Chef to Schedule Patching, Reboot, etc.

Iterative Development Process
Iterative Development ProcessIterative Development Process
Iterative Development Process
Ajay Shrivastava
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5
Chef
 
Emerging chef patterns and practices
Emerging chef patterns and practicesEmerging chef patterns and practices
Emerging chef patterns and practices
Owain Perry
 
Atmosphere 2014: Really large scale systems configuration - Phil Dibowitz
Atmosphere 2014: Really large scale systems configuration - Phil DibowitzAtmosphere 2014: Really large scale systems configuration - Phil Dibowitz
Atmosphere 2014: Really large scale systems configuration - Phil Dibowitz
PROIDEA
 

Similar to Maintenance Mode: Leveraging Chef to Schedule Patching, Reboot, etc. (20)

Chef Jumpstart
Chef JumpstartChef Jumpstart
Chef Jumpstart
 
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
 
Puppet Development Workflow
Puppet Development WorkflowPuppet Development Workflow
Puppet Development Workflow
 
Iterative Development Process
Iterative Development ProcessIterative Development Process
Iterative Development Process
 
Deploying systemd at scale
Deploying systemd at scaleDeploying systemd at scale
Deploying systemd at scale
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5
 
What Makes a Good Cookbook?
What Makes a Good Cookbook?What Makes a Good Cookbook?
What Makes a Good Cookbook?
 
Production Ready WordPress #WPLDN
Production Ready WordPress #WPLDNProduction Ready WordPress #WPLDN
Production Ready WordPress #WPLDN
 
Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)
 
Continuous feature-development
Continuous feature-developmentContinuous feature-development
Continuous feature-development
 
Emerging chef patterns and practices
Emerging chef patterns and practicesEmerging chef patterns and practices
Emerging chef patterns and practices
 
stackconf 2022: Infrastructure Automation (anti) patterns
stackconf 2022: Infrastructure Automation (anti) patternsstackconf 2022: Infrastructure Automation (anti) patterns
stackconf 2022: Infrastructure Automation (anti) patterns
 
Infrastructure as Code Patterns
Infrastructure as Code PatternsInfrastructure as Code Patterns
Infrastructure as Code Patterns
 
Task runners + theming automating your workflow
Task runners + theming  automating your workflowTask runners + theming  automating your workflow
Task runners + theming automating your workflow
 
Production Ready WordPress - WC Utrecht 2017
Production Ready WordPress  - WC Utrecht 2017Production Ready WordPress  - WC Utrecht 2017
Production Ready WordPress - WC Utrecht 2017
 
Alm with tfs 2013
Alm with tfs 2013Alm with tfs 2013
Alm with tfs 2013
 
Atmosphere 2014: Really large scale systems configuration - Phil Dibowitz
Atmosphere 2014: Really large scale systems configuration - Phil DibowitzAtmosphere 2014: Really large scale systems configuration - Phil Dibowitz
Atmosphere 2014: Really large scale systems configuration - Phil Dibowitz
 
Prescriptive System Security with InSpec
Prescriptive System Security with InSpecPrescriptive System Security with InSpec
Prescriptive System Security with InSpec
 
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
 
Analyze Your Code With Visual Studio 2015 Diagnostic Tools
Analyze Your Code With Visual Studio 2015 Diagnostic ToolsAnalyze Your Code With Visual Studio 2015 Diagnostic Tools
Analyze Your Code With Visual Studio 2015 Diagnostic Tools
 

More from Chocolatey Software

More from Chocolatey Software (13)

Facilitating continuous delivery in a FinTech world with Salt, Jenkins, Nexus...
Facilitating continuous delivery in a FinTech world with Salt, Jenkins, Nexus...Facilitating continuous delivery in a FinTech world with Salt, Jenkins, Nexus...
Facilitating continuous delivery in a FinTech world with Salt, Jenkins, Nexus...
 
Provision and Manage Servers w/Otter, DSC, Git, and Chocolatey
Provision and Manage Servers w/Otter, DSC, Git, and ChocolateyProvision and Manage Servers w/Otter, DSC, Git, and Chocolatey
Provision and Manage Servers w/Otter, DSC, Git, and Chocolatey
 
WinOps in a Secure Environment
WinOps in a Secure EnvironmentWinOps in a Secure Environment
WinOps in a Secure Environment
 
Docker - A Container Full of Chocolatey
Docker - A Container Full of ChocolateyDocker - A Container Full of Chocolatey
Docker - A Container Full of Chocolatey
 
Killing Golden Images In Your Infrastructure Setups
Killing Golden Images In Your Infrastructure SetupsKilling Golden Images In Your Infrastructure Setups
Killing Golden Images In Your Infrastructure Setups
 
Wardley Maps Saved The Day: How Stack Overflow Enterprise automated all the t...
Wardley Maps Saved The Day: How Stack Overflow Enterprise automated all the t...Wardley Maps Saved The Day: How Stack Overflow Enterprise automated all the t...
Wardley Maps Saved The Day: How Stack Overflow Enterprise automated all the t...
 
The Future of Windows Automation
The Future of Windows AutomationThe Future of Windows Automation
The Future of Windows Automation
 
Improving Infrastructure Quality
Improving Infrastructure QualityImproving Infrastructure Quality
Improving Infrastructure Quality
 
Ensuring Compliant, Consistent Systems w/Chef, InSpec, and Chocolatey
Ensuring Compliant, Consistent Systems w/Chef, InSpec, and ChocolateyEnsuring Compliant, Consistent Systems w/Chef, InSpec, and Chocolatey
Ensuring Compliant, Consistent Systems w/Chef, InSpec, and Chocolatey
 
Bootstrapping a New Machine in 1 Click
Bootstrapping a New Machine in 1 ClickBootstrapping a New Machine in 1 Click
Bootstrapping a New Machine in 1 Click
 
Chocolatey and Puppet at Yelp
Chocolatey and Puppet at YelpChocolatey and Puppet at Yelp
Chocolatey and Puppet at Yelp
 
Chef + Chocolatey: Sweet Recipes
Chef + Chocolatey: Sweet RecipesChef + Chocolatey: Sweet Recipes
Chef + Chocolatey: Sweet Recipes
 
10 Things I Hate About You - Taming Windows w/Ansible
10 Things I Hate About You - Taming Windows w/Ansible10 Things I Hate About You - Taming Windows w/Ansible
10 Things I Hate About You - Taming Windows w/Ansible
 

Recently uploaded

Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 

Recently uploaded (20)

Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT Professionals
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 

Maintenance Mode: Leveraging Chef to Schedule Patching, Reboot, etc.

  • 1.
  • 2. Maintenance Mode Gilbert Sanchez Señor Systems Engineer Leveraging Chef to Schedule Patching, Reboot, etc.
  • 3. • Me: • GitHub: https://github.com/HeyItsGilbert • Twitter @HeyItsGilbertS • Facebook: • Prod: https://github.com/facebook/chef-cookbooks • CPE: https://github.com/facebook/IT-CPE Who?
  • 4. • Manage Corporate Windows Servers • Automate patch deployment • Image builds • Collaborate with Client Platform Engineering team What is it that you do here?
  • 6. • Initialization Cookbooks (See fb_init, cpe_init) • API cookbooks • Sharding It's Not You, Its Me Facebook Approach
  • 7. Where did it all go wrong?
  • 8. Classic Recipe for Disaster • Small change • Delete deprecated code • Friday night • Looming deadlines
  • 9. # In cookbook A reboot "PostInstallReboot" do action :nothing end ---- # In cookbook B windows_package "WMF5" do notify "reboot[PostInstallReboot]" end Danger Zone Reboot Resources
  • 10.
  • 12. • Operational tasks to patch machines that failed vulnerability scans • Deploying software that required reboots • Unknown responsibility throughout the patching process Current State What are the current pain points?
  • 13. • Opt Out - Some teams want/need to be able to patch on their own schedule • High Availability - Don't reboot all the machines at the same time • PST? EST? - How to handle multi region services Requirements What will our end users need from us?
  • 14. • Who doesn't love calculating time! • Offer a UTC solution Timezones? Source: https://en.wikipedia.org/wiki/Time_zone
  • 16. • New apps installed? • New patches installed? • This would have prevented the previous issue. • Leverage reboot_pending? Pending Reboots
  • 17. 1. Read your attributes 2. Drop your scripts/ modules/etc. 3. Setup your scheduler Chef Custom Resource Run time vs Compile time is critical Source: https://docs.chef.io/attributes.html
  • 18. • Chef is config management, don't use as a scheduler • Leverage the appropriate scheduler on your OS • Calculating time is hard for you, and harder for your users • Leave a file on disk for them to check Warnings Classic Pitfalls
  • 19. default['your_cookbook'] = { 'auto_reboot' => true, 'day' => 'Saturday', 'duration' => 5, # 5hrs 'opt_out' => false, 'start_hour' => 1, # 1am 'trusted_tester' => false, 'utc' => false, } Default Options Possible Attributes
  • 20. # User has their own special process? FINE!
 node.default['your_cookbook']['opt_out'] = True # Midweek reboots at noon but 1hr window node.default['your_cookbook']['day'] = 'Wednesday' node.default['your_cookbook']['start_hour'] = 12 node.default['your_cookbook']['duration'] = 1 Cookbook for my set of machines Customizing
  • 22. • Roll out to your test boxes • Don't have any? Get some now. • Have your owners set their attributes even just to verify Ready to Roll Code is ready. What's next?
  • 23. • See cpe_utils cookbook in supermarket • Leverage shard_over_a_week_* Slow Roll Catch possible errors with sharing
  • 25. • Working on creating a custom shutdown option • Useful for larger services • Open Source! More ToDo's Yay!
  • 26. • Thanks to the team! • Specifically Korey Shirey and Kamber Borders! Shout Outs