在Ansible剧本中动态设置HTTP_PROXY

时间:2018-12-03 10:12:14

标签: proxy ansible http-proxy

我正在一堆不需要http_proxy的服务器上运行一本剧本,而有需要的其他服务器(在不同的运行中)。

我已经读过https://docs.ansible.com/ansible/latest/user_guide/playbooks_environment.html,但并没有真正回答这个问题...

这是一个例子:

- hosts: all tasks: - name: install vi become: true apt: name: vi state: present

我想使用一组没有代理的服务器(例如server01-atlanta)启动它,并在另一组运行中使用带有代理的服务器(例如server01-berlin)启动它,并且每次运行之间不更改代码(因此设法使用广告资源变量来做到这一点。

我会

2 个答案:

答案 0 :(得分:0)

您可以结合使用 group_vars / host_vars 和环境变量来解决此问题。她是一个简单的示例,基于来自ansible文档的代码。

---
- hosts: all
  vars:
    proxy: # default empty
  tasks:    
    - apt: name=cobbler state=installed
      environment:
        http_proxy: "{{ proxy }}"

这是您为每个任务定义环境变量的方式。您也可以为此使用常规的ansible变量。文档中还有一个有关代理设置和变量的示例。参见:https://docs.ansible.com/ansible/latest/user_guide/playbooks_environment.html

在清单中,您可以为每个主机或组定义代理变量:

atlanta:
  hosts:
    host1:
    host2:
  vars:
    proxy: proxy.atlanta.example.com

有关更多详细信息,请参见清单文档:https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#host-variables

答案 1 :(得分:0)

对于任何想知道的人,您也可以通过命令行使用以下内容进行设置:

start = Text

_ "whitespace"
  = [ \t\n\r]*

Text
    = _ body:Element? _ {
        return {
            type: "Text",
            body: body || [],
        }
    }

Element
    = _ title:Title _ id:Id _ type:Type _ description:Description _ {
        return {
            id: id,
            title: title,
            type: type,
            description: description,
        }
    }

Type
    = "[" type: $[^\]]* "]" {
        return type;
    }

Id
    = '{' id: $[^}]* '}' {
        return id;
    }

Title
    = s:$[^.]* '.' _ {return s}

Description
    = "(" description: $[^)]* ")" {
        return description;
    }

发现here