From 7f7d36738560c4c2464f9dd175b93955bc0b0832 Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Thu, 7 Dec 2017 19:01:18 +0000
Subject: [PATCH] Support configuration of a remote virtualenv for
 kolla-ansible

---
 ansible/group_vars/all/kolla                                 | 4 ++++
 ansible/roles/kolla-ansible/defaults/main.yml                | 4 ++++
 ansible/roles/kolla-ansible/templates/overcloud-top-level.j2 | 5 +++++
 ansible/roles/kolla-ansible/templates/seed.j2                | 4 ++++
 etc/kayobe/kolla.yml                                         | 4 ++++
 5 files changed, 21 insertions(+)

diff --git a/ansible/group_vars/all/kolla b/ansible/group_vars/all/kolla
index 48c044e12..ac2703114 100644
--- a/ansible/group_vars/all/kolla
+++ b/ansible/group_vars/all/kolla
@@ -250,6 +250,10 @@ kolla_overcloud_inventory_kolla_top_level_groups:
 ###############################################################################
 # Kolla-ansible configuration.
 
+# Virtualenv directory where Kolla-ansible's ansible modules will execute
+# remotely on the target nodes. If None, no virtualenv will be used.
+kolla_ansible_target_venv: "{{ virtualenv_path ~ '/kolla-ansible' }}"
+
 # Password to use to encrypt the kolla-ansible passwords.yml file.
 kolla_ansible_vault_password: "{{ lookup('env', 'KAYOBE_VAULT_PASSWORD') | default }}"
 
diff --git a/ansible/roles/kolla-ansible/defaults/main.yml b/ansible/roles/kolla-ansible/defaults/main.yml
index 6d40e4f4a..8aa472f0d 100644
--- a/ansible/roles/kolla-ansible/defaults/main.yml
+++ b/ansible/roles/kolla-ansible/defaults/main.yml
@@ -15,6 +15,10 @@ kolla_ansible_source_version:
 # Virtualenv directory where Kolla-ansible will be installed.
 kolla_ansible_venv: "{{ ansible_env['PWD'] }}/kolla-venv"
 
+# Virtualenv directory where Kolla-ansible's ansible modules will execute
+# remotely on the target nodes. If None, no virtualenv will be used.
+kolla_ansible_target_venv:
+
 # Password to use to encrypt the passwords.yml file.
 kolla_ansible_vault_password:
 
diff --git a/ansible/roles/kolla-ansible/templates/overcloud-top-level.j2 b/ansible/roles/kolla-ansible/templates/overcloud-top-level.j2
index d540371c5..8458f2a3a 100644
--- a/ansible/roles/kolla-ansible/templates/overcloud-top-level.j2
+++ b/ansible/roles/kolla-ansible/templates/overcloud-top-level.j2
@@ -30,6 +30,11 @@
 [overcloud:vars]
 ansible_user=kolla
 ansible_become=true
+{% if kolla_ansible_target_venv is not none %}
+# Execute ansible modules on the remote target hosts using a virtualenv.
+ansible_python_interpreter={{ kolla_ansible_target_venv }}/bin/python
+{% endif %}
+
 
 {% for kolla_group, kolla_group_config in kolla_overcloud_inventory_top_level_group_map.items() %}
 {% if 'groups' in kolla_group_config %}
diff --git a/ansible/roles/kolla-ansible/templates/seed.j2 b/ansible/roles/kolla-ansible/templates/seed.j2
index 2d0e80ab6..20f826694 100644
--- a/ansible/roles/kolla-ansible/templates/seed.j2
+++ b/ansible/roles/kolla-ansible/templates/seed.j2
@@ -7,6 +7,10 @@
 
 [seed:vars]
 ansible_user=kolla
+{% if kolla_ansible_target_venv is not none %}
+# Execute ansible modules on the remote target hosts using a virtualenv.
+ansible_python_interpreter={{ kolla_ansible_target_venv }}/bin/python
+{% endif %}
 
 [baremetal:children]
 seed
diff --git a/etc/kayobe/kolla.yml b/etc/kayobe/kolla.yml
index c27a199d4..ed3baeb09 100644
--- a/etc/kayobe/kolla.yml
+++ b/etc/kayobe/kolla.yml
@@ -131,6 +131,10 @@
 ###############################################################################
 # Kolla-ansible configuration.
 
+# Virtualenv directory where Kolla-ansible's ansible modules will execute
+# remotely on the target nodes. If None, no virtualenv will be used.
+#kolla_ansible_target_venv:
+
 # Whether TLS is enabled for the external API endpoints.
 #kolla_enable_tls_external: