added support for local pypi mirrors
Change-Id: I509cca3114aafbff72fc2413e262ea5408e56fa9
diff --git a/README.rst b/README.rst
index 35d83b9..bfc9644 100644
--- a/README.rst
+++ b/README.rst
@@ -50,6 +50,25 @@
module:
django: true
+Using offline mirrors
+
+.. code-block:: yaml
+
+ python:
+ environment:
+ enabled: true
+ user:
+ - root:
+ name: root
+ pypi_user: user
+ pypi_password: password
+ pypi_mirror:
+ host: http://pypi.local
+ port: 8084
+ upstream_fallback: true
+ user: user
+ password: password
+
Read more
=========
diff --git a/python/environment.sls b/python/environment.sls
index 355d05e..cbb508b 100644
--- a/python/environment.sls
+++ b/python/environment.sls
@@ -16,23 +16,45 @@
{%- endif %}
-{%- if network.proxy.host == 'none' %}
+{%- for user in environment.user %}
+{% set user_home = salt['user.info'](user.name).get('home') %}
-/root/pip/pip.conf:
+{%- if network.proxy.host == 'none' and user.pypi_mirror is not defined %}
+
+{{user_home}}/.pip/pip.conf:
file.absent
-
+
{%- else %}
-/root/pip:
- file.directory
-
-/root/pip/pip.conf:
+{{user_home}}/.pip/pip.conf:
file.managed:
+ - defaults:
+ environment: {{ user }}
+ - makedirs: True
- template: jinja
- source: salt://python/files/pip.conf
{%- endif %}
+{%- if user.pypi_mirror is defined %}
+
+{{user_home}}/.pydistutils.cfg:
+ file.managed:
+ - defaults:
+ environment: {{ user }}
+ - template: jinja
+ - source: salt://python/files/pydistutils.cfg
+
+{{user_home}}/.pypirc:
+ file.managed:
+ - defaults:
+ environment: {{ user }}
+ - template: jinja
+ - source: salt://python/files/pypirc
+
+{%- endif %}
+{%- endfor %}
+
{%- if environment.module.django %}
python_django_packages:
diff --git a/python/files/pip.conf b/python/files/pip.conf
index 3c42cf7..dcbe586 100644
--- a/python/files/pip.conf
+++ b/python/files/pip.conf
@@ -1,4 +1,14 @@
{%- from "linux/map.jinja" import network with context %}
[global]
+{%- if not network.proxy.host == 'none' %}
proxy = {{ network.proxy.host }}:{{ network.proxy.port }}
+{%- endif %}
+
+{%- if environment.pypi_mirror is defined %}
+index-url = {{ environment.pypi_mirror.host }}:{{environment.pypi_mirror.port}}/
+{%- if environment.pypi_mirror.get('upstream_fallback', false) %}
+extra-index-url = https://pypi.python.org/simple/
+{%- endif %}
+trusted-host = {{ environment.pypi_mirror.host }}
+{%- endif %}
\ No newline at end of file
diff --git a/python/files/pydistutils.cfg b/python/files/pydistutils.cfg
new file mode 100644
index 0000000..793be1f
--- /dev/null
+++ b/python/files/pydistutils.cfg
@@ -0,0 +1,2 @@
+[easy_install]
+index-url={{ environment.pypi_mirror.host }}:{{ environment.pypi_mirror.port }}/
\ No newline at end of file
diff --git a/python/files/pypirc b/python/files/pypirc
new file mode 100644
index 0000000..b49d42c
--- /dev/null
+++ b/python/files/pypirc
@@ -0,0 +1,18 @@
+[distutils]
+index-servers =
+ local
+{%- if environment.pypi_mirror.get('upstream_fallback', false) %}
+ pypi
+{%- endif %}
+
+[local]
+username: {{ environment.pypi_mirror.get('user', 'user') }}
+password: {{ environment.pypi_mirror.get('password', 'password') }}
+repository: {{ environment.pypi_mirror.host }}:{{ environment.pypi_mirror.port }}/
+
+{%- if environment.pypi_mirror.get('upstream_fallback', false) == True %}
+[pypi]
+username: {{ environment.get('pypi_user', 'user') }}
+password: {{ environment.get('pypi_password', 'password') }}
+repository: https://pypi.python.org/simple/
+{%- endif %}
\ No newline at end of file