Ansible 小手册系列 五(inventory 主机清单)
Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts
主机清单示例
- mail.example.com # FQDN
- [webservers] # 方括号[]中是组名
- host1 host2:5522 # 指定连接主机得端口号
- localhost ansible_connection=local # 定义连接类型
- host3 http_port=80 maxRequestsPerChild=808 # 定义主机变量
- host4 ansible_ssh_port=5555 ansible_ssh_host=192.168.1.50 # 定义主机ssh连接端口和连接地址
- www[1:50].example.com # 定义 1-50范围内的主机
- www-[a:f].example.com # 定义a-f范围内内的主机
- [dbservers]
- three.example.com ansible_python_interpreter=/usr/local/bin/python #定义python执行文件
- 192.168.77.123 ruby_module_host ansible_ruby_interpreter=/usr/bin/ruby.1.9.3 # 定义ruby执行文件
- [webservers:vars] # 定义webservers组的变量
- ntp_server= ntp.example.com
- proxy=proxy.example.com
- [server:children] # 定义server组的子成员
- webservers dbservers [server:vars] # 定义server组的变量
- 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
- #!/usr/bin/env python
- ''' Example custom dynamic inventory script for Ansible, in Python. '''
- import os
- import sys
- import argparse
- try:
- import json
- except ImportError:
- import simplejson as json
- class ExampleInventory(object):
- def __init__(self):
- self.inventory = {}
- self.read_cli_args() # Called with `--list`.
- if self.args.list:
- self.inventory = self.example_inventory() # Called with `--host [hostname]`.
- elif self.args.host: # Not implemented, since we return _meta info `--list`.
- self.inventory = self.empty_inventory() # If no groups or vars are present, return empty inventory.
- else: self.inventory = self.empty_inventory()
- print json.dumps(self.inventory); # Example inventory for testing.
- def example_inventory(self):
- return {'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.71': {
- 'host_specific_var': 'foo'
- },
- '192.168.28.72': {
- 'host_specific_var': 'bar'
- }
- }
- }
- }
- # Empty inventory for testing.
- def empty_inventory(self):
- return {'_meta': {'hostvars': {}}} # Read the command line args passed to the script.
- def read_cli_args(self):
- parser = argparse.ArgumentParser()
- parser.add_argument('--list', action = 'store_true')
- parser.add_argument('--host', action = 'store')
- self.args = parser.parse_args() # Get the inventory.
- ExampleInventory()
- $ ./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"}}}}- $ ansible all -i inventory.py -m ping
- $ ansible all -i inventory.py -m debug -a "var=host_specific_var"
Ansible 小手册系列 五(inventory 主机清单)的更多相关文章
- Ansible 小手册系列 十(包含和角色)
一.包含 (include) 使用include模块来包含foo文件 tasks: - include: foo.yml --- foo.yml - name: test foo command: e ...
- Ansible 小手册系列 四(详解配置文件)
[root@host-172-20-6-120 ansible]# ansible --version ansible 2.2.0.0 config file = /etc/ansible/ansib ...
- Ansible 小手册系列 三(命令介绍)
仅仅只是介绍,可以选择跳过 ansible ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令.默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块. Us ...
- Ansible 小手册系列 十四(条件判断和循环)
条件判断 When 语句 在when 后面使用Jinja2 表达式,结果为True则执行任务. tasks: - name: "shut down Debian flavored syste ...
- Ansible 小手册系列 二十(经常遇到的问题)
(1). 怎么为任务设置环境变量? - name: set environment shell: echo $PATH $SOME >> /tmp/a.txt environment: P ...
- Ansible 小手册系列 九(Playbook)
playbook是由一个或多个"play"组成的列表.play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.从根本上来讲所谓task无非 ...
- Ansible 小手册系列 七(Ad-hoc)
Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook.前者可以解决一些简单的任务, 后者解决较复杂的任务. ad hoc——临时的,在ansible ...
- Ansible 小手册系列 十五(Blocks 分组)
当我们想在满足一个条件下,执行多个任务时,就需要分组了.而不再每个任务都要用when. tasks: - block: - command: echo 1 - shell: echo 2 - raw: ...
- Ansible 小手册系列 十一(变量)
变量名约束 变量名称应为字母,数字和下划线. 变量应始终以字母开头. 变量名不应与python属性和方法名冲突. 变量使用 通过命令行传递变量(extra vars) ansible-playbook ...
随机推荐
- Nginx基本介绍
1.Nginx介绍 nginx是由俄罗斯人开发的一款高性能的http和反向代理服务器,也可以用来作为邮件代理.相比较于其他的服务器,具有占用内存少,稳定性高等优势 2.反向代理 正向代理类似一个跳板机 ...
- Python3 计算城市距离
利用上一篇得到的城市经纬度算城市距离 import requests from math import radians, cos, sin, asin, sqrt def geocode(addres ...
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (set维护)
注意题目保证不会有一个矩形完全包括另一个矩形的情况 时间序上从后往前看,一个坐标\((x,y)\)加进来之前,如果已经有\(x_i<x\),则对结果的贡献为\(x-x_i\);若不存在\(x_i ...
- GYM - 101490 J Programming Tutors (匈牙利+二分)
题意:有N个学生和N个老师,每个人都有自己的坐标X,Y,给每个学生匹配一个老师,要求N个匹配中的距离最大值最小.其中距离的定义为:|X − X’| + |Y − Y ‘|. 分析:一道典型的最大值最小 ...
- Web Servlet的体系架构
Servlet为根接口,里面有5个方法,init() servlet初始化,将ServletConfig作为参数传入,service() 响应请求,destroy() 销毁servlet,getSer ...
- python 实现3-2 问候语: 继续使用练习 3-1 中的列表,但不打印每个朋友的姓名,而为每人打印一条消息。每条消息都包含相同的问候语,但抬头为相应朋友的姓名。
names = ['linda', 'battile', 'emly'] print(names[0].title() + " " + "good moning!&quo ...
- weblogic 清除缓存
清理缓存步骤如下: 1.前置条件:停止服务 2.找到下面3个目录,然后将里面的文件删除即可: ……/user_projects/domains/base_domain/servers/AdminSer ...
- MyEclipse 2014优化设置(禁用myeclipse updating indexes)
1.指定本机java环境 Windows-->preferences-->java-->Insetallel JREs 右侧 单击ADD standard VM-->Next ...
- 20145302张薇《Java程序设计》第七周学习总结
20145302 <Java程序设计>第七周学习总结 教材学习内容总结 第十三章 时间的度量 Greenwich Mean Time,格林威治时间,简称GMT时间,由观察太阳而得来: Un ...
- sqoop将mysql的tinyint类型转化为boolean类型
当mysql中的字段为tinyint类型时,通过sqoop导入数据到hdfs上,在hdfs上显示的是true,false值.为了显示0,1. 解决方法: jdbc:mysql://<hostna ...