我正在尝试获取VM的IP地址,然后尝试使用它来建立到该VM的SSH。以下是剧本:
---
- hosts: localhost
become: yes
connection: local
gather_facts: false
serial: 1
vars_files:
- createVmVars.yml
tasks:
- name: Gathering Vm info.
vsphere_guest:
vcenter_hostname: "{{vcenter_hostname}}"
username: "{{vcenter_username}}"
password: "{{vcenter_password}}"
guest: "{{guest_name}}"
vmware_guest_facts: yes
register: var
- debug: msg="{{var.ansible_facts.hw_eth0.ipaddresses[0]}}"
- name: Establishing SSH connection.
script: /home/shasha/devOps/scripts/ssh_configure.sh "{{var.ansible_facts.hw_eth0.ipaddresses[0]}}"
以下是ssh_configure.sh的内容:
#!/bin/sh
ssh-keygen -t rsa
ssh-copy-id $1
但是当我运行剧本时,我在执行第三项任务时遇到以下错误:
错误! '无功'未定义
但调试模块(第二项任务)正在打印IP地址。
可能出现什么问题或者可以这样做?
答案 0 :(得分:1)
看看这是否有效。我还没有测试过这个。
- name: Set VM IP to be used later
set_fact:
vm_ip: "{{var.ansible_facts.hw_eth0.ipaddresses[0]}}"
在您的任务中使用vm_ip
答案 1 :(得分:0)
您还应该列出您正在使用的ansible版本以获得最佳帮助。要专门回答您的问题,您需要引用整个命令字符串:
- name: Establishing SSH connection.
script: "/home/shasha/devOps/scripts/ssh_configure.sh {{var.ansible_facts.hw_eth0.ipaddresses[0]}}"
这应该可以修复你未定义的变量问题。
那说你正在做的事情是行不通的,因为假设这是一个新配置的虚拟机,ssh-copy-id会提示你输入密码,这样你就可以登录并获得新创建的(可能)pub键添加到authoized_keys。假设您知道新VM的SSH密码,这就是我的建议。
1 - 从VM获取事实
2 - 使用add_host动态地将您的主机添加到广告资源。使用从事实收集中获得的IP。确保添加ansible_ssh_password,以便在不提示的情况下登录。
- add_host: name="{{guest_name}}" ansible_ssh_host="{{var.ansible_facts.hw_eth0.ipaddresses[0]}}" ansible_ssh_pass="{{guest_password}}" groups=dynamic_hosts
使用内置的ansible模块移动public key over(以供将来使用的Playbook),copy并在shell中执行它们。例如,你的下一个游戏将是:
- hosts: dynamic_hosts
tasks:
- name: move over public key
authorized_key: user=foo key="{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
- name: copy over script files
copy: src=scripts/{{item}} dest=scripts/{{items}}
with_items:
- foo.bash
- bar.py
- thing.pl
- name: run script files
shell: "scripts/{{item}}"
with_items:
- foo.bash
- bar.py
- thing.pl