Python之Ansible

Ansible简介

  • Ansible是一个配置管理和配置工具,类似于Chef,Puppet或Salt
  • 这是一款很简单也很容易入门的部署工具,它使用SSH连接到服务器并运行配置好的任务
  • 服务器上不用安装任何多余的软件,只需要开启ssh,所有工作都交给client端的ansible负责

安装ansible

  • 在线安装
[root@localhost ~]#	yum install -y ansible
  • 创建ansible工作目录
[root@bogon ~]# mkdir /root/myansi/
  • 创建配置文件
[root@bogon ~]# cd /root/myansi/
[root@bogon myansi]# cat	ansible.cfg
[defaults]
inventory	= hosts
remote_user = root
  • 声明被管理主机
[root@bogon myansi]# cat hosts	
[myself]
localhost
[webservers]
node1.cn
  • 配置名称解析
[root@bogon myansi]# cat	/etc/hosts
127.0.0.1			localhost.localdomain localhost
192.168.113.134	node1.cn		node1
  • 添加远程主机密钥到信任列表
[root@bogon myansi]# ssh-keyscan localhost 127.0.0.1	node1.cn	
192.168.113.134 >> /root/.ssh/known_hosts
  • 测试
#加-k是进入交互式密码,免密不需要加-k
[root@bogon myansi]# ansible all -m	 ping -k
SSH	password:	
localhost |	SUCCESS	=>	{
"changed":	false,	
"ping":	"pong"
}
node1.cn	| SUCCESS	=>	{
"changed":	false,	
"ping":	"pong"
}

Ansible应用

使用playbook
  • Playbooks是Ansible的配置、部署、编排语言。
  • 它们可以被描述为一个需要希望远程主机执行命令的方案,或者一组程序运行的命令集合
  • Playbook由一到多个Play组成
  • 每个play可以指定哪些主机执行哪些任务
  • 执行任务一般通过调用模块来实现
Yaml简介
  • Playbooks的格式是YAML
  • 语法做到最小化,意在避免 playbooks 成为一种编程语言或是脚本
  • 使用 YAML 是因为它像 XML 或 JSON 是一种利于人们读写的数据格式
Yaml语法
  • 每一个 YAML 文件都是从一个列表开始
  • 列表中的每一项都是一个键值对, 通常它们被称为一个“哈希 或“字典”
  • 所有的 YAML 文件开始行都应该是 —。这是 YAML 格式的一部分,表明一个文件的开始
  • 列表中的所有成员都开始于相同的缩进级别,并且使用一个 "- " 作为开头(一个横杠和一个空格)
  • 一个字典是由一个简单的 键: 值 的形式组成(冒号后面必须是一个空格)
配置VIM
  • Yaml的缩进不能使用tab键
  • 建议缩进为两个空格
  • 为了实现yml文件按tab键缩进两个空格,可以按以下方式对vim进行定制
[root@bogon myansi]# cat	~/.vimrc
autocmd FileType yaml setlocal sw=2	ts=2	et	ai
使用模块
  • Ansible的模块实际上就是一个个的python程序文件
  • Ansible执行任务就是通过调用这些模块来完成的
  • 查看模块列表
[root@bogon myansi]# ansible-doc -l
  • 查看模块帮助
[root@bogon myansi]# ansible-doc yum

编写playbook,在web服务器上安装httpd服务

[root@bogon myansi]# vim	install_web.yml
Ansible编程基础
执行playbook
  • 检查语法
[root@bogon myansi]# ansible-playbook --syntax-check install_web.yml
  • 执行
[root@bogon myansi]# ansible-playbook install_web.yml -k

配置lamp分离结构

# vim lamp.yml
---
- name: configure webservers
  hosts: webservers
  tasks:
    - name: install web pkgs
      yum:
        name: [httpd, php, php-mysql]
        state: present
    - name: configure web service
      service:
        name: httpd
        state: started
        enabled: yes

- name: configure dbservers
  hosts: dbservers
  tasks:
    - name: install db pkgs
      yum:
        name: mariadb-server
        state: present
    - name: configure db service
      service:
        name: mariadb
        state: started
        enabled: yes
# ansible-playbook lamp.yml
命名元组
  • 命名元组与普通元组一样,有相同的表现特征,其添加的功能就是可以根据名称引用元组中的项
  • collections 模块提供了namedtuple()函数,用于创建自定义的元组数据类型
>>>	from collections import	namedtuple
>>>	user = namedtuple('user', ['name',	'age'])
>>>	bob	= user('Bob	Green',	23)
>>>	bob[0]
'Bob Green'
>>>	bob[1]
23
>>>	bob.name
'Bob Green'

ansible-cmdb

可以将服务器的信息以web形式展现

# 在虚拟环境中安装ansible-cmdb
# pip3 install ansible-cmdb_pkgs/*
# 或在线安装
# pip3 install ansible-cmdb

# 获取远程主机的信息
# ansible all -m setup --tree /tmp/servers
# ls /tmp/servers

# ansible-cmdb分析获取的信息文件,生成html文件
# ansible-cmdb /tmp/servers > /tmp/servers.html
# firefox /tmp/servers.html
Ansible常用属性
  • from ansible.parsing.dataloader import DataLoader
    用来加载解析yaml文件或JSON内容,并且支持vault的解密
  • from ansible.vars.manager import VariableManager
    管理变量的类,包括主机,组,扩展等变量
  • from ansible.inventory.manager import InventoryManager
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值