如何编辑蓝图,以便在cloudify运行的docker容器中自动运行命令

时间:2017-07-26 02:30:33

标签: docker blueprint cloudify

我想以cloudify方式运行RYU控制器的docker容器。我编写了一个蓝图文件,我可以用它来创建相关的部署,最后启动docker容器。

问题是,控制器(在docker容器内)需要实现一个脚本来运行,但我不知道如何修改蓝图文件以自动运行脚本。每次,我都必须输入docker exec CONTAINER ryu-manager /path/simple_switch.py作为目标。

所以有人都知道命令应放在蓝图中的哪个位置。我试图把它包含在

interfaces:
  cloudify.interfaces.lifecycle:
    create:
      implementation: docker.docker_plugin.tasks.create_container
      inputs:
        params:
          ports:
            - { get_input: docker_port }
          stdin_open: true
          tty: true
          command: /bin/bash

    start:
      implementation: docker.docker_plugin.tasks.start
      inputs:
        params:
          port_bindings: { get_input: container_port_binding }
          command: docker exec ryu ryu-manager /ryu/ryu/app/simple_switch.py
          # here ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ 

但收到意外参数错误。

感谢您的时间,任何意见将不胜感激〜

或者让我这样说,如果有人知道,cloudify蓝图中的哪一部分与docker exec匹配?

2 个答案:

答案 0 :(得分:1)

我经常使用Cloudify,而且我经常使用Docker。 Docker插件很容易拥有"但它确实没有必要。您可以运行像" docker exec"这样的命令。和#34;码头运行"从Cloudify脚本插件内部得到相同的结果,你不需要找出一个不同的界面来使用Docker。

例如,如果我有这个cloudify蓝图(简化):

yaml node_templates: my_app: type: cloudify.nodes.SoftwareComponent interfaces: cloudify.interfaces.lifecycle: create: implementation: scripts/create.sh start: implementation: scripts/start.sh relationships: - type: cloudify.relationships.depends_on target: vm

我可以调用这样的脚本:

脚本/ create.sh:

docker run -d ryu

脚本/ start.sh

docker exec -it ryu ryu-manager /ryu/ryu/app/simple_switch.py

答案 1 :(得分:0)

在我回答之前,我没有cloudify的经验,但我查看了文档以了解它的全部内容。以下是我对你的提示。

首先,我查看了URL下面的docker插件

https://github.com/cloudify-cosmo/cloudify-docker-plugin/blob/master/docker_plugin/tasks.py

它没有任何执行声明。因此,您应该从创建和开始生命周期中删除command。这样做可以确保默认图像命令运行。

现在您的任务是在容器内执行其他命令。由于docker插件不支持该操作,因此最好的办法是获取新创建的容器的容器ID。这应该可以使用一些输出参数捕获

现在,您要在本地计算机或安装了docker的远程计算机上执行命令。这可以设置为另一个生命周期,它从创建的容器中获取ID并在该主docker主机上执行docker exec <ID> ryu-manager /ryu/ryu/app/simple_switch.py命令