如何在ansible playbook中使用文件的行作为变量?

时间:2018-05-22 18:10:35

标签: ansible ansible-2.x ansible-inventory

我正在寻找一种在ansible playbook中使用文件行作为变量的方法。 我有一个使用大约15-20个变量的变量数量的剧本。所以我很难在运行时传递这15个变量。 为此,我将创建一个文件,如:

**** variables.txt *****

Tomcat8
192.168.0.67
8080
8081
8082
8084

Playbook Sample:

---
- hosts: tomcat_server
  vars:
    tomcat_instances:
      - name: foo
        user: tomcatfoo
        group: tomcatfoo
        path: /srv/tomcatfoo
        home: /home/tomcatfoo
        service_name: foo@tomcat
        service_file: foo@.service
        port_ajp: 18009
        port_connector: 18080
        port_redirect: 18443
        port_shutdown: 18005

因此,如果有任何方法我可以调用行号来传递playbook中变量的值,那将非常有用。

提前致谢!

2 个答案:

答案 0 :(得分:0)

我建议使用结构化的方式管理变量,如:

tomcat:
  p_port: 8080 
  s_port: 8081
  ip  : 192.168.0.1

然后读取像

这样的变量
  - name: Read all variables
    block:
      - name: Get All Variables
        stat:
          path: "{{item}}"
        with_fileglob:
          - "/myansiblehome/vars/common/tomcat1.yml"
          - "/myansiblehome/vars/common/tomcat2.yml"
        register: _variables_stat

      - name: Include Variables when found
        include_vars : "{{item.stat.path}}"
        when         : item.stat.exists
        with_items   : "{{_variables_stat.results}}"
        no_log       : true
    delegate_to: localhost
    become: false

之后,请使用:

- name: My Tomcat install
  mymodule:
    myaction1: "{{ tomcat.p_port }}"
    myaction2: "{{ tomcat.s_port }}"
    myaction3: "{{ tomcat.ip }}"

希望有所帮助

答案 1 :(得分:0)

有几种方法可以做到这一点,但我会设置一个Tomcat角色并在tomcat_role/default/main.yml中设置变量。如果您需要更改Tomcat配置,它可以从一个地方整齐地完成。

tomcat_role / default / main.yml 示例:

---
tomcat_user: tomcat
tomcat_group: tomcat
tomcat_path: "/path/to/tomcat"

当我想调用Tomcat配置时,我会在我的播放中声明它:

- name: Set up Tomcat
  hosts: your_host_here
  become: yes
  roles:
    - tomcat_role

然后,我可以在我的游戏中调用该角色的变量:

  user: {{tomcat_user}}
  path: {{tomcat_path}}

希望这有帮助。