首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何在bash文件中将config var传递给python for kubespray动态库存?

我如何在bash文件中将config var传递给python for kubespray动态库存?
EN

Stack Overflow用户
提问于 2021-02-26 03:29:39
回答 1查看 120关注 0票数 0

因此,我正在尝试创建一个bash脚本来传递为ansible制作清单文件所需的IP数组。官方文档称,这是通过以下方式实现的

代码语言:javascript
复制
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文件,以尝试创建清单文件

代码语言:javascript
复制
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[@]}

这导致了

代码语言:javascript
复制
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'

我也试过

代码语言:javascript
复制
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[@]}

这导致了

代码语言:js
复制
-bash: kubespray/inventory/mycluster/hosts.yaml: No such file or directory

这是可以理解的,但其思想是通过python脚本创建文件

可以让bash脚本工作,这样它就可以执行下面列出的操作

代码语言:js
复制
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

?

更新

因此,经过一些修补后,我得出结论,这可能是由于我的pip虚拟环境,因为我的脚本试图在运行命令之前创建一个虚拟环境,以便了解更多上下文

代码语言:javascript
复制
#!/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

如果我删除这些行

代码语言:javascript
复制
python3 -m venv tutorial-env
source tutorial-env/bin/activate

然后脚本按预期工作,在某种程度上理想情况下它应该在虚拟环境中工作,对于这个措辞糟糕的问题,我深表歉意。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-26 21:42:38

问题来自于sudo在你的脚本中。

您可以创建一个virtualenv并为本地会话激活它。

但是,您可以切换到根上下文来安装需求,这些需求是在系统级安装的,而不是在virtualenv级安装的。

然后,在没有安装需求的情况下,在virtualenv上下文中执行back python,它将失败。

它解释了为什么在您使用系统级安装需求时,它在没有virtualenv的情况下工作。

要解决这个问题,只需安装需求而不使用sudo当您在virtualenv中工作时:安装需求并执行ansible。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66375229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档