diff --git a/.gitignore b/.gitignore
index f4c7d990a0695d187797ea51f4e87eb69d5d7cd5..8d5d5088b8b3edddf97212a64197856ef6352bbf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,12 +8,85 @@ temp
 .tox
 .cache
 *.bak
-*.egg-info
-*.pyc
-*.pyo
 *.tfstate
 *.tfstate.backup
 **/*.sw[pon]
 /ssh-bastion.conf
 **/*.sw[pon]
 vagrant/
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# Distribution / packaging
+.Python
+env/
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*,cover
+.hypothesis/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# IPython Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# dotenv
+.env
+
+# virtualenv
+venv/
+ENV/
diff --git a/ansible.cfg b/ansible.cfg
index d1741836a3eeb3a7fd546c4ed99245affe161e93..aecb198a007728794c1dbe49364595f855c9bcaf 100644
--- a/ansible.cfg
+++ b/ansible.cfg
@@ -10,3 +10,4 @@ fact_caching_connection = /tmp
 stdout_callback = skippy
 library = ./library
 callback_whitelist = profile_tasks
+roles_path = roles:$VIRTUAL_ENV/usr/local/share/kubespray/roles:$VIRTUAL_ENV/usr/local/share/ansible/roles
diff --git a/contrib/packaging/rpm/ansible-kubespray.spec b/contrib/packaging/rpm/ansible-kubespray.spec
new file mode 100644
index 0000000000000000000000000000000000000000..1876e0c35d8cb0bb5cb7ebfbf002c3e4e79fdf0b
--- /dev/null
+++ b/contrib/packaging/rpm/ansible-kubespray.spec
@@ -0,0 +1,60 @@
+%global srcname ansible_kubespray
+
+%{!?upstream_version: %global upstream_version %{version}%{?milestone}}
+
+Name:           ansible-kubespray
+Version:        XXX
+Release:        XXX
+Summary:        Ansible modules for installing Kubernetes
+
+Group:          System Environment/Libraries
+License:        ASL 2.0
+Vendor:         Kubespray <smainklh@gmail.com>
+Url:            https://github.com/kubernetes-incubator/kubespray
+Source0:        https://github.com/kubernetes-incubator/kubespray/archive/%{upstream_version}.tar.gz
+
+BuildArch:      noarch
+BuildRequires:  git
+BuildRequires:  python2-devel
+BuildRequires:  python-setuptools
+BuildRequires:  python-d2to1
+BuildRequires:  python-pbr
+
+Requires: ansible
+Requires: python-jinja2
+Requires: python-netaddr
+
+%description
+
+Ansible-kubespray is a set of Ansible modules and playbooks for
+installing a Kubernetes cluster. If you have questions, join us
+on the https://slack.k8s.io, channel '#kubespray'.
+
+%prep
+%autosetup -n %{name}-%{upstream_version} -S git
+
+
+%build
+%{__python2} setup.py build
+
+
+%install
+export PBR_VERSION=%{version}
+export SKIP_PIP_INSTALL=1
+%{__python2} setup.py install --skip-build --root %{buildroot}
+
+
+%files
+%doc README.md
+%doc inventory/inventory.example
+%config /etc/kubespray/ansible.cfg
+%config /etc/kubespray/inventory/group_vars/all.yml
+%config /etc/kubespray/inventory/group_vars/k8s-cluster.yml
+%license LICENSE
+%{python2_sitelib}/%{srcname}-%{version}-py%{python2_version}.egg-info
+/usr/local/share/kubespray/roles/
+/usr/local/share/kubespray/playbooks/
+%defattr(-,root,root)
+
+
+%changelog
diff --git a/requirements.txt b/requirements.txt
index 6458113ac548ecfba541c9124c1c0eaf30bcacf2..31181e7ac9b801f4454f8959af3111f7fecb4b9d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,4 @@
+pbr>=1.6
 ansible>=2.3.0
 netaddr
 jinja2>=2.9.6
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..3e147d6b84939d336dcea6c6150590f2f0780941
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,52 @@
+[metadata]
+name = ansible-kubespray
+summary = Ansible modules for installing Kubernetes
+description-file =
+    README.md
+author = Kubespray
+author-email = smainklh@gmail.com
+home-page = https://github.com/kubernetes-incubator/kubespray
+classifier =
+  License :: OSI Approved :: Apache Software License
+  Development Status :: 4 - Beta
+  Intended Audience :: Developers
+  Intended Audience :: System Administrators
+  Intended Audience :: Information Technology
+  Topic :: Utilities
+
+[global]
+setup-hooks =
+    pbr.hooks.setup_hook
+
+[files]
+data_files =
+    /usr/local/share/kubespray/playbooks/ =
+        cluster.yml
+        upgrade-cluster.yml
+        scale.yml
+        reset.yml
+        extra_playbooks/upgrade-only-k8s.yml
+    /usr/local/share/kubespray/roles = roles/*
+doc_files =
+    README.md
+    inventory/inventory.example
+config_files =
+    /etc/kubespray/ =
+        ansible.cfg
+    /etc/kubespray/inventory/ =
+        inventory/group_vars/all.yml
+        inventory/group_vars/k8s-cluster.yml
+
+[wheel]
+universal = 1
+
+[pbr]
+skip_authors = True
+skip_changelog = True
+
+[bdist_rpm]
+group = "System Environment/Libraries"
+requires =
+    ansible
+    python-jinja2
+    python-netaddr
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000000000000000000000000000000000000..6a931a61c08b224609f4742d67e5845b60ec8e07
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,19 @@
+#   Copyright Red Hat, Inc. All Rights Reserved.
+#
+#   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.
+
+import setuptools
+
+setuptools.setup(
+    setup_requires=['pbr'],
+    pbr=True)