Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

<fix>[conf]: Isolating ansible with python venv #1347

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions conf/tools/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,60 @@ elif [ $tool = 'zstack-ctl' ]; then
chmod +x /usr/bin/zstack-ctl
python $CTL_VIRENV_PATH/lib/python2.7/site-packages/zstackctl/generate_zstackctl_bash_completion.py

elif [ $tool = 'zstack-sys' ]; then
SYS_VIRENV_PATH=/var/lib/zstack/virtualenv/zstacksys
NEED_INSTALL=false
if [ -d $SYS_VIRENV_PATH ]; then
. $SYS_VIRENV_PATH/bin/activate
if ! ansible --version | grep -q 'core 2.11.12.3'; then
deactivate
NEED_INSTALL=true
fi
else
NEED_INSTALL=true
fi
if $NEED_INSTALL; then
rm -rf $SYS_VIRENV_PATH && virtualenv $SYS_VIRENV_PATH --python=python2.7 || exit 1
. $SYS_VIRENV_PATH/bin/activate
cd $cwd
pip install -i $pypi_path --trusted-host localhost --ignore-installed setuptools==39.2.0 || exit 1
pip install -i $pypi_path --trusted-host localhost --ignore-installed ansible==4.10.0 || exit 1

cat > /usr/bin/ansible << EOF
#! /bin/sh
VIRTUAL_ENV=/var/lib/zstack/virtualenv/zstacksys
if [ ! -d $VIRTUAL_ENV ]; then
echo "Need to install zstacksys before using it"
exit 1
fi

LANG=en_US.UTF-8
LC_ALL=en_US.utf8
export LANG LC_ALL
. ${VIRTUAL_ENV}/bin/activate

ansible \$@
EOF
chmod +x /usr/bin/ansible

cat > /usr/bin/ansible-playbook << EOF
#! /bin/sh
VIRTUAL_ENV=/var/lib/zstack/virtualenv/zstacksys
if [ ! -d $VIRTUAL_ENV ]; then
echo "Need to install zstacksys before using it"
exit 1
fi

LANG=en_US.UTF-8
LC_ALL=en_US.utf8
export LANG LC_ALL
. ${VIRTUAL_ENV}/bin/activate

ansible-playbook \$@
EOF
chmod +x /usr/bin/ansible-playbook
fi

elif [ $tool = 'zstack-dashboard' ]; then
UI_VIRENV_PATH=/var/lib/zstack/virtualenv/zstack-dashboard
[ ! -z $force ] && rm -rf $UI_VIRENV_PATH
Expand Down
33 changes: 20 additions & 13 deletions core/src/main/java/org/zstack/core/ansible/AnsibleFacadeImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -131,17 +131,24 @@ void init() {
placePip703();
placeAnsible4100();

ShellUtils.run(String.format("if ! sudo ansible --version | grep -q 'core 2.11.12'; then " +
"if grep -i -s -E 'centos|rocky' /etc/system-release; then " +
"sudo yum remove -y ansible; " +
"elif grep -i -s ubuntu /etc/issue; then " +
"sudo apt-get --assume-yes remove ansible; " +
"else echo \"Warning: can't remove ansible from unknown platform\"; " +

ShellUtils.run(String.format(
"NEED_INSTALL=false; " +
"if [ -d /var/lib/zstack/virtualenv/zstacksys ]; then " +
". /var/lib/zstack/virtualenv/zstacksys/bin/activate; " +
"if ! ansible --version | grep -q 'core 2.11.12'; then " +
"deactivate; " +
"NEED_INSTALL=true; " +
"fi; " +
"else " +
"NEED_INSTALL=true; "+
"fi; " +
"sudo pip uninstall -y ansible; " +
"sudo pip install -i file://%s --trusted-host localhost -I setuptools==39.2.0; " +
"sudo pip install -i file://%s --trusted-host localhost -I ansible==4.10.0; " +
"fi", AnsibleConstant.PYPI_REPO, AnsibleConstant.PYPI_REPO), false);
"if $NEED_INSTALL; then " +
"sudo bash -c 'rm -rf /var/lib/zstack/virtualenv/zstacksys && virtualenv /var/lib/zstack/virtualenv/zstacksys --python=python2.7; "+
". /var/lib/zstack/virtualenv/zstacksys/bin/activate; "+
"pip install -i file://%s --trusted-host localhost -I setuptools==39.2.0; "+
"pip install -i file://%s --trusted-host localhost -I ansible==4.10.0'; "+
"fi" , AnsibleConstant.PYPI_REPO, AnsibleConstant.PYPI_REPO), false);

deployModule("ansible/zstacklib", "zstacklib.py");
} catch (IOException e) {
Expand Down Expand Up @@ -248,15 +255,15 @@ private void run(Completion completion) {
try {
String output;
if (AnsibleGlobalProperty.DEBUG_MODE2) {
output = ShellUtils.run(String.format("PYTHONPATH=%s timeout %d %s %s -i %s -vvvv --private-key %s -e '%s' | tee -a %s",
output = ShellUtils.run(String.format("bash -c '. /var/lib/zstack/virtualenv/zstacksys/bin/activate; PYTHONPATH=%s timeout %d %s %s -i %s -vvvv --private-key %s -e '\\''%s'\\' | tee -a %s",
AnsibleConstant.ZSTACKLIB_ROOT, timeout, executable, playBookPath, AnsibleConstant.INVENTORY_FILE, msg.getPrivateKeyFile(), JSONObjectUtil.dumpPretty(arguments), AnsibleConstant.LOG_PATH),
AnsibleConstant.ROOT_DIR);
} else if (AnsibleGlobalProperty.DEBUG_MODE) {
output = ShellUtils.run(String.format("PYTHONPATH=%s timeout %d %s %s -i %s -vvvv --private-key %s -e '%s'",
output = ShellUtils.run(String.format("bash -c '. /var/lib/zstack/virtualenv/zstacksys/bin/activate; PYTHONPATH=%s timeout %d %s %s -i %s -vvvv --private-key %s -e '\\''%s'\\'",
AnsibleConstant.ZSTACKLIB_ROOT, timeout, executable, playBookPath, AnsibleConstant.INVENTORY_FILE, msg.getPrivateKeyFile(), JSONObjectUtil.dumpPretty(arguments)),
AnsibleConstant.ROOT_DIR);
} else {
output = ShellUtils.run(String.format("PYTHONPATH=%s timeout %d %s %s -i %s --private-key %s -e '%s'",
output = ShellUtils.run(String.format("bash -c '. /var/lib/zstack/virtualenv/zstacksys/bin/activate; PYTHONPATH=%s timeout %d %s %s -i %s --private-key %s -e '\\''%s'\\'",
AnsibleConstant.ZSTACKLIB_ROOT, timeout, executable, playBookPath, AnsibleConstant.INVENTORY_FILE, msg.getPrivateKeyFile(), JSONObjectUtil.dumpPretty(arguments)),
AnsibleConstant.ROOT_DIR);
}
Expand Down