使用Ansible在Openstack中运行服务器后运行shell命令

问题描述

我将使用ansible剧本在Openstack中运行服务器。

〜/ ansible / roles / launch_instance / tasks / main.yml

---
- name: launch instance
  os_server:
    name: "{{ prefix }}-{{ item.name }}"
    state: present
    key_name: "{{ item.key }}"
    nics: "{{ item.nics }}"
    image: "{{ item.image }}"
    flavor: "{{ item.flavor }}"
    timeout: 400
    meta: "{{ item.meta }}"
    userdata: "{{ item.userdata }}"
  with_items: "{{ servers }}"
  register: "os_hosts"
- debug: var=os_hosts

〜/ ansible / roles / launch_instance / tasks / main.yml

---
prefix: icr
servers:

  - name: server-one
    image: ubuntu18_cloud
    flavor: c1m512d5
    key: my-cloud-key-pub
    nics: "port-id=70f5cba4-8d5e-4c36-9482-64645458ff7b"
    userdata: |
      #!/bin/bash -ex
      curl -o controller.cfg http://192.168.1.240/controller.cfg
    meta:
      group: ubuntu_servers

启动服务器后,我通过ssh(ssh [email protected])连接,希望看到从Web服务器下载的文件。但是主目录为空。 在本地,命令​​curl -o controller.cfg http://192.168.1.240/controller.cfg正常工作。

调试:

ok: [localhost] => {
    "os_hosts": {
        "changed": true,"msg": "All items completed","results": [
            {
              ...
              "userdata": "#!/bin/bash -ex\ncurl -o controller.cfg http://192.168.1.240/controller.cfg\n",...
            }
...
}

我也尝试过:

userdata: |
      {%- raw -%}#!/bin/bash -ex
      curl -o controller.cfg http://192.168.1.240/controller.cfg{% endraw -%}

您能告诉我们ansible启动服务器后如何执行shell命令吗?

PS: 也没有给出积极的结果。

userdata: |
      #cloud-config
      runcmd:
        - touch /test.txt

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)