Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts

主机清单示例

  1. mail.example.com # FQDN
  2. [webservers] # 方括号[]中是组名
  3. host1 host2:5522 # 指定连接主机得端口号
  4. localhost ansible_connection=local # 定义连接类型
  5. host3 http_port=80 maxRequestsPerChild=808 # 定义主机变量
  6. host4 ansible_ssh_port=5555 ansible_ssh_host=192.168.1.50 # 定义主机ssh连接端口和连接地址
  7. www[1:50].example.com # 定义 1-50范围内的主机
  8. www-[a:f].example.com # 定义a-f范围内内的主机
  9.  
  10. [dbservers]
  11. three.example.com ansible_python_interpreter=/usr/local/bin/python #定义python执行文件
  12. 192.168.77.123 ruby_module_host ansible_ruby_interpreter=/usr/bin/ruby.1.9.3 # 定义ruby执行文件
  13. [webservers:vars] # 定义webservers组的变量
  14. ntp_server= ntp.example.com
  15. proxy=proxy.example.com
  16.  
  17. [server:children] # 定义server组的子成员
  18. webservers dbservers [server:vars] # 定义server组的变量
  19. zabbix_server=192.168.77.121

  

Inventory 参数的说明


主机连接:

参数 说明
ansible_connection 与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.

ssh连接参数:

参数 说明
ansible_ssh_host 将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port ssh端口号.如果不是默认的端口号,通过此变量设置.
ansible_ssh_user 默认的 ssh 用户名
ansible_ssh_pass ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_ssh_private_key_file ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
ansible_ssh_common_args 此设置附加到sftp,scp和ssh的缺省命令行
ansible_sftp_extra_args 此设置附加到默认sftp命令行。
ansible_scp_extra_args 此设置附加到默认scp命令行。
ansible_ssh_extra_args 此设置附加到默认ssh命令行。
ansible_ssh_pipelining 确定是否使用SSH管道。 这可以覆盖ansible.cfg中得设置。

远程主机环境参数:

参数 说明
ansible_shell_type 目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.
ansible_python_interpreter 目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 *BSD, 或者 /usr/bin/python
ansible_*_interpreter 这里的"*"可以是ruby 或perl 或其他语言的解释器,作用和ansible_python_interpreter 类似
ansible_shell_executable 这将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的配置,默认为/bin/sh。

动态主机清单示例


inventory.py

  1. #!/usr/bin/env python
  2. ''' Example custom dynamic inventory script for Ansible, in Python. '''
  3. import os
  4. import sys
  5. import argparse
  6.  
  7. try:
  8. import json
  9. except ImportError:
  10. import simplejson as json
  11.  
  12. class ExampleInventory(object):
  13. def __init__(self):
  14. self.inventory = {}
  15. self.read_cli_args() # Called with `--list`.
  16. if self.args.list:
  17. self.inventory = self.example_inventory() # Called with `--host [hostname]`.
  18. elif self.args.host: # Not implemented, since we return _meta info `--list`.
  19. self.inventory = self.empty_inventory() # If no groups or vars are present, return empty inventory.
  20. else: self.inventory = self.empty_inventory()
  21. print json.dumps(self.inventory); # Example inventory for testing.
  22. def example_inventory(self):
  23. return {'group': {
  24. 'hosts': ['192.168.28.71', '192.168.28.72'],
  25. 'vars': {
  26. 'ansible_ssh_user': 'vagrant',
  27. 'ansible_ssh_private_key_file': '~/.vagrant.d/insecure_private_key',
  28. 'example_variable': 'value'
  29. }
  30. },
  31.  
  32. '_meta': {
  33. 'hostvars': {
  34. '192.168.28.71': {
  35. 'host_specific_var': 'foo'
  36. },
  37. '192.168.28.72': {
  38. 'host_specific_var': 'bar'
  39. }
  40. }
  41. }
  42. }
  43. # Empty inventory for testing.
  44. def empty_inventory(self):
  45. return {'_meta': {'hostvars': {}}} # Read the command line args passed to the script.
  46.  
  47. def read_cli_args(self):
  48. parser = argparse.ArgumentParser()
  49. parser.add_argument('--list', action = 'store_true')
  50. parser.add_argument('--host', action = 'store')
  51. self.args = parser.parse_args() # Get the inventory.
  52.  
  53. ExampleInventory()

  

  1. $ ./inventory.py --list
    {"group": {"hosts": ["192.168.28.71", "192.168.28.72"], "vars":{"ansible_ssh_user": "vagrant","ansible_ssh_private_key_file":"~/.vagrant.d/insecure_private_key", "example_variable": "value"}}, "_meta": {"hostvars": {"192.168.28.72": {"host_specific_var": "bar"}, "192.168.28.71": {"host_specific_var": "foo"}}}}
  2.  
  3. $ ansible all -i inventory.py -m ping
  4. $ ansible all -i inventory.py -m debug -a "var=host_specific_var"

  

Ansible 小手册系列 五(inventory 主机清单)的更多相关文章

  1. Ansible 小手册系列 十(包含和角色)

    一.包含 (include) 使用include模块来包含foo文件 tasks: - include: foo.yml --- foo.yml - name: test foo command: e ...

  2. Ansible 小手册系列 四(详解配置文件)

    [root@host-172-20-6-120 ansible]# ansible --version ansible 2.2.0.0 config file = /etc/ansible/ansib ...

  3. Ansible 小手册系列 三(命令介绍)

    仅仅只是介绍,可以选择跳过 ansible ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令.默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块. Us ...

  4. Ansible 小手册系列 十四(条件判断和循环)

    条件判断 When 语句 在when 后面使用Jinja2 表达式,结果为True则执行任务. tasks: - name: "shut down Debian flavored syste ...

  5. Ansible 小手册系列 二十(经常遇到的问题)

    (1). 怎么为任务设置环境变量? - name: set environment shell: echo $PATH $SOME >> /tmp/a.txt environment: P ...

  6. Ansible 小手册系列 九(Playbook)

    playbook是由一个或多个"play"组成的列表.play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.从根本上来讲所谓task无非 ...

  7. Ansible 小手册系列 七(Ad-hoc)

    Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook.前者可以解决一些简单的任务, 后者解决较复杂的任务. ad hoc——临时的,在ansible ...

  8. Ansible 小手册系列 十五(Blocks 分组)

    当我们想在满足一个条件下,执行多个任务时,就需要分组了.而不再每个任务都要用when. tasks: - block: - command: echo 1 - shell: echo 2 - raw: ...

  9. Ansible 小手册系列 十一(变量)

    变量名约束 变量名称应为字母,数字和下划线. 变量应始终以字母开头. 变量名不应与python属性和方法名冲突. 变量使用 通过命令行传递变量(extra vars) ansible-playbook ...

随机推荐

  1. Nginx基本介绍

    1.Nginx介绍 nginx是由俄罗斯人开发的一款高性能的http和反向代理服务器,也可以用来作为邮件代理.相比较于其他的服务器,具有占用内存少,稳定性高等优势 2.反向代理 正向代理类似一个跳板机 ...

  2. Python3 计算城市距离

    利用上一篇得到的城市经纬度算城市距离 import requests from math import radians, cos, sin, asin, sqrt def geocode(addres ...

  3. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (set维护)

    注意题目保证不会有一个矩形完全包括另一个矩形的情况 时间序上从后往前看,一个坐标\((x,y)\)加进来之前,如果已经有\(x_i<x\),则对结果的贡献为\(x-x_i\);若不存在\(x_i ...

  4. GYM - 101490 J Programming Tutors (匈牙利+二分)

    题意:有N个学生和N个老师,每个人都有自己的坐标X,Y,给每个学生匹配一个老师,要求N个匹配中的距离最大值最小.其中距离的定义为:|X − X’| + |Y − Y ‘|. 分析:一道典型的最大值最小 ...

  5. Web Servlet的体系架构

    Servlet为根接口,里面有5个方法,init() servlet初始化,将ServletConfig作为参数传入,service() 响应请求,destroy() 销毁servlet,getSer ...

  6. python 实现3-2 问候语: 继续使用练习 3-1 中的列表,但不打印每个朋友的姓名,而为每人打印一条消息。每条消息都包含相同的问候语,但抬头为相应朋友的姓名。

    names = ['linda', 'battile', 'emly'] print(names[0].title() + " " + "good moning!&quo ...

  7. weblogic 清除缓存

    清理缓存步骤如下: 1.前置条件:停止服务 2.找到下面3个目录,然后将里面的文件删除即可: ……/user_projects/domains/base_domain/servers/AdminSer ...

  8. MyEclipse 2014优化设置(禁用myeclipse updating indexes)

    1.指定本机java环境 Windows-->preferences-->java-->Insetallel JREs 右侧 单击ADD standard VM-->Next ...

  9. 20145302张薇《Java程序设计》第七周学习总结

    20145302 <Java程序设计>第七周学习总结 教材学习内容总结 第十三章 时间的度量 Greenwich Mean Time,格林威治时间,简称GMT时间,由观察太阳而得来: Un ...

  10. sqoop将mysql的tinyint类型转化为boolean类型

    当mysql中的字段为tinyint类型时,通过sqoop导入数据到hdfs上,在hdfs上显示的是true,false值.为了显示0,1. 解决方法: jdbc:mysql://<hostna ...