因此,我正在尝试创建一个bash脚本来传递为ansible制作清单文件所需的IP数组。官方文档称,这是通过以下方式实现的
declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}然而,在bash脚本中CONFIG_FILE被设置为变量,因此它会停止创建清单文件,因为变量不会传递到python文件中
我尝试了以下方法,尝试将varible传递给python文件,以尝试创建清单文件
declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
CONFIG_FILE=kubespray/inventory/mycluster/hosts.yaml
python3 kubespray/contrib/inventory_builder/inventory.py ${IPS[@]}这导致了
DEBUG: Adding group all
DEBUG: Adding group kube-master
DEBUG: Adding group kube-node
DEBUG: Adding group etcd
DEBUG: Adding group k8s-cluster
DEBUG: Adding group calico-rr
DEBUG: adding host node1 to group all
DEBUG: adding host node2 to group all
DEBUG: adding host node3 to group all
DEBUG: adding host node1 to group etcd
DEBUG: adding host node2 to group etcd
DEBUG: adding host node3 to group etcd
DEBUG: adding host node1 to group kube-master
DEBUG: adding host node2 to group kube-master
DEBUG: adding host node1 to group kube-node
DEBUG: adding host node2 to group kube-node
DEBUG: adding host node3 to group kube-node
Traceback (most recent call last):
File "kubespray/contrib/inventory_builder/inventory.py", line 431, in
sys.exit(main())
File "kubespray/contrib/inventory_builder/inventory.py", line 427, in main
KubesprayInventory(argv, CONFIG_FILE)
File "kubespray/contrib/inventory_builder/inventory.py", line 116, in __init__
self.write_config(self.config_file)
File "kubespray/contrib/inventory_builder/inventory.py", line 120, in write_config
with open(self.config_file, 'w') as f:
FileNotFoundError: [Errno 2] No such file or directory: './inventory/sample/hosts.yaml'我也试过
declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
CONFIG_FILE=kubespray/inventory/mycluster/hosts.yaml
${CONFIG_FILE} python3 kubespray/contrib/inventory_builder/inventory.py ${IPS[@]}这导致了
-bash: kubespray/inventory/mycluster/hosts.yaml: No such file or directory这是可以理解的,但其思想是通过python脚本创建文件
可以让bash脚本工作,这样它就可以执行下面列出的操作
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}?
更新
因此,经过一些修补后,我得出结论,这可能是由于我的pip虚拟环境,因为我的脚本试图在运行命令之前创建一个虚拟环境,以便了解更多上下文
#!/bin/bash
echo "setting up virtual environment"
sleep 2
sudo apt-get install python3-venv -y
python3 -m venv tutorial-env
source tutorial-env/bin/activate
echo "installing pip requirements"
sudo pip3 install -r kubespray/requirements.txt
cp -rfp kubespray/inventory/sample kubespray/inventory/mycluster
declare -a IPS=(IP1 IP2 IP3)
echo "${IPS[@]}"
CONFIG_FILE=kubespray/inventory/mycluster/hosts.yaml python3 kubespray/contrib/inventory_builder/inventory.py ${IPS[@]}
cat kubespray/inventory/mycluster/hosts.yaml
sudo ansible-playbook -i kubespray/inventory/mycluster/hosts.yaml --ssh-extra-args="-oStrictHostKeyChecking=no" --key-file "~/.ssh/id_rsa" --become-user="provision" kubespray/cluster.yml如果我删除这些行
python3 -m venv tutorial-env
source tutorial-env/bin/activate然后脚本按预期工作,在某种程度上理想情况下它应该在虚拟环境中工作,对于这个措辞糟糕的问题,我深表歉意。
发布于 2021-02-26 21:42:38
问题来自于sudo在你的脚本中。
您可以创建一个virtualenv并为本地会话激活它。
但是,您可以切换到根上下文来安装需求,这些需求是在系统级安装的,而不是在virtualenv级安装的。
然后,在没有安装需求的情况下,在virtualenv上下文中执行back python,它将失败。
它解释了为什么在您使用系统级安装需求时,它在没有virtualenv的情况下工作。
要解决这个问题,只需安装需求而不使用sudo当您在virtualenv中工作时:安装需求并执行ansible。
https://stackoverflow.com/questions/66375229
复制相似问题