{"action":"created","comment":{"url":"https://api.github.com/repos/madewithlove/blog/pulls/comments/42982328","id":42982328,"diff_hunk":"@@ -0,0 +1,248 @@\n+---\n+layout: post\n+title: \"otto: First Impressions\"\n+date: 2015-10-26\n+author: tony\n+categories: [\"laravel\", \"otto\", \"microservices\"]\n+excerpt: \"A new tool called otto came out recently. It is a tool from Hashicorp. At the project homepage we can see the headline 'meet the successor to Vagrant'.\"\n+---\n+\n+A new tool called [otto](https://ottoproject.io/) came out recently. It's a tool from [Hashicorp](https://hashicorp.com/). At the project homepage we can see the headline \"meet the successor to Vagrant\". I know most of you are familiarized with [Vagrant](https://www.vagrantup.com/), but for those that are not: Vagrant is a tool to manage virtual development environments using VirtualBox or VMWare, for example.\n+\n+With Vagrant you can basically create a virtual machine to develop your application and make sure that everyone on your team share the same configurations and tools to work on your application. Hashicorp built Vagrant and otto, but these are not the only tools they built. They actually have a set of tools to help us develop and deploy software better. These tools together forms what they call \"Hashicorp ecosystem\".\n+\n+## Hashicorp ecosystem\n+\n+Before we start talking about otto, let's understand this ecosystem a bit more. I'm just going to describe some of the tools here, to a more in-depth look, check the documentation of each tool.\n+\n+### Vagrant\n+\n+As I said, Vagrant is a tool for building development environments that can be shared across your team as portable VMs.\n+\n+### Packer\n+\n+[Packer](https://packer.io) is a tool for generating \"build artifacts\", such as Amazon's AMI, OVF for VirtualBox, Docker containers etc. The idea is that you can generate an \"image\" that can be easily deployed to a cloud platform.\n+\n+### Consul\n+\n+[Consul](https://consul.io/) is a tool for service discovery and service configuration. Basically, you can use Consul to make sure your deployable artifacts are going ok when they are deployed, and you can also store some configurations on you Consul cluster to share across your applications, which can make it easier to change, but you can do more with Consul.\n+\n+### Terraform\n+\n+[Terraform](https://terraform.io) it a tool for building infrastructure in a smart way. It can create, modify and version your infrastructure so you can deploy more efficiently and safely. In other words, Terraform will handle your cloud for you. You just have to configure it and it will do the rest for you.","path":"_posts/2015-10-26-otto-first-impressions.md","position":32,"original_position":32,"commit_id":"52ab76a49a30f98b5e5a050a6dd9300ba469139e","original_commit_id":"52ab76a49a30f98b5e5a050a6dd9300ba469139e","user":{"login":"tonysm","id":1178621,"avatar_url":"https://avatars.githubusercontent.com/u/1178621?v=3","gravatar_id":"","url":"https://api.github.com/users/tonysm","html_url":"https://github.com/tonysm","followers_url":"https://api.github.com/users/tonysm/followers","following_url":"https://api.github.com/users/tonysm/following{/other_user}","gists_url":"https://api.github.com/users/tonysm/gists{/gist_id}","starred_url":"https://api.github.com/users/tonysm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tonysm/subscriptions","organizations_url":"https://api.github.com/users/tonysm/orgs","repos_url":"https://api.github.com/users/tonysm/repos","events_url":"https://api.github.com/users/tonysm/events{/privacy}","received_events_url":"https://api.github.com/users/tonysm/received_events","type":"User","site_admin":false},"body":"shiit, I swear that I was watching myself to not use this work or anything like that. :/","created_at":"2015-10-26T11:33:24Z","updated_at":"2015-10-26T11:33:24Z","html_url":"https://github.com/madewithlove/blog/pull/53#discussion_r42982328","pull_request_url":"https://api.github.com/repos/madewithlove/blog/pulls/53","_links":{"self":{"href":"https://api.github.com/repos/madewithlove/blog/pulls/comments/42982328"},"html":{"href":"https://github.com/madewithlove/blog/pull/53#discussion_r42982328"},"pull_request":{"href":"https://api.github.com/repos/madewithlove/blog/pulls/53"}}},"pull_request":{"url":"https://api.github.com/repos/madewithlove/blog/pulls/53","id":48649675,"html_url":"https://github.com/madewithlove/blog/pull/53","diff_url":"https://github.com/madewithlove/blog/pull/53.diff","patch_url":"https://github.com/madewithlove/blog/pull/53.patch","issue_url":"https://api.github.com/repos/madewithlove/blog/issues/53","number":53,"state":"open","locked":false,"title":"blogpost about otto","user":{"login":"tonysm","id":1178621,"avatar_url":"https://avatars.githubusercontent.com/u/1178621?v=3","gravatar_id":"","url":"https://api.github.com/users/tonysm","html_url":"https://github.com/tonysm","followers_url":"https://api.github.com/users/tonysm/followers","following_url":"https://api.github.com/users/tonysm/following{/other_user}","gists_url":"https://api.github.com/users/tonysm/gists{/gist_id}","starred_url":"https://api.github.com/users/tonysm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tonysm/subscriptions","organizations_url":"https://api.github.com/users/tonysm/orgs","repos_url":"https://api.github.com/users/tonysm/repos","events_url":"https://api.github.com/users/tonysm/events{/privacy}","received_events_url":"https://api.github.com/users/tonysm/received_events","type":"User","site_admin":false},"body":"### Added\r\n\r\n- a blog post about my first impressions to otto;","created_at":"2015-10-24T05:56:11Z","updated_at":"2015-10-26T11:33:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d89bf1d0f65f9137b48a8e1b2023f701b1284fb1","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/madewithlove/blog/pulls/53/commits","review_comments_url":"https://api.github.com/repos/madewithlove/blog/pulls/53/comments","review_comment_url":"https://api.github.com/repos/madewithlove/blog/pulls/comments{/number}","comments_url":"https://api.github.com/repos/madewithlove/blog/issues/53/comments","statuses_url":"https://api.github.com/repos/madewithlove/blog/statuses/52ab76a49a30f98b5e5a050a6dd9300ba469139e","head":{"label":"madewithlove:posts/otto-first-impressions","ref":"posts/otto-first-impressions","sha":"52ab76a49a30f98b5e5a050a6dd9300ba469139e","user":{"login":"madewithlove","id":600038,"avatar_url":"https://avatars.githubusercontent.com/u/600038?v=3","gravatar_id":"","url":"https://api.github.com/users/madewithlove","html_url":"https://github.com/madewithlove","followers_url":"https://api.github.com/users/madewithlove/followers","following_url":"https://api.github.com/users/madewithlove/following{/other_user}","gists_url":"https://api.github.com/users/madewithlove/gists{/gist_id}","starred_url":"https://api.github.com/users/madewithlove/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/madewithlove/subscriptions","organizations_url":"https://api.github.com/users/madewithlove/orgs","repos_url":"https://api.github.com/users/madewithlove/repos","events_url":"https://api.github.com/users/madewithlove/events{/privacy}","received_events_url":"https://api.github.com/users/madewithlove/received_events","type":"Organization","site_admin":false},"repo":{"id":28820310,"name":"blog","full_name":"madewithlove/blog","owner":{"login":"madewithlove","id":600038,"avatar_url":"https://avatars.githubusercontent.com/u/600038?v=3","gravatar_id":"","url":"https://api.github.com/users/madewithlove","html_url":"https://github.com/madewithlove","followers_url":"https://api.github.com/users/madewithlove/followers","following_url":"https://api.github.com/users/madewithlove/following{/other_user}","gists_url":"https://api.github.com/users/madewithlove/gists{/gist_id}","starred_url":"https://api.github.com/users/madewithlove/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/madewithlove/subscriptions","organizations_url":"https://api.github.com/users/madewithlove/orgs","repos_url":"https://api.github.com/users/madewithlove/repos","events_url":"https://api.github.com/users/madewithlove/events{/privacy}","received_events_url":"https://api.github.com/users/madewithlove/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/madewithlove/blog","description":"The madewithlove blog","fork":false,"url":"https://api.github.com/repos/madewithlove/blog","forks_url":"https://api.github.com/repos/madewithlove/blog/forks","keys_url":"https://api.github.com/repos/madewithlove/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/madewithlove/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/madewithlove/blog/teams","hooks_url":"https://api.github.com/repos/madewithlove/blog/hooks","issue_events_url":"https://api.github.com/repos/madewithlove/blog/issues/events{/number}","events_url":"https://api.github.com/repos/madewithlove/blog/events","assignees_url":"https://api.github.com/repos/madewithlove/blog/assignees{/user}","branches_url":"https://api.github.com/repos/madewithlove/blog/branches{/branch}","tags_url":"https://api.github.com/repos/madewithlove/blog/tags","blobs_url":"https://api.github.com/repos/madewithlove/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/madewithlove/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/madewithlove/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/madewithlove/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/madewithlove/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/madewithlove/blog/languages","stargazers_url":"https://api.github.com/repos/madewithlove/blog/stargazers","contributors_url":"https://api.github.com/repos/madewithlove/blog/contributors","subscribers_url":"https://api.github.com/repos/madewithlove/blog/subscribers","subscription_url":"https://api.github.com/repos/madewithlove/blog/subscription","commits_url":"https://api.github.com/repos/madewithlove/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/madewithlove/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/madewithlove/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/madewithlove/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/madewithlove/blog/contents/{+path}","compare_url":"https://api.github.com/repos/madewithlove/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/madewithlove/blog/merges","archive_url":"https://api.github.com/repos/madewithlove/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/madewithlove/blog/downloads","issues_url":"https://api.github.com/repos/madewithlove/blog/issues{/number}","pulls_url":"https://api.github.com/repos/madewithlove/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/madewithlove/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/madewithlove/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/madewithlove/blog/labels{/name}","releases_url":"https://api.github.com/repos/madewithlove/blog/releases{/id}","created_at":"2015-01-05T16:13:23Z","updated_at":"2015-10-09T18:10:58Z","pushed_at":"2015-10-25T20:17:09Z","git_url":"git://github.com/madewithlove/blog.git","ssh_url":"git@github.com:madewithlove/blog.git","clone_url":"https://github.com/madewithlove/blog.git","svn_url":"https://github.com/madewithlove/blog","homepage":null,"size":21741,"stargazers_count":4,"watchers_count":4,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":4,"mirror_url":null,"open_issues_count":5,"forks":4,"open_issues":5,"watchers":4,"default_branch":"gh-pages"}},"base":{"label":"madewithlove:gh-pages","ref":"gh-pages","sha":"865a184bf492de432ae74a8f94a25d30f5ee533d","user":{"login":"madewithlove","id":600038,"avatar_url":"https://avatars.githubusercontent.com/u/600038?v=3","gravatar_id":"","url":"https://api.github.com/users/madewithlove","html_url":"https://github.com/madewithlove","followers_url":"https://api.github.com/users/madewithlove/followers","following_url":"https://api.github.com/users/madewithlove/following{/other_user}","gists_url":"https://api.github.com/users/madewithlove/gists{/gist_id}","starred_url":"https://api.github.com/users/madewithlove/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/madewithlove/subscriptions","organizations_url":"https://api.github.com/users/madewithlove/orgs","repos_url":"https://api.github.com/users/madewithlove/repos","events_url":"https://api.github.com/users/madewithlove/events{/privacy}","received_events_url":"https://api.github.com/users/madewithlove/received_events","type":"Organization","site_admin":false},"repo":{"id":28820310,"name":"blog","full_name":"madewithlove/blog","owner":{"login":"madewithlove","id":600038,"avatar_url":"https://avatars.githubusercontent.com/u/600038?v=3","gravatar_id":"","url":"https://api.github.com/users/madewithlove","html_url":"https://github.com/madewithlove","followers_url":"https://api.github.com/users/madewithlove/followers","following_url":"https://api.github.com/users/madewithlove/following{/other_user}","gists_url":"https://api.github.com/users/madewithlove/gists{/gist_id}","starred_url":"https://api.github.com/users/madewithlove/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/madewithlove/subscriptions","organizations_url":"https://api.github.com/users/madewithlove/orgs","repos_url":"https://api.github.com/users/madewithlove/repos","events_url":"https://api.github.com/users/madewithlove/events{/privacy}","received_events_url":"https://api.github.com/users/madewithlove/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/madewithlove/blog","description":"The madewithlove blog","fork":false,"url":"https://api.github.com/repos/madewithlove/blog","forks_url":"https://api.github.com/repos/madewithlove/blog/forks","keys_url":"https://api.github.com/repos/madewithlove/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/madewithlove/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/madewithlove/blog/teams","hooks_url":"https://api.github.com/repos/madewithlove/blog/hooks","issue_events_url":"https://api.github.com/repos/madewithlove/blog/issues/events{/number}","events_url":"https://api.github.com/repos/madewithlove/blog/events","assignees_url":"https://api.github.com/repos/madewithlove/blog/assignees{/user}","branches_url":"https://api.github.com/repos/madewithlove/blog/branches{/branch}","tags_url":"https://api.github.com/repos/madewithlove/blog/tags","blobs_url":"https://api.github.com/repos/madewithlove/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/madewithlove/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/madewithlove/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/madewithlove/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/madewithlove/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/madewithlove/blog/languages","stargazers_url":"https://api.github.com/repos/madewithlove/blog/stargazers","contributors_url":"https://api.github.com/repos/madewithlove/blog/contributors","subscribers_url":"https://api.github.com/repos/madewithlove/blog/subscribers","subscription_url":"https://api.github.com/repos/madewithlove/blog/subscription","commits_url":"https://api.github.com/repos/madewithlove/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/madewithlove/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/madewithlove/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/madewithlove/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/madewithlove/blog/contents/{+path}","compare_url":"https://api.github.com/repos/madewithlove/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/madewithlove/blog/merges","archive_url":"https://api.github.com/repos/madewithlove/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/madewithlove/blog/downloads","issues_url":"https://api.github.com/repos/madewithlove/blog/issues{/number}","pulls_url":"https://api.github.com/repos/madewithlove/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/madewithlove/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/madewithlove/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/madewithlove/blog/labels{/name}","releases_url":"https://api.github.com/repos/madewithlove/blog/releases{/id}","created_at":"2015-01-05T16:13:23Z","updated_at":"2015-10-09T18:10:58Z","pushed_at":"2015-10-25T20:17:09Z","git_url":"git://github.com/madewithlove/blog.git","ssh_url":"git@github.com:madewithlove/blog.git","clone_url":"https://github.com/madewithlove/blog.git","svn_url":"https://github.com/madewithlove/blog","homepage":null,"size":21741,"stargazers_count":4,"watchers_count":4,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":4,"mirror_url":null,"open_issues_count":5,"forks":4,"open_issues":5,"watchers":4,"default_branch":"gh-pages"}},"_links":{"self":{"href":"https://api.github.com/repos/madewithlove/blog/pulls/53"},"html":{"href":"https://github.com/madewithlove/blog/pull/53"},"issue":{"href":"https://api.github.com/repos/madewithlove/blog/issues/53"},"comments":{"href":"https://api.github.com/repos/madewithlove/blog/issues/53/comments"},"review_comments":{"href":"https://api.github.com/repos/madewithlove/blog/pulls/53/comments"},"review_comment":{"href":"https://api.github.com/repos/madewithlove/blog/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/madewithlove/blog/pulls/53/commits"},"statuses":{"href":"https://api.github.com/repos/madewithlove/blog/statuses/52ab76a49a30f98b5e5a050a6dd9300ba469139e"}}}}