diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b8ffd18
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/rpmbuild/
\ No newline at end of file
diff --git a/10_vmx_guestinfo.cfg b/10_vmx_guestinfo.cfg
new file mode 100644
index 0000000..3d5a9b7
--- /dev/null
+++ b/10_vmx_guestinfo.cfg
@@ -0,0 +1 @@
+datasource_list: [ "VmxGuestinfo" ]
diff --git a/DataSourceVmxGuestinfo.py b/DataSourceVmxGuestinfo.py
new file mode 100644
index 0000000..c5d7998
--- /dev/null
+++ b/DataSourceVmxGuestinfo.py
@@ -0,0 +1,145 @@
+# vi: ts=4 expandtab
+#
+# Copyright (C) 2017 VMware Inc.
+#
+# Author: Anish Swaminathan <anishs@vmware.com>
+#
+import os
+import base64
+
+from cloudinit import log as logging
+from cloudinit import sources
+from cloudinit import util
+
+from distutils.spawn import find_executable
+
+LOG = logging.getLogger(__name__)
+
+class DataSourceVmxGuestinfo(sources.DataSource):
+    def __init__(self, sys_cfg, distro, paths, ud_proc=None):
+        sources.DataSource.__init__(self, sys_cfg, distro, paths, ud_proc)
+        self.metadata = {}
+        self.userdata_raw = ''
+        self.vmtoolsd = find_executable("vmtoolsd")
+        if not self.vmtoolsd:
+            LOG.error("Failed to find vmtoolsd")
+
+    def get_data(self):
+        if not self.vmtoolsd:
+            LOG.error("vmtoolsd is required to fetch guestinfo value")
+            return False
+        hostname = self._get_guestinfo_value('hostname')
+        if hostname:
+            self.distro.set_hostname(hostname)
+        ud = self._get_guestinfo_value('userdata')
+        if ud:
+            LOG.debug("Decoding base64 format guestinfo.userdata")
+            self.userdata_raw = base64.b64decode(ud)
+        found = True
+        dev_index = 0
+        network_settings = ''
+        while found:
+            key_begin = 'interface.' + str(dev_index)
+            key_iname = key_begin + '.name'
+            interface_name = self._get_guestinfo_value(key_iname)
+            if interface_name:
+                network_settings += 'auto ' + interface_name + '\n'
+                network_settings += 'iface ' + interface_name
+                key_proto = key_begin + '.dhcp'
+                dhcp_enabled = self._get_guestinfo_value(key_proto)
+                key_address = key_begin + '.address'
+                address = self._get_guestinfo_value(key_address)
+                bootproto = 'dhcp'
+                if dhcp_enabled:
+                    if dhcp_enabled == 'yes':
+                        network_settings += ' dhcp\n'
+                    elif dhcp_enabled == 'no':
+                        network_settings += ' static\n'
+                        bootproto = 'static'
+                    else:
+                        LOG.warning("Invalid value for yes/no parameter for %s, setting to dhcp", key_proto)
+                elif address:
+                    bootproto = 'static'
+                    dhcp_enabled == 'no'
+                    network_settings += ' static\n'
+                else:
+                    dhcp_enabled == 'yes'
+                    network_settings += ' dhcp\n'
+                    LOG.debug("Setting network bootproto to dhcp by default")
+                key_mac = key_begin + '.mac'
+                mac = self._get_guestinfo_value(key_mac)
+                if address:
+                    network_settings += 'address ' + address + '\n'
+                if mac:
+                    network_settings += 'hwaddress ' + mac + '\n'
+                key_netmask = key_begin + '.netmask'
+                netmask = self._get_guestinfo_value(key_netmask)
+                if netmask:
+                    network_settings += 'netmask ' + netmask + '\n'
+                key_dnsserver = 'dns.servers'
+                dnsserver = self._get_guestinfo_value(key_dnsserver)
+                if dnsserver:
+                    network_settings += 'dns-nameservers '
+                    dnsserver = dnsserver.split(',')
+                    for d in dnsserver:
+                        network_settings += d + ' '
+                    network_settings += '\n'
+                key_dnsdomain = 'dns.domains'
+                dnsdomain = self._get_guestinfo_value(key_dnsdomain)
+                if dnsdomain:
+                    network_settings += 'dns-search '
+                    dnsdomain = dnsdomain.split(',')
+                    for d in dnsdomain:
+                        network_settings += d + ' '
+                    network_settings += '\n'
+                route_index = 0
+                default_destination_set = False
+                while True:
+                    key_route = key_begin + '.route.' + str(route_index)
+                    route = self._get_guestinfo_value(key_route)
+                    if route:
+                        network_settings += "routes.%s " % (route_index)
+                        route = route.split(',')
+                        if len(route) > 2:
+                            LOG.debug("Route information for %s route in %s device incorrect - ", 
+                                                "expected 2 values", route_index, dev_index)
+                            continue
+                        elif len(route) == 2:
+                            network_settings += route[0] + ' ' + route[1] + '\n'# Gateway Destination
+                        else: #length = 1
+                            if not default_destination_set:
+                                network_settings += route[0] + ' 0.0.0.0/0' + '\n'
+                                default_destination_set = True
+                            else:
+                                LOG.debug("Default destination set previously, not setting route %s", route_index) 
+                    else:
+                        break
+                    route_index += 1
+            else:
+                found = False
+            dev_index += 1
+        self.distro.apply_network(network_settings, False)
+        return True
+
+    def _get_guestinfo_value(self, key):
+        LOG.debug("Getting guestinfo value for key %s", key)
+        value = ''
+        try:
+            (value, _err) = util.subp([self.vmtoolsd, "--cmd", "info-get guestinfo." + key])
+            if _err:
+                LOG.error("Failed to get guestinfo value for key %s", key)
+        except util.ProcessExecutionError as error:
+            util.logexc(LOG,"Failed to get guestinfo value for key %s: %s", key, error)
+        except Exception:
+            util.logexc(LOG,"Unexpected error while trying to get guestinfo value for key %s", key)
+        return value.rstrip()
+
+    def get_instance_id(self):
+        with open('/sys/class/dmi/id/product_uuid', 'r') as id_file:
+            return str(id_file.read()).rstrip()
+
+def get_datasource_list(depends):
+    """
+    Return a list of data sources that match this set of dependencies
+    """
+    return [DataSourceVmxGuestinfo]
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..6e97b68
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,2 @@
+FROM centos:7
+RUN yum install -y rpm-build
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..980a15a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                                Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..7dabfe5
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,15 @@
+all: build
+
+build:
+	@mkdir -p rpmbuild/RPMS rpmbuild/SPECS rpmbuild/SRPMS \
+	  rpmbuild/BUILD/etc/cloud/cloud.cfg.d \
+	  rpmbuild/BUILD/usr/lib/python2.7/site-packages/cloudinit/sources
+	docker build -t rpmbuild .
+	docker run --rm -it \
+		-v $$(pwd)/rpmmacros:/root/.rpmmacros:ro \
+		-v $$(pwd)/rpmbuild/:/root/rpmbuild \
+		-v $$(pwd)/rpm.spec:/root/rpmbuild/SPECS/rpm.spec:ro \
+		-v $$(pwd)/10_vmx_guestinfo.cfg:/root/rpmbuild/BUILD/etc/cloud/cloud.cfg.d/10_vmx_guestinfo.cfg:ro \
+		-v $$(pwd)/DataSourceVmxGuestinfo.py:/root/rpmbuild/BUILD/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceVmxGuestinfo.py:ro \
+		rpmbuild \
+		rpmbuild -ba /root/rpmbuild/SPECS/rpm.spec
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5bd27ad
--- /dev/null
+++ b/README.md
@@ -0,0 +1,61 @@
+# CentOS Cloud-Init Datasource for VMware VMX Guestinfo
+This project uses Docker to build an RPM for CentOS that provides a
+cloud-init datasource for VMware's VMX Guestinfo interface.
+
+## Getting Started
+Docker is required to build the RPM. Once Docker is installed simply run:
+
+```shell
+$ make
+```
+
+The RPM is created at `rpmbuild/RPMS/noarch/cloud-init-vmx-guestinfo-VERSION-RELEASE.noarch.rpm`.
+
+## Installation
+Either the `rpm` or `yum` tools can be used to install the RPM on CentOS.
+
+```shell
+$ yum install https://s3-us-west-2.amazonaws.com/cnx.vmware/cicd/centos/cloud-init-vmx-guestinfo-1.0.4-0.noarch.rpm
+```
+
+The above command will also install the required `cloud-init` dependency.
+
+## Creating a cloud-config file
+The first step to use the data source is to create a cloud config file:
+
+```yaml
+#cloud-config
+
+users:
+  - default
+  - name: akutz
+    primary_group: akutz
+    sudo: ALL=(ALL) NOPASSWD:ALL
+    groups: sudo, wheel
+    ssh_import_id: None
+    lock_passwd: true
+    ssh_authorized_keys:
+      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDE0c5FczvcGSh/tG4iw+Fhfi/O5/EvUM/96js65tly4++YTXK1d9jcznPS5ruDlbIZ30oveCBd3kT8LLVFwzh6hepYTf0YmCTpF4eDunyqmpCXDvVscQYRXyasEm5olGmVe05RrCJSeSShAeptv4ueIn40kZKOghinGWLDSZG4+FFfgrmcMCpx5YSCtX2gvnEYZJr0czt4rxOZuuP7PkJKgC/mt2PcPjooeX00vAj81jjU2f3XKrjjz2u2+KIt9eba+vOQ6HiC8c2IzRkUAJ5i1atLy8RIbejo23+0P4N2jjk17QySFOVHwPBDTYb0/0M/4ideeU74EN/CgVsvO6JrLsPBR4dojkV5qNbMNxIVv5cUwIy2ThlLgqpNCeFIDLCWNZEFKlEuNeSQ2mPtIO7ETxEL2Cz5y/7AIuildzYMc6wi2bofRC8HmQ7rMXRWdwLKWsR0L7SKjHblIwarxOGqLnUI+k2E71YoP7SZSlxaKi17pqkr0OMCF+kKqvcvHAQuwGqyumTEWOlH6TCx1dSPrW+pVCZSHSJtSTfDW2uzL6y8k10MT06+pVunSrWo5LHAXcS91htHV1M1UrH/tZKSpjYtjMb5+RonfhaFRNzvj7cCE1f3Kp8UVqAdcGBTtReoE8eRUT63qIxjw03a7VwAyB2w+9cu1R9/vAo8SBeRqw== sakutz@gmail.com
+```
+
+## Assigning the cloud-config data to the VM's Guestinfo
+Please note that this step requires that the VM be powered off.
+
+Once the cloud config file has been created, use the 
+[`govc`](https://github.com/vmware/govmomi/blob/master/govc/USAGE.md#vmchange)
+tool's `vm.change` command to set the appropriate keys on the powered-off VM:
+
+```shell
+$ govc vm.change -vm $VM -e guestinfo.userdata=$(cat cloud-config.yaml | gzip -9 | base64)
+$ govc vm.change -vm $VM -e guestinfo.userdata.encoding=gzip+base64
+```
+
+## Using the cloud-init VMX Guestinfo datasource
+Power the VM back on. If all went according to plan, the CentOS box has been
+locked down to SSH access only for the user defined in the above cloud-config
+YAML file.
+
+## Conclusion
+To learn more about how to use cloud-init with CentOS, please see the cloud-init
+[documentation](https://cloudinit.readthedocs.io/en/latest/index.html) for more 
+examples and reference information for the cloud-config files.
diff --git a/rpm.spec b/rpm.spec
new file mode 100644
index 0000000..b2344d2
--- /dev/null
+++ b/rpm.spec
@@ -0,0 +1,37 @@
+#
+# spec file for package cloud-init-vmx-guestinfo
+#
+
+#################################################################################
+# common
+#################################################################################
+Name:           cloud-init-vmx-guestinfo
+Version:        1.0.4
+Release:        0
+Summary:        A cloud-init datasource that uses VMX Guestinfo
+License:        Apache2
+Requires:       cloud-init
+Group:          Applications/System
+BuildArch:      noarch
+
+#################################################################################
+# specific
+#################################################################################
+%description
+A cloud-init datasource that uses VMX Guestinfo
+
+%prep
+
+%build
+
+%install
+mkdir -p %{buildroot}/
+cp -r ./* %buildroot/
+exit 0
+
+%clean
+
+%files
+%defattr(0644, root,root, 0755)
+/etc/cloud/cloud.cfg.d/10_vmx_guestinfo.cfg
+/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceVmxGuestinfo.py
diff --git a/rpmmacros b/rpmmacros
new file mode 100644
index 0000000..0a7528a
--- /dev/null
+++ b/rpmmacros
@@ -0,0 +1 @@
+%_topdir %(echo $HOME)/rpmbuild
