ansible - 在 yandex 云中使用 ansible 配置 Packer 失败
问题描述
我正在尝试Packer
在本地 CentOS 机器上的 yandex-cloud 中创建图像。
Packer 使用Ansible
配置器并运行包含该角色的剧本。
打包机模板:
{
"variables": {
"zone": "ru-central1-a",
"instance_cores": "2"
},
"builders": [
{
"type": "yandex",
"service_account_key_file": "{{user `service_account_key_file`}}",
"folder_id": "{{user `folder_id`}}",
"source_image_family": "{{user `source_image_family`}}",
"image_name": "reddit-db-base",
"image_family": "reddit-base",
"ssh_username": "ubuntu",
"platform_id": "standard-v1",
"zone": "{{user `zone`}}",
"instance_cores": "{{user `instance_cores`}}",
"use_ipv4_nat" : "true"
}
],
"provisioners": [
{
"type": "ansible",
"playbook_file": "../ansible/playbooks/packer_db.yml",
"extra_arguments": ["--tags","install"],
"ansible_env_vars": ["ANSIBLE_ROLES_PATH=../ansible/roles"]
}
]
}
Ansible 剧本:
- name: Installing MongoDB
hosts: all
become: true
roles:
- db
但是,在此过程中,我收到以下错误:
...
==> yandex: Waiting for SSH to become available...
==> yandex: Connected to SSH!
==> yandex: Provisioning with Ansible...
yandex: Setting up proxy adapter for Ansible....
==> yandex: Executing Ansible: ansible-playbook -e packer_build_name="yandex" -e packer_builder_type=yandex --ssh-extra-args '-o IdentitiesOnly=yes' --tags install -e ansible_ssh_private_key_file=/tmp/ansible-key647683404 -i /tmp/packer-provisioner-ansible030511675 /home/ansible/playbooks/packer_db.yml
yandex:
yandex: PLAY [Installing MongoDB] *******************************************************
yandex:
yandex: TASK [Gathering Facts] *********************************************************
yandex: fatal: [default]: UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\", for more error information use -vvv. Failed command was: ( umask 77 && mkdir -p \"` echo /root/.ansible/tmp `\"&& mkdir \"` echo /root/.ansible/tmp/ansible-tmp-1614119638.2707298-11423-111899549529332 `\" && echo ansible-tmp-1614119638.2707298-11423-111899549529332=\"` echo /root/.ansible/tmp/ansible-tmp-1614119638.2707298-11423-111899549529332 `\" ), exited with result 1", "unreachable": true}
yandex:
yandex: PLAY RECAP *********************************************************************
yandex: default : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0
...
我该如何解决这个问题?任何帮助,将不胜感激!
解决方案
provisioners
通过在Packer 模板部分添加用户解决了该问题:
"provisioners": [
{
"type": "ansible",
"user": "ubuntu",
"playbook_file": "../ansible/playbooks/packer_db.yml",
"extra_arguments": ["--tags","install"],
"ansible_env_vars": ["ANSIBLE_ROLES_PATH=../ansible/roles"]
}
]
推荐阅读
- python - Librosa 安装 pip 失败
- swift - 如何在 SwiftUI 的 body 属性中显示函数中存在的值?
- python - spaCy 错误地将手指识别为动词
- javascript - 查询数据库时是否可以删除重复的数据字段?
- reactjs - 如何在测试中触发 useLayoutEffect?(使用 Jest 和 react-testing-library)
- python - 在熊猫数据框中为每个用户计算一次列信息
- svelte - Svelte 如何将 store 作为属性传递?
- node.js - 错误:协议错误(Fetch.continueRequest):InterceptionId 无效
- photogrammetry - Meshroom Meshing 节点因“深度图融合给出空结果”而失败
- xml - 对 XML 文档段的多个 XSL 转换