00:00:16.359
Hello everyone, and welcome to my talk on using Ruby to automate your life. I usually start with a joke, but since we're a little pressed for time, I'll keep it brief.
00:00:21.600
Typically, I share a story with a punchline at the end, but today I'll just jump straight to the joke.
00:00:27.080
So, today's joke is about Windows. How many people know what this is? It's a can, right? A very nice can! I drew it in Keynote, and since I’m not artistic, it took me about six days to finish.
00:00:33.200
This is the repetitive can—something you must do every day.
00:00:38.920
We just heard a talk about continuous delivery and deployment, and today I want to discuss automating not just your deployments, but everything you do.
00:00:45.360
As developers, who wants to type the same command a million times? We all have commands like `cap deploy` if you're using Capistrano, and how many of you have run `bundle` more than a million times in your life?
00:00:50.399
Commands like `vagrant up`, or `arpec`, or `irb`, or `pry`, and the list keeps growing.
00:00:56.640
You start adding your Bash commands for listing files and pinging just because you're pretending to be a sysadmin. Before you know it, you're doing the same thing repeatedly, hitting the up arrow in your command history, and growing frustrated.
00:01:03.640
You add more technologies while trying to ping GitHub and support HTML5 and Windows, which can feel tedious.
00:01:10.200
Your life may feel unimportant because you're spending so much time on the surrounding tasks that you can't get your actual work done.
00:01:15.560
It's like the technical version of meeting fatigue, where you're burdened by so much technical debt—not necessarily in code, but in processes—that you can’t finish your work.
00:01:21.799
So, my question is, what if there was a way to fix this?
00:01:28.680
We can find a solution together. The solution has to be reproducible; for example, the `ls` command will always give you the list of directories and files on a Unix-based system.
00:01:35.920
Similarly, we need a reliable solution. While `ls` works, we know that Ruby can be less reliable sometimes.
00:01:42.000
We also need it to be unattended, or rather—untended. I chose the word untended because 'unattended' didn’t fit on the slide next to my can.
00:01:47.600
I’ll blame it on my spelling and graphic design issues, but really, I want to talk about how we can use Ruby with Chef to automate the daily tasks that bog down our lives.
00:01:53.040
So, who am I? I’m Seth. I used to work at a company called Opscode, which rebranded to Chef. We are the company that develops Chef.
00:02:06.159
Here's my contact information, complete with cool logos. If you have questions, these slides are also posted on Speaker Deck. You can reach me on Twitter or email.
00:02:13.120
So, I have two disclaimers. First, I work for Chef, but this is not a vendor pitch.
00:02:18.680
Everything I’ll show you today is free and open-source, so you can set it up without us even knowing.
00:02:25.920
The second disclaimer is that everything in Chef is cross-platform, including Windows, but I'm focusing on Ubuntu today just because it's easier for people to relate.
00:02:32.480
If you’re using Windows, CentOS, or SmartOS, the principles still apply.
00:02:38.319
I know what you’re thinking: what is Chef? That’s a big question that can’t be answered quickly—but I’ll provide an overview.
00:02:46.720
Chef is for configuration management, ensuring that your servers—and even local computers—have the correct setups to run software.
00:02:53.879
For example, on a Mac, that configuration might tell an application like Sublime where to find its license file.
00:03:00.680
On Ubuntu, it could be the `httpd.conf` file that tells Apache how to run.
00:03:06.319
Chef also handles cloud administration; how many people here use AWS EC2, Digital Ocean, or run their own OpenStack clusters?
00:03:12.599
Chef helps manage many of these responsibilities and reduces repetitive tasks.
00:03:18.000
Lastly, Chef is about continuous delivery. Just heard a fantastic talk about it!
00:03:25.920
What if, instead of pushing code to production with Jenkins, Chef pulled the code from Master every time it runs?
00:03:32.480
So, it’s the same as continuous delivery, but instead of relying on the CI server to push changes, Chef pulls them in.
00:03:41.400
Additionally, Chef is community-driven. Some amazing changes and patches come from contributors outside Chef.
00:03:47.120
We’re open to external contributors, so if you’re a Chef user with great use cases and ideas, we would love to hear from you.
00:03:53.160
We’ve talked about a lot of things so far, but how can Chef actually help you with these issues?
00:04:00.000
Chef can provision our developer laptops to match our production and staging infrastructures.
00:04:07.080
This is crucial because how many times have you heard the phrase, 'It worked on my machine?'
00:04:12.480
If we provision our developer laptops accurately using tools like Vagrant, the probability of issues during production deployment decreases significantly.
00:04:19.720
Chef also helps maintain ephemeral staging environments; how many people know what that means?
00:04:30.800
An ephemeral environment is one that you don’t need to keep running—it can be torn down and recreated.
00:04:37.840
At a previous company, we had a non-ephemeral staging environment that sat idle in EC2, costing us thousands of dollars.
00:04:45.879
With Chef, you can spin up those environments quickly without the need to keep them running.
00:04:52.000
This model saves a lot of money by allowing you to recreate these environments in real time.
00:05:00.000
Chef also enables you to set up new infrastructure rapidly. If your production code is in Chef scripts, you're already set.
00:05:08.240
If a data center goes down, or you face a crisis, Chef helps maintain continuity.
00:05:14.200
Just look at Hurricane Sandy; many companies lost their data simply due to geographical issues.
00:05:22.240
Chef allows you to spin up a new data center effectively in the cloud.
00:05:29.160
I want to share some scenarios to illustrate how Chef can automate common tasks.
00:05:36.120
Let’s first look at Capistrano. How many people have used Capistrano to deploy applications?
00:05:41.400
What I think of Capistrano is that it can be a bit too much at times.
00:05:45.840
When you look at a Capistrano deploy, it creates various directories on the target system.
00:05:52.760
However, this seems outside the scope of what a deployment script should handle.
00:05:58.240
Let's instead rewrite this with Chef. Here's how we can accomplish it using a Chef script.
00:06:05.440
Right away, you notice the `do` and `end` block, so you know it’s Ruby code.
00:06:12.200
Chef treats resources and handles parameters or attributes within this block.
00:06:22.000
Each of the resources in Chef accepts a block of parameters.
00:06:28.560
This implicit action creates directories, ensuring that you specify the ownership and permissions.
00:06:38.720
This basic structure is how you ensure consistent directory creation using Chef.
00:06:46.000
Now that you have an understanding of the structure, let's look at the more complex Capistrano process.
00:06:53.840
Capistrano essentially checks out the latest code from Git or SVN, creates links, and runs migrations, depending on your setup.
00:07:01.640
In Chef, there's a built-in resource called `git` to handle Git commands.
00:07:10.000
Currently, we need to create a timestamp similar to how Capistrano does.
00:07:17.000
The `git` resource includes several parameters that you’ll utilize during deployment.
00:07:24.000
After that, the `link` resource acts as a symbolic link, directing to the linked files.
00:07:30.000
When using Chef, if the current link already exists, it will be overwritten.
00:07:36.760
This approach is straightforward and offers better readability than Capistrano scripts.
00:07:43.680
Chef is natively idempotent, meaning you can run the same actions without changing the system's state.
00:07:50.680
This is critical for security, especially when accessing production instances.
00:07:57.920
With Chef, developers don't need direct SSH access to production, just access to the GitHub project.
00:08:06.160
It's important to manage these keys securely. When a team member leaves, just removing them from GitHub suffices.
00:08:12.919
Also, the Chef client runs as a service.
00:08:19.720
Once you merge code, Chef will take care of the pull when it runs, which may be after a given interval.
00:08:26.960
This offers a resilient infrastructure because the process runs continuously.
00:08:34.000
In practice, that converts a Capistrano deploy into a GitHub push, simplifying the deployment process significantly.
00:08:41.360
This makes for a more enjoyable experience when deploying your code.
00:08:47.640
Now, let’s consider a scenario many developers can relate to: getting a new laptop.
00:08:55.760
How many companies give you just 48 hours to set up your new laptop?
00:09:01.080
You often spend that time configuring stickers, applications, and environment settings.
00:09:08.680
And if your laptop breaks, you have to start all over!
00:09:15.200
So, what’s often a typical scenario for a Ruby developer setting up a new laptop?
00:09:22.360
You're likely installing Vagrant and then VirtualBox, followed by Git and a browser.
00:09:29.680
You probably install Homebrew, PostgreSQL, and maybe MongoDB.
00:09:36.840
Then there’s the ordeal of installing Ruby versions using RVM or rbenv.
00:09:44.960
And don't forget ImageMagick or other dependencies.
00:09:52.560
Then, you go through a manual installation process for each application.
00:09:58.760
This can take time, and every change can feel tiresome.
00:10:07.680
But what if you could script that entire process instead?
00:10:15.680
For example, here’s code that installs Google Chrome without needing any manual clicks.
00:10:22.680
Imagine deploying a local cache on your network for files and packages.
00:10:29.480
This automation would save time and ensure consistency.
00:10:36.240
With Chef, you could install packages, set configurations, and change system preferences all from scripts.
00:10:44.240
Thus, with less than 150 lines of Ruby code, you've set up your new developer environment.
00:10:51.240
Imagine: no more manual installations or error-prone adjustments.
00:10:58.360
Now you only have to track your Chef scripts; everything else is automated.
00:11:05.440
Lastly, how is Chef better than a traditional shell script?
00:11:11.920
It's reliable and reproducible. Shell scripts can vary in outcome, while Chef provides consistent results.
00:11:18.560
Ruby code is easier to test with robust libraries such as RSpec, making Chef's reliability even stronger.
00:11:25.160
Moreover, Chef's item potency allows for running the same command without negative side effects.
00:11:31.600
If you’re on different platforms, Chef can handle that without much hassle.
00:11:39.000
It's cleaner and easier to read and write Ruby compared to shell scripts.
00:11:45.400
Most importantly, it’s actually developed in Ruby, not bash.
00:11:53.160
So, if you’re looking to automate your life, Chef is the way to go!
00:11:59.480
You can start by visiting getchef.org to download Chef.
00:12:06.760
If you're new to Chef, I recommend visiting learnchef.com for tutorials.
00:12:13.680
If you have questions or want to collaborate, here's how you can get in touch with me.
00:12:21.000
Thank you for your time! I'm happy to take any questions you may have.
00:12:29.560
Yes?
00:12:36.480
If you're working on a team and establishing a standard operating environment, is it practical to include personal customizations?
00:12:43.520
Sometimes, it’s easier to tweak system preferences manually rather than using Chef—especially for personal settings.
00:12:50.440
My personal laptop runs Chef for everything from dot files to applications, but it requires an iterative approach.
00:12:57.300
Each time I install a new application, I spend a little time incorporating it into my Chef scripts.
00:13:05.360
So in conclusion, while using a backup tool like Time Machine is a quick fix, automating your setup with Chef will ultimately save you time.
00:13:12.560
Thank you very much for your attention.
00:13:19.840
Seth, thank you!