ansible使用主机清单

Ansible同时针对基础架构中的多个系统。它通过选择Ansible库存中列出的系统部分来实现这一点,默认情况下将保存在该位置/etc/ansible/hosts。您可以使用命令行上的选项指定不同的清单文件。-i <path>

此库存不仅可配置,还可以同时使用多个库存文件并从动态或云源或不同格式(YAML,ini等)中提取库存,如使用动态库存中所述。Ansible在2.4版本中引入了库存插件,使其具有灵活性和可定制性。

主机和组

库存文件可以采用多种格式之一,具体取决于您拥有的库存插件。对于这个例子,格式/etc/ansible/hosts是类似INI的(Ansible的默认值之一),如下所示:

mail.example.com

[Web服务器]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com

括号中的标题是组名,用于对系统进行分类并确定您在什么时间控制什么系统以及为了什么目的。

YAML版本将如下所示:

all :
  hosts :
    mail.example.com :
  children :
    webservers :
      hosts :
        foo.example.com :
        bar.example.com :
    dbservers :
      hosts :
        one.example.com :
        two.example.com :
        three.example.com :

可以将系统放在多个组中,例如服务器既可以是Web服务器也可以是dbserver。如果你这样做,请注意变量将来自他们所属的所有组。变量优先级在后面的章节中详细介绍。

如果您的主机在非标准SSH端口上运行,则可以使用冒号将端口号放在主机名后面。SSH配置文件中列出的端口不会与paramiko连接一起使用,但会与openssh连接一起使用。

为了明确地说明,如果事情没有在默认端口上运行,建议您设置它们:

badwolf.example.com:5309

假设你只有静态IP并且想要设置一些生存在主机文件中的别名,或者你正在通过隧道进行连接。你也可以通过变量来描述主机:

在INI中:

jumper ansible_port=5555 ansible_host=192.0.2.50

在YAML中:

...
  hosts:
    jumper:
      ansible_port: 5555
      ansible_host: 192.0.2.50

在上面的例子中,试图对主机别名“跳线”(甚至可能不是真正的主机名)采取行动,将在端口5555上联系192.0.2.50。请注意,这是使用库存文件的一项功能来定义一些特殊变量。一般来说,这不是定义描述系统策略的变量的最佳方式,但我们会在以后分享这些建议。

注意:
使用key=value语法以INI格式传递的值不被解释为Python字面结构(字符串,数字,元组,列表,字典,布尔值,无),而是作为字符串。例如,var=FALSE会创建一个等于'FALSE'的字符串。不要依赖定义期间设置的类型,在使用变量时务必确保在需要时指定带有过滤器的类型。

如果您添加了许多类似模式的主机,则可以这样做,而不是列出每个主机名:

[webservers]
www[01:50].example.com

对于数字模式,根据需要可以包含或移除前导零。范围是包容性的。您还可以定义字母范围:

[databases]
db-[a:f].example.com

您也可以按主机选择连接类型和用户:

[targets]

localhost              ansible_connection=local
other1.example.com     ansible_connection=ssh        ansible_user=mpdehaan
other2.example.com     ansible_connection=ssh        ansible_user=mdehaan

如上所述,在清单文件中设置这些内容只是简写,我们将在稍后介绍如何将它们存储在'host_vars'目录中的单个文件中。

主机变量

如上所述,很容易将变量分配给将在以后的剧本中使用的主机:

[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909

组变量

变量也可以同时应用于整个组:

INI方式:

[atlanta]
host1
host2

[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com

YAML版本:

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

请注意,这只是将变量一次应用到多个主机的简便方法; 即使您可以按组来定位主机,但在执行播放之前,变量总是会展平到主机级别

组和组变量

也可以使用:childrenINI中的后缀或children:YAML中的条目来创建组。您可以使用:vars或应用变量vars:

 [atlanta]
host1
host2

[raleigh]
host2
host3

[southeast:children]
atlanta
raleigh

[southeast:vars]
some_server=foo.southeast.example.com
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2

[usa:children]
southeast
northeast
southwest
northwest

all:
  children:
    usa:
      children:
        southeast:
          children:
            atlanta:
              hosts:
                host1:
                host2:
            raleigh:
              hosts:
                host2:
                host3:
          vars:
            some_server: foo.southeast.example.com
            halon_system_timeout: 30
            self_destruct_countdown: 60
            escape_pods: 2
        northeast:
        northwest:
        southwest:

如果您需要存储列表或散列数据,或者希望将主机和组特定变量与库存文件分开,请参阅下一节。儿童组有几个属性需要注意:

  • 任何属于子组的成员都自动成为父组的成员。
  • 子组的变量将具有更高的优先级(覆盖)父组的变量。
  • 组可以有多个父母和孩子,但不是循环关系。
  • 主机也可以在多个组,但只会有一个主机的情况下,合并来自多个组的数据。

默认组

有两个默认组:allungroupedall包含每个主机。 ungrouped包含除了没有其他组的所有主机all。每个主持人总是属于至少两个组。虽然allungrouped始终存在,但它们可以是隐含的,不会出现在组列表中group_names

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容