ubuntu - 这是在 Ubuntu 20.04 上分发 Ansible 的正确方法吗?
问题描述
我正在使用 Ubuntu Server 20.04 64bit 和 Ansible 2.8.13 构建 Ansible 服务器。除其他外,ansible 将管理一些 mysql 和 postgres 服务器等。在不久的将来,可能还会有 ansible 的版本升级。所以基于我有限的知识,这就是我到目前为止所拥有的
# Install
sudo apt-get -yqq install python3-pip python3-venv mysql-client postgresql-client libpq-dev
sudo python3 -m venv --clear /opt/ansible
. /opt/ansible/bin/activate
pip3 install wheel setuptools
pip3 install PyMySQL psycopg2 ansible==2.8.13
deactivate
鉴于为了运行这些可执行文件,必须为每个 ansible 可执行文件编写包装脚本以传递到主会话。
/usr/local/bin/ansible-playbook.2.8.sh
#!/usr/bin/env sh
. /opt/ansible/bin/activate
/opt/ansible/bin/ansible-playbook "$@"
result=$?
deactivate
exit "${result}"
最后用 update-alternatives 映射主可执行文件
update-alternatives --install /usr/local/bin/ansible-playbook ansible-playbook \
"/usr/local/bin/ansible-playbook-2.8.sh" 1
这在 2021 年被认为是体面的方法还是有更好的方法?
谢谢,
解决方案
实际上,经过更多的测试和阅读,这就是我想出的:
# Install
sudo apt-get -yqq install python3-pip python3-venv
sudo python3 -m venv --clear /opt/ansible
. /opt/ansible/bin/activate
pip3 install wheel
pip3 install ansible==2.8.13
deactivate
update-alternatives --install \
/usr/local/bin/ansible-playbook ansible-playbook \
/opt/ansible/bin/ansible-playbook 1
推荐阅读
- spring-integration - 我什么时候应该在 Spring Integration DSL 中使用 nullChannel() 而不是 get()?
- windows - 在文件有更多数据之前如何阻止生锈
- java - Android Studio TextView 导致模拟器崩溃
- swift - SwiftUI 工具栏项目在全屏时闪烁
- javascript - 在 HTML 中加入 JavaScript
- javascript - navigator.clopboard 刷新页面
- java - gradle 测试中的本机库路径
- javascript - Javascript 内容可编辑   更换问题
- mysql - 具有两个唯一值的Mysql 2外键
- react-native - 如何创建移动区块链应用程序