首页 > 解决方案 > 使用 ansible 角色和默认值启动服务

问题描述

我正在尝试在 ansible 中设置一个角色来安装一些具有所需应用程序的服务器。其中一个应用程序是 docker。

Docker-ce 安装成功。现在我试图告诉系统启动 docker.service 并通过重新启动来启用它。

当我在“with_items”上创建一个列表时,它工作正常,当我尝试使用我的 defaults/main.yml 文件中的列表时,ansible 告诉我它找不到服务泊坞窗。现在我想知道,也许只是一些拼写问题?

这个工作正常

  - name: Start and enable needed services
    systemd:
      name: "{{ item }}"
      state: started
      enabled: yes
      daemon_reload: yes
    with_items:
      - docker

这个不行

  - name: Start and enable needed services
    systemd:
      name: "{{ clientonline }}"
      state: started
      enabled: yes
      daemon_reload: yes
-------
# in defaults/main.yml
  clientonline:
    - docker

当我使用来自 defaults/main.yml 的列表时,Ansible 找不到 docker 服务

 [WARNING]: The value ['docker'] (type list) in a string field was converted to u"['docker']" (type string). If this does not look like what you expect, quote the entire value to ensure it does not change.

此示例也不起作用:

  - name: Start and enable needed services
    systemd:
      name: "{{ item }}"
      state: started
      enabled: yes
      daemon_reload: yes
    with_items:
     - clientonline

这带来了这个错误:

failed: [fgi_appdeploy_server] (item=clientonline) => {"ansible_loop_var": "item", "changed": false, "item": "clientonline", "msg": "Could not find the requested service clientonline: host"}

标签: ansible

解决方案


那可行:

- name: Start and enable needed services
    systemd:
      name: "{{ item }}"
      state: started
      enabled: yes
      daemon_reload: yes
   with_item:
     - "{{ clientonline }}"

因为clientonline是一个列表,您需要遍历它


推荐阅读