本文的目的是介绍ansible主机清单/etc/ansible/hosts的详细情况,特别关注ansible主机清单的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解a
本文的目的是介绍ansible 主机清单 /etc/ansible/hosts的详细情况,特别关注ansible 主机清单的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解ansible 主机清单 /etc/ansible/hosts的机会,同时也不会遗漏关于02.Ansible主机清单(inventory)配置、21 Ansible安装与主机清单的编写、7.0 Ansible 主机清单、7.1 Ansible 动态获取主机清单的知识。
本文目录一览:- ansible 主机清单 /etc/ansible/hosts(ansible 主机清单)
- 02.Ansible主机清单(inventory)配置
- 21 Ansible安装与主机清单的编写
- 7.0 Ansible 主机清单
- 7.1 Ansible 动态获取主机清单
ansible 主机清单 /etc/ansible/hosts(ansible 主机清单)
主机清单 [webservers] ansible01 ansible02 ansible03 ansible04
[root@ftp:/root] > ansible webservers -u root -k -m ping -o SSH password: ansible03 | SUCCESS => {"changed": false, "ping": "pong"} ansible01 | SUCCESS => {"changed": false, "ping": "pong"} ansible02 | SUCCESS => {"changed": false, "ping": "pong"} ansible04 | SUCCESS => {"changed": false, "ping": "pong"} [root@ftp:/root] >
Ansible Inventory 内置参数
总结
以上是小编为你收集整理的ansible 主机清单 /etc/ansible/hosts全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
原文地址:https://www.cnblogs.com/liweiming/p/10547539.html
02.Ansible主机清单(inventory)配置
Ansible主机清单(inventory)配置
官方文档
[cdh_dev]
10.9.251.3[0:4]:60777 ansible_user=root
[cdh_uat]
172.17.208.[72:75]
总结
以上是小编为你收集整理的02.Ansible主机清单(inventory)配置全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
原文地址:https://blog.csdn.net/lynnyq/article/details/102726479
21 Ansible安装与主机清单的编写
Ansible概述
是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。
自动化工具
puppet
ansible #轻量,只要配置一个主机清单就可以进行管理了
saltstack #大规模速度比ansible快,一般采取c/s结构模式,底层是zero-MQ消协队列
自动化运维可以做到
1、批量命令执行
2、批量安装服务
3、批量配置
4、批量任务执行
5、批量代码部署
自动化运维的优点
1、提高工作效率
2、提高工作准确性
3、降低人工成本
4、减少重复工作
Ansible架构
架构
1、连接插件connection plugins用于连接主机 用来连接被管理端
2、核心模块core modules连接主机实现操作, 它依赖于具体的模块来做具体的事情
3、自定义模块custom modules根据自己的需求编写具体的模块
4、插件plugins完成模块功能的补充
5、剧本playbookansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6、主机清单inventor定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模
Ansible执行流程
1.Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务。
2.首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块。
3.其次Ansible会通过连接插件连接对应的主机并推送对应的任务列表。
4.最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行。
搭建Ansible
主机名 | ip | 身份 |
---|---|---|
m01 | 192.168.15.61 | 控制端 |
web01 | 172.16.1.7 | 被控端 |
web02 | 172.16.1.8 | 被控端 |
命令
#1.安装epel源
[root@m01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#2.安装Ansible
[root@m01 ~]# yum install -y ansible
# ansible <host-pattern> [options]
--version #ansible版本信息
-v #显示详细信息
-i #主机清单文件路径,默认是在/etc/ansible/hosts
-m #使用的模块名称,默认使用command模块
-a #使用的模块参数,模块的具体动作
-k #提示输入ssh密码,而不使用基于ssh的密钥认证
-C #模拟执行测试,但不会真的执行
-T #执行命令的超时
#3.查看Ansible版本及模块路径
[root@m01 ~]# ansible --version
ansible 2.7.1
config file = /etc/ansible/ansible.cfg
configured module search path = [u''/root/.ansible/plugins/modules'', u''/usr/share/ansible/plugins/modules'']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
配置文件读取顺序
[root@m01 ~]# vim /etc/ansible/ansible.cfg
# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONfig,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first
[root@m01 ~]# rpm -ql ansible
[root@m01 ~]# zcat /usr/share/man/man1/ansible-config.1.gz
#要查看完整列表,请访问https://docs.ansibe.com/或使用ansible-config命令。
For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command.
#/etc/ansible/ansible.cfg 配置文件,如果存在则使用
/etc/ansible/ansible.cfg \-\- Config file, used if present
#~/.ansible.cfg 用户配置文件,覆盖默认配置(如果存在)
~/.ansible.cfg \-\- User config file, overrides the default config if present
#\&/ansible.cfg 本地配置文件(在当前工作目录中)假定为(aqproject-specific)(aq,如果存在,则重写其余文件)。
\&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present.
#如上所述,ANSIBLE_CONfig环境变量将覆盖所有其他环境变量。
As mentioned above, the ANSIBLE_CONfig environment variable will override all others.
#读取的时候自上而下
#生效的时候自下而上
配置
[root@m01 ansible]# vim /etc/ansible/ansible.cfg
#inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = ~/.ansible/tmp #临时py文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp #本机的临时执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行是否询问sudo的ssh密码
#ask_pass = True #每次执行是否询问ssh密码
#remote_port = 22 #远程主机端口
host_key_checking = False #跳过检查主机指纹
log_path = /var/log/ansible.log #ansible日志
#普通用户提权操作
[privilege_escalation]
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
Ansible主机清单
# 说明:使用主机清单,如果出现需要记录kNown_host的时候,可以在/etc/ssh/ssh_config中增加StrictHostKeyChecking no
场景一:用户名和密码连接
[root@m01 ~]# cat /etc/ansible/hosts
# 方式一:配置IP及用户名密码
#[web]
#172.16.1.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=''123'' ansible_ssh_host=172.16.1.7
#172.16.1.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=''123''
#172.16.1.9 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=''123''
# 主机名+密码
[web]
web0[1:3] ansible_ssh_pass=''123''
# 本机
172.16.1.61 ansible_connection=local
# 公共变量
[db]
172.16.1.51
[db:vars]
ansible_ssh_pass=''123''
场景二:密钥连接
# 说明:密钥连接的前提是需要做好免密
[web]
172.16.1.7
172.16.1.8
172.16.1.9
# 别名连接
[web]
oldboy ansible_ssh_host=172.16.1.7
场景三:分组
# 分组连接
[web]
172.16.1.7
172.16.1.8
172.16.1.9
[lb]
172.16.1.5
172.16.1.6
# 多组
[web]
172.16.1.7
172.16.1.8
172.16.1.9
[lb]
172.16.1.5
172.16.1.6
[db]
172.16.1.51
[servers:children]
lb
web
指定host
-i : 临时指定host路径
[root@m01 ~]# ansible lbserver -m ping -i ./host
172.16.1.6 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
172.16.1.5 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
总结
以上是小编为你收集整理的21 Ansible安装与主机清单的编写全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
原文地址:https://www.cnblogs.com/zhaokunhao/p/14814771.html
7.0 Ansible 主机清单
基础
主机清单,inventory,是存放被管理机器的IP或域名的地方,清单里的IP地址可以分组,如前端机器一组,后端机器一组,默认这个配置文件在/etc/ansible/hosts
,如下是一个实例
# cat /etc/ansible/hosts
[webservers]
foo.example.com
bar.example.com
192.168.31.10
[dbservers]
one.example.com
two.example.com
three.example.com
组名称遵循一般的变量命名规则,不能以数字开头,特殊符号只能用下划线
在playbook中使用
# cat main1.yml
---
- hosts: dbservers
gather_facts: yes
tasks:
- name: test1
debug:
msg: "just for a test"
ansible-playbook main1.yml #这种执行方式就是去默认主机清单里找,即 /etc/ansible/hosts
ansible-playbook main1.yml -i hosts #这种执行方式主机清单就是当前目录的hosts文件,路径也可以用绝对路径,hosts文件名称不固定
执行playbook时,加上 -v 参数,会输出主机清单路径
在命令行中(Ad-Hoc)使用
ansible webservers -m ping
默认的组名称 default groups
有两个组名称比较特殊,是自带的,默认就有的,all
和ungrouped
,顾名思义一个all
分组代表全部机器,ungrouped
代表不属于任何一个分组的机器,如下一份主机清单示例
# cat /etc/ansible/hosts
192.168.31.10 #属于 ungrouped 和 all 分组
192.168.31.11 #属于 ungrouped 和 all 分组
[webservers]
foo.example.com #属于 webservers 和 all 分组
bar.example.com #属于 webservers 和 all 分组
[dbservers]
one.example.com #属于 dbservers 和 all 分组
two.example.com #属于 dbservers 和 all 分组
three.example.com #属于 dbservers 和 all 分组
因此我们常使用的Ansible检查机器连通性的命令,或者playbook的分组名称,指定为all
,即表示全部机器都应用该playbook
all
和ungrouped
属于保留分组名字,不能自己写到主机清单的分组名称中去
常见的机器分组方式
大致有三种
- 按照服务(业务、角色)分,如 web、MysqL、PHP、dns
- 按照地理位置(机房)分,如 north、sourth、beijing、shenzhen
- 按照时间阶段分,即生产prod、预生产stag、测试test
机器分组的嵌套
一台机器,可能同属于多个分组,如某台机器是web,在北方,生产环境,那么这台机器会出现在三个分组中
之前我们介绍的主机清单都是配置文件(INI)那种格式,而Ansible还支持YAML格式书写主机清单,对于具有嵌套关系的主机清单,使用YAML格式书写更清楚,如下示例
all:
hosts:
192.168.21.100:
children:
webservers:
hosts:
192.168.31.101:
192.168.31.102:
192.168.31.103:
dbservers:
hosts:
192.168.41.101:
192.168.41.102:
192.168.41.103:
east:
hosts:
192.168.41.101:
192.168.41.102:
192.168.41.103:
west:
hosts:
192.168.31.101:
192.168.31.102:
192.168.31.103:
prod:
hosts:
192.168.31.101:
192.168.31.102:
192.168.31.103:
test:
hosts:
192.168.41.103:
centos:
children:
webservers:
ubuntu:
children:
dbservers:
批量选择一群机器
批量选择www01 ~ www50机器
[webservers]
www[01:50].example.com
批量选择dba ~ dbf机器
[databases]
db-[a:f].example.com
这种情况类似正则匹配,一般很少用,比如要下线某个机器,这样的写法就比较麻烦了
其它可以使用的匹配语法,如下表所示
Description | Pattern(s) | Targets |
---|---|---|
All hosts | all (or *) | 匹配全部机器 |
One host | host1 | 匹配单个机器 |
Multiple hosts | host1,host2 | 匹配多个机器 逗号分隔 |
One group | webservers | 匹配一个机器分组 |
Multiple groups | webservers:dbservers | 匹配多个机器分组 冒号分割 |
Intersection of groups | webservers:&staging | 匹配同时在webservers和staging分组里的机器 |
在主机清单里定义变量
参考3.1 Playbooks 高级一
里的相关内容
控制SSH的连接变量(connection variables)
这一类变量专门用来控制目标机器的SSH连接参数,比如加入目标机器SSH端口不是监听在默认的22端口,就需要改动这里
变量 | 含义 |
---|---|
ansible_connection | 远程通信方式,smart、ssh、paramiko,默认是smart表示自动,该值一般不需要动,paramiko是一个python操作ssh的包 |
ansible_host | 一般用不上,除非给出的域名无法解析(如果这样直接用IP地址就好) |
ansible_port | 指定ssh端口,默认22 |
ansible_user | 指定ssh连接的用户,默认是当前用户 |
ansible_password | 指定ssh连接的密码(如果没有做免密登录的话) |
ansible_python_interpreter | 指定目标机器的python路径,默认去找/usr/bin/python,如果这个地没有,或者这个地的python版本太低,则需要修改 |
使用示例
#cat /etc/ansible/hosts
some_host ansible_port=2222 ansible_user=manager
192.168.31.100 ansible_user=root ansible_password=123456
freebsd_host ansible_python_interpreter=/usr/local/bin/python
可以看到这些变量都是以ansible开头的,官方文档里似乎没提能不能被覆盖,不过我们自己最好不要定义ansible开头的变量
使用账号密码直接控制机器,需要手动进行一次登录,以记住该key
参考资料
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html
https://docs.ansible.com/ansible/latest/user_guide/connection_details.html
总结
以上是小编为你收集整理的7.0 Ansible 主机清单全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
原文地址:https://blog.51cto.com/10308545/2665194
7.1 Ansible 动态获取主机清单
场景
在实际工作环境中,较大的企业通常有内部的CMDB管理系统,每个部门基本也都有开发自己的运管系统之类,比如最基础的本部门有哪些机器,它们都是什么配置,基本都是通过运管系统管理。这套内部系统可能已经使用很长时间,内部也形成了一定的规范,比如初始化机器会有脚本自动注册机器基础信息到系统中,也就是说相应的运管系统才保存在一手完整的元数据信息,当然这一类的运管系统通常都有API对外暴露供用户使用,比如调curl某个地址,返回全部机器IP等
换句话说,我们使用Ansible管理的机器IP地址,可能来自于某个接口返回的信息里,或者说存放在某个数据库里,此时我们当然可以每次接口有数据更新,人工将更新的内容拷贝到我们的主机清单里,这种方式缺点显而易见,当机器规模比较大,更新较为频繁,手动维护两者之间的同步,费时费力,难保不出错
此时我们就想,能不能写一个脚本,自动调用运管系统里的相关接口,获取指定的IP列表呢,比如调A脚本功能是返回全部WEB机器列表,B脚本功能是返回全部数据库机器列表,由于每次执行playboook这些脚本都重新执行一次,即每次都动态拿到IP列表,这样只要接口不变,脚本只要写一次即可长久使用,不用担心两边IP列表不同步的问题
类似这种需求,就需要用到Ansible动态获取主机清单的功能(dynamic inventory),与之对应之前手动写死机器列表的方法,称之为静态主机清单(static inventory)
实现方式
具体来说,我们需要准备一个可执行文件,充当主机清单用。所谓可执行即拥有+x
权限,该文件可以是脚本文件,如python、PHP脚本,也可以是二进制文件,比如go、c语言编译后的二进制可执行脚本,这个脚本准备好之后,使用方法类似如下
ansible-playbook test1.yaml -i ${my-inventory-script}
-i
参数相信大家已经熟悉了,之前我们用它是接静态主机清单文件,该参数同样可以接动态主机清单文件
那么这个脚本具体该有些什么内容呢,简单来说这个脚本返回的是主机清单里该有的信息,也就是:机器IP、机器分组、主机变量、组变量这些,比如下面的示例
return {
''mygroup1'': {
''hosts'': [''192.168.31.100'', ''192.168.31.101''],
''vars'': {
''mytest_var1'': ''hello1'',
''mytest_var2'': ''hello2'',
''mytest_common'': ''hello_common''
}
},
''mygroup2'': {
''hosts'': [''192.168.31.102''],
''vars'': {
''mytest_var3'': ''hello3'',
''mytest_common'': ''hello_common''
}
},
''_Meta'': {
''hostvars'': {
''192.168.31.100'': {
''host_specific_var'': ''foo100''
},
''192.168.31.101'': {
''host_specific_var'': ''bar101''
}
}
}
}
上面的返回信息是以python语言写的,其它编程语言情况类似,如果把上面的返回信息转成我们之前学过的主机清单样式,类似下面这样
# cat /etc/ansible/hosts
[mygroup1]
192.168.31.100 host_specific_var=foo100
192.168.31.101 host_specific_var=bar101
[mygroup2]
192.168.31.102
[mygroup1:vars]
mytest_var1=hello1
mytest_var2=hello2
mytest_common=hello_common
[mygroup2:vars]
mytest_var3=hello3
mytest_common=hello_common
整体来说,Ansible规定了一个动态获取主机清单的脚本,需要支持两个参数即,--list
和 --host HOST
./my-inventory-script --list
使用来返回主机清单信息的,如上面所示,返回的数据是JSON格式
./my-inventory-script --host HOST
这里的HOST指的就是主机清单IP地址,正常是循环调用这个接口来得到主机变量的,不过一般我们用`--list`返回的信息使其带有 _Meta ,这个特殊信息用来表示主机变量,那么只需要让这个接口返回"空",即可,返回的数据是JSON格式
python获取动态主机清单实践
我们以python语言为例,演示以下具体用法
脚本地址 https://gitee.com/as4k/ysansible/tree/master/dynamic-inventory
python代码细节,我就不多说了,如果需要大家可自行到网上百度学习,我们直接执行看下效果
# ls
inventory.py README.md test1.yaml
# ansible all -i inventory.py -m ping
# ansible-playbook test1.yaml -i inventory.py
大家自己写脚本测试,可以使用下面这个命令,进行快速测试
./inventory.py --list | python -c "import json,sys; obj=json.load(sys.stdin); print(json.dumps(obj, indent=4))" && echo
参考资料
https://docs.ansible.com/ansible/latest/user_guide/intro_dynamic_inventory.html
https://docs.ansible.com/ansible/latest/dev_guide/developing_inventory.html
总结
以上是小编为你收集整理的7.1 Ansible 动态获取主机清单全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
原文地址:https://blog.51cto.com/10308545/2667969
关于ansible 主机清单 /etc/ansible/hosts和ansible 主机清单的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于02.Ansible主机清单(inventory)配置、21 Ansible安装与主机清单的编写、7.0 Ansible 主机清单、7.1 Ansible 动态获取主机清单等相关内容,可以在本站寻找。
本文标签: