{"action":"created","comment":{"url":"https://api.github.com/repos/coreos/docs/pulls/comments/42665158","id":42665158,"diff_hunk":"@@ -58,11 +85,104 @@ retained, although CoreOS supports config-drive on all platforms.\n For more information on customization that can be done with cloud-config, head\n on over to the [cloud-config guide][cloud-config guide].\n \n-Note: The `$private_ipv4` and `$public_ipv4` substitution variables referenced\n-in other documents are *not* supported on VMware.\n+The `$private_ipv4` and `$public_ipv4` substitution variables are fully supported in cloud-config on VMware but only in CoreOS release 801.0.0 and greater. These releases has updated [coreos-cloudinit][coreos-cloudinit] v1.6.0 which allows you to configure network using [VMware GuestInfo options][vmware backdoor] and define `public` and `private` roles for ethernet interfaces.\n+\n+## VMware Backdoor\n+\n+### Setting GuestInfo Options\n+\n+Guestinfo settings are values stored in the VMX of virtual machine or in the VMX representation in host memory. The criteria for being able to read it from guest OS is to use the prefix: `guestinfo.`.\n+\n+These settings can be set in five main ways:\n+\n+* You can configure them in the OVF you want to deploy. Some middlewares will help you to customize it during the deploy of the virtual machines based on this OVF (like [vcloud director](http://blogs.vmware.com/vsphere/2012/06/leveraging-vapp-vm-custom-properties-in-vcloud-director.html)). For more information, you can have a look on the following post: [Self-Configuration and the OVF Environment](http://blogs.vmware.com/vapp/2009/07/selfconfiguration-and-the-ovf-environment.html)\n+\n+* You can set guestinfo keys and values from the CoreOS guest itself by using preinstalled vmwaretools command like:\n+\n+```sh\n+/usr/share/oem/bin/vmtoolsd --cmd \"info-set guestinfo.<variable> <value>\"\n+```\n+\n+* You can also set guestinfo keys and values from a Service Console:\n+\n+```sh\n+vmware-cmd /vmfs/volumes/xxxxxxxx.../VMNAME/VMNAME.vmx setguestinfo <variable> <value>\n+```\n+\n+* You can manually modify the VMX and reload it on the VMware Workstation, ESXi host or the vCenter.\n+\n+* If you change or set GuestInfo settings by using VMware API or CoreOS guest itself, values are only stored in VM process memory. In case of reboot or shutdown, values will be loosed.\n+\n+You can read more about GuestInfo in [this](http://blog-lrivallain.rhcloud.com/2014/08/15/vmware-use-guestinfo-variables-to-customize-guest-os/) blog post.\n+\n+### GuestInfo Example\n+\n+Example below provides hostname, DNS address, interface role, and static `192.168.178.97` IP address with `255.255.255.0` netmask on the Ethernet interface which matches `eno1*` interface name and `00:0c:29:63:92:5c` interface mac address (you can simply provide only one match option: `name` or `mac`):\n+\n+```\n+guestinfo.hostname = \"coreos\"\n+guestinfo.interface.0.role = \"private\"\n+guestinfo.dns.server.0 = \"8.8.8.8\"\n+guestinfo.interface.0.route.0.gateway = \"192.168.178.1\"\n+guestinfo.interface.0.route.0.destination = \"0.0.0.0/0\"\n+guestinfo.interface.0.mac = \"00:0c:29:63:92:5c\"\n+guestinfo.interface.0.name = \"eno1*\"\n+guestinfo.interface.0.dhcp = \"no\"\n+guestinfo.interface.0.ip.0.address = \"192.168.178.97/24\"\n+```\n+\n+The CoreOS OVA image contains VMware tools and OEM Cloud-Config which executes `coreos-cloudinit` with `--oem=vmware` option. This option automatically sets the `-from-vmware-backdoor` and `-convert-netconf=vmware` flags. Using values above and these flags `coreos-cloudinit` will generate following systemd network unit:\n+\n+```\n+[Match]\n+Name=eno1*\n+MACAddress=00:0c:29:63:92:5c\n+\n+[Network]\n+DNS=8.8.8.8\n+\n+[Address]\n+Address=192.168.178.97/24\n+\n+[Route]\n+Destination=0.0.0.0/0\n+Gateway=192.168.178.1\n+```\n+\n+This unit file will configure the matching network interface. If you have set `coreos.config.data` or `coreos.config.url` variables, `coreos-cloudinit` will try to apply these Cloud Configs on VM and substitute `$private_ipv4` and `$public_ipv4` variables if you've configured network interfaces' roles using `interface.<n>.role` guest variable.\n+\n+### Defining Cloud-Config in GuestInfo\n+\n+You have to encode your regular Cloud-Config with `base64` tool and set output into `coreos.config.data` variable.","path":"os/booting-on-vmware.md","position":149,"original_position":149,"commit_id":"93963909c8bade1b1835a13c8289ebb4b5a1413f","original_commit_id":"93963909c8bade1b1835a13c8289ebb4b5a1413f","user":{"login":"robszumski","id":755540,"avatar_url":"https://avatars.githubusercontent.com/u/755540?v=3","gravatar_id":"","url":"https://api.github.com/users/robszumski","html_url":"https://github.com/robszumski","followers_url":"https://api.github.com/users/robszumski/followers","following_url":"https://api.github.com/users/robszumski/following{/other_user}","gists_url":"https://api.github.com/users/robszumski/gists{/gist_id}","starred_url":"https://api.github.com/users/robszumski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/robszumski/subscriptions","organizations_url":"https://api.github.com/users/robszumski/orgs","repos_url":"https://api.github.com/users/robszumski/repos","events_url":"https://api.github.com/users/robszumski/events{/privacy}","received_events_url":"https://api.github.com/users/robszumski/received_events","type":"User","site_admin":false},"body":"updated:\r\n\r\nThere are two supported encoding types, which can be configured with the `guestinfo.coreos.config.data.encoding` variable:","created_at":"2015-10-21T18:45:28Z","updated_at":"2015-10-21T18:45:28Z","html_url":"https://github.com/coreos/docs/pull/598#discussion_r42665158","pull_request_url":"https://api.github.com/repos/coreos/docs/pulls/598","_links":{"self":{"href":"https://api.github.com/repos/coreos/docs/pulls/comments/42665158"},"html":{"href":"https://github.com/coreos/docs/pull/598#discussion_r42665158"},"pull_request":{"href":"https://api.github.com/repos/coreos/docs/pulls/598"}}},"pull_request":{"url":"https://api.github.com/repos/coreos/docs/pulls/598","id":45654209,"html_url":"https://github.com/coreos/docs/pull/598","diff_url":"https://github.com/coreos/docs/pull/598.diff","patch_url":"https://github.com/coreos/docs/pull/598.patch","issue_url":"https://api.github.com/repos/coreos/docs/issues/598","number":598,"state":"open","locked":false,"title":"Added VMware Workstation and Backdoor/Guestinfo notes","user":{"login":"kayrus","id":4047483,"avatar_url":"https://avatars.githubusercontent.com/u/4047483?v=3","gravatar_id":"","url":"https://api.github.com/users/kayrus","html_url":"https://github.com/kayrus","followers_url":"https://api.github.com/users/kayrus/followers","following_url":"https://api.github.com/users/kayrus/following{/other_user}","gists_url":"https://api.github.com/users/kayrus/gists{/gist_id}","starred_url":"https://api.github.com/users/kayrus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kayrus/subscriptions","organizations_url":"https://api.github.com/users/kayrus/orgs","repos_url":"https://api.github.com/users/kayrus/repos","events_url":"https://api.github.com/users/kayrus/events{/privacy}","received_events_url":"https://api.github.com/users/kayrus/received_events","type":"User","site_admin":false},"body":"/cc @robszumski @crawford ","created_at":"2015-09-22T11:54:53Z","updated_at":"2015-10-21T18:45:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e6a0dd790bde54cd43f15389da1d159a0dcb3ca3","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/coreos/docs/pulls/598/commits","review_comments_url":"https://api.github.com/repos/coreos/docs/pulls/598/comments","review_comment_url":"https://api.github.com/repos/coreos/docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/coreos/docs/issues/598/comments","statuses_url":"https://api.github.com/repos/coreos/docs/statuses/93963909c8bade1b1835a13c8289ebb4b5a1413f","head":{"label":"endocode:kayrus/vmware","ref":"kayrus/vmware","sha":"93963909c8bade1b1835a13c8289ebb4b5a1413f","user":{"login":"endocode","id":4068543,"avatar_url":"https://avatars.githubusercontent.com/u/4068543?v=3","gravatar_id":"","url":"https://api.github.com/users/endocode","html_url":"https://github.com/endocode","followers_url":"https://api.github.com/users/endocode/followers","following_url":"https://api.github.com/users/endocode/following{/other_user}","gists_url":"https://api.github.com/users/endocode/gists{/gist_id}","starred_url":"https://api.github.com/users/endocode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/endocode/subscriptions","organizations_url":"https://api.github.com/users/endocode/orgs","repos_url":"https://api.github.com/users/endocode/repos","events_url":"https://api.github.com/users/endocode/events{/privacy}","received_events_url":"https://api.github.com/users/endocode/received_events","type":"Organization","site_admin":false},"repo":{"id":32393416,"name":"coreos-docs","full_name":"endocode/coreos-docs","owner":{"login":"endocode","id":4068543,"avatar_url":"https://avatars.githubusercontent.com/u/4068543?v=3","gravatar_id":"","url":"https://api.github.com/users/endocode","html_url":"https://github.com/endocode","followers_url":"https://api.github.com/users/endocode/followers","following_url":"https://api.github.com/users/endocode/following{/other_user}","gists_url":"https://api.github.com/users/endocode/gists{/gist_id}","starred_url":"https://api.github.com/users/endocode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/endocode/subscriptions","organizations_url":"https://api.github.com/users/endocode/orgs","repos_url":"https://api.github.com/users/endocode/repos","events_url":"https://api.github.com/users/endocode/events{/privacy}","received_events_url":"https://api.github.com/users/endocode/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/endocode/coreos-docs","description":"Documentation for CoreOS in markdown","fork":true,"url":"https://api.github.com/repos/endocode/coreos-docs","forks_url":"https://api.github.com/repos/endocode/coreos-docs/forks","keys_url":"https://api.github.com/repos/endocode/coreos-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/endocode/coreos-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/endocode/coreos-docs/teams","hooks_url":"https://api.github.com/repos/endocode/coreos-docs/hooks","issue_events_url":"https://api.github.com/repos/endocode/coreos-docs/issues/events{/number}","events_url":"https://api.github.com/repos/endocode/coreos-docs/events","assignees_url":"https://api.github.com/repos/endocode/coreos-docs/assignees{/user}","branches_url":"https://api.github.com/repos/endocode/coreos-docs/branches{/branch}","tags_url":"https://api.github.com/repos/endocode/coreos-docs/tags","blobs_url":"https://api.github.com/repos/endocode/coreos-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/endocode/coreos-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/endocode/coreos-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/endocode/coreos-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/endocode/coreos-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/endocode/coreos-docs/languages","stargazers_url":"https://api.github.com/repos/endocode/coreos-docs/stargazers","contributors_url":"https://api.github.com/repos/endocode/coreos-docs/contributors","subscribers_url":"https://api.github.com/repos/endocode/coreos-docs/subscribers","subscription_url":"https://api.github.com/repos/endocode/coreos-docs/subscription","commits_url":"https://api.github.com/repos/endocode/coreos-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/endocode/coreos-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/endocode/coreos-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/endocode/coreos-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/endocode/coreos-docs/contents/{+path}","compare_url":"https://api.github.com/repos/endocode/coreos-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/endocode/coreos-docs/merges","archive_url":"https://api.github.com/repos/endocode/coreos-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/endocode/coreos-docs/downloads","issues_url":"https://api.github.com/repos/endocode/coreos-docs/issues{/number}","pulls_url":"https://api.github.com/repos/endocode/coreos-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/endocode/coreos-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/endocode/coreos-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/endocode/coreos-docs/labels{/name}","releases_url":"https://api.github.com/repos/endocode/coreos-docs/releases{/id}","created_at":"2015-03-17T12:59:43Z","updated_at":"2015-03-17T13:00:09Z","pushed_at":"2015-10-21T12:04:54Z","git_url":"git://github.com/endocode/coreos-docs.git","ssh_url":"git@github.com:endocode/coreos-docs.git","clone_url":"https://github.com/endocode/coreos-docs.git","svn_url":"https://github.com/endocode/coreos-docs","homepage":"http://coreos.com/docs","size":5232,"stargazers_count":0,"watchers_count":0,"language":"Shell","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"coreos:master","ref":"master","sha":"c3aec452f54f7351e44a75151e0d3be13b8ee908","user":{"login":"coreos","id":3730757,"avatar_url":"https://avatars.githubusercontent.com/u/3730757?v=3","gravatar_id":"","url":"https://api.github.com/users/coreos","html_url":"https://github.com/coreos","followers_url":"https://api.github.com/users/coreos/followers","following_url":"https://api.github.com/users/coreos/following{/other_user}","gists_url":"https://api.github.com/users/coreos/gists{/gist_id}","starred_url":"https://api.github.com/users/coreos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coreos/subscriptions","organizations_url":"https://api.github.com/users/coreos/orgs","repos_url":"https://api.github.com/users/coreos/repos","events_url":"https://api.github.com/users/coreos/events{/privacy}","received_events_url":"https://api.github.com/users/coreos/received_events","type":"Organization","site_admin":false},"repo":{"id":11597120,"name":"docs","full_name":"coreos/docs","owner":{"login":"coreos","id":3730757,"avatar_url":"https://avatars.githubusercontent.com/u/3730757?v=3","gravatar_id":"","url":"https://api.github.com/users/coreos","html_url":"https://github.com/coreos","followers_url":"https://api.github.com/users/coreos/followers","following_url":"https://api.github.com/users/coreos/following{/other_user}","gists_url":"https://api.github.com/users/coreos/gists{/gist_id}","starred_url":"https://api.github.com/users/coreos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coreos/subscriptions","organizations_url":"https://api.github.com/users/coreos/orgs","repos_url":"https://api.github.com/users/coreos/repos","events_url":"https://api.github.com/users/coreos/events{/privacy}","received_events_url":"https://api.github.com/users/coreos/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/coreos/docs","description":"Documentation for CoreOS in markdown","fork":false,"url":"https://api.github.com/repos/coreos/docs","forks_url":"https://api.github.com/repos/coreos/docs/forks","keys_url":"https://api.github.com/repos/coreos/docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/coreos/docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/coreos/docs/teams","hooks_url":"https://api.github.com/repos/coreos/docs/hooks","issue_events_url":"https://api.github.com/repos/coreos/docs/issues/events{/number}","events_url":"https://api.github.com/repos/coreos/docs/events","assignees_url":"https://api.github.com/repos/coreos/docs/assignees{/user}","branches_url":"https://api.github.com/repos/coreos/docs/branches{/branch}","tags_url":"https://api.github.com/repos/coreos/docs/tags","blobs_url":"https://api.github.com/repos/coreos/docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/coreos/docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/coreos/docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/coreos/docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/coreos/docs/statuses/{sha}","languages_url":"https://api.github.com/repos/coreos/docs/languages","stargazers_url":"https://api.github.com/repos/coreos/docs/stargazers","contributors_url":"https://api.github.com/repos/coreos/docs/contributors","subscribers_url":"https://api.github.com/repos/coreos/docs/subscribers","subscription_url":"https://api.github.com/repos/coreos/docs/subscription","commits_url":"https://api.github.com/repos/coreos/docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/coreos/docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/coreos/docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/coreos/docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/coreos/docs/contents/{+path}","compare_url":"https://api.github.com/repos/coreos/docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/coreos/docs/merges","archive_url":"https://api.github.com/repos/coreos/docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/coreos/docs/downloads","issues_url":"https://api.github.com/repos/coreos/docs/issues{/number}","pulls_url":"https://api.github.com/repos/coreos/docs/pulls{/number}","milestones_url":"https://api.github.com/repos/coreos/docs/milestones{/number}","notifications_url":"https://api.github.com/repos/coreos/docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/coreos/docs/labels{/name}","releases_url":"https://api.github.com/repos/coreos/docs/releases{/id}","created_at":"2013-07-23T02:02:24Z","updated_at":"2015-10-20T16:54:06Z","pushed_at":"2015-10-21T17:41:33Z","git_url":"git://github.com/coreos/docs.git","ssh_url":"git@github.com:coreos/docs.git","clone_url":"https://github.com/coreos/docs.git","svn_url":"https://github.com/coreos/docs","homepage":"http://coreos.com/docs","size":8225,"stargazers_count":590,"watchers_count":590,"language":"Shell","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":344,"mirror_url":null,"open_issues_count":58,"forks":344,"open_issues":58,"watchers":590,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/coreos/docs/pulls/598"},"html":{"href":"https://github.com/coreos/docs/pull/598"},"issue":{"href":"https://api.github.com/repos/coreos/docs/issues/598"},"comments":{"href":"https://api.github.com/repos/coreos/docs/issues/598/comments"},"review_comments":{"href":"https://api.github.com/repos/coreos/docs/pulls/598/comments"},"review_comment":{"href":"https://api.github.com/repos/coreos/docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/coreos/docs/pulls/598/commits"},"statuses":{"href":"https://api.github.com/repos/coreos/docs/statuses/93963909c8bade1b1835a13c8289ebb4b5a1413f"}}}}