Ansible:Ansible的核心程序
Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载
Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.
Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。
Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
Connection Plugins:连接插件,Ansible和Host通信使用
1.Ansible优点:
• Stupied Simple ,上手简单,学习曲线平滑
• SSH by default ,安全,无需安装客户端
• 配置简单、功能强大、扩展性强
• 支持API及自定义模块,可通过Python轻松扩展
• 通过Playbooks来定制强大的配置、状态管理
• 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台
• 幂等性:一种操作重复多次结果相同
2.ansible安装
• yum install epel-release
• yum install ansible
3.ansible配置客户端(无密码登录)
vim /etc/ansible/hosts 这个是一个配置文件,里面添加部署机器的IP
在webservers下面添加部署机的IP
假如有多个角色,也可以新建角色名字,在下面添加进去相应的IP地址
- server: ssh-******
- scp id_rsa.pub [email protected]:/root/.ssh/authorized_keys(免秘钥认证文件,要从主机拷贝到客户机内)
4.ansible常用命令
• ansible-doc -l #查看支持的模块
• ansible-doc -s MODEL_NAME #查看模块用法
• ansible命令应用基础
- ansible [options]
-f forks:启动并发线程数
-m model_name:要使用的模块
-a args:特有的参数
• ansible all -m ping #查看client端是否正常ping通 (测试是否可以被管理)
• ansible webserver -m ping (也可以直接用IP ping)
• ansible webserver -m setup #查看客户端信息
• ansible webserver -m copy -a ‘src=/root/git_test/code.txt dest=/root/test’ #copy文件到cient端
• ansible webserver -m user -a “name=test state=present” #创建test用户
• ansible webserver -m user -a “name=test state=absent” #删除test用户
• ansible webserver -m yum -a ‘name=epel-relese state=latest‘ #yum安装
• ansible webserver -m service -a ‘name=httpd state=stopped enabled=no‘ #停止httpd服务
• ansible webserver -m script -a ‘/tmp/test.sh‘ #运行脚本
• ansible webserver -m command ‘date’ #查看时间
注:ansible 要部署的组 -m 调用的模块 -a 接的参数
用户的添加需要用双引号,其他的只要用单引号就可以了
5.playbook
• tasks (任务)
• variables (变量)
• templates (模板)
• handlers (触发器)
• roles (角色)
yaml介绍
yaml是一个可读性高的用来表达资料序列的格式,yaml参考了其他多种语言,包括:xml,c语言,python,perl以及电子邮件格式RFC2822等,ClarkEvans在2001年在首次发表了这种语言。
• yaml的可读性好
• yaml和脚本语言的交互性好
• yaml使用实现语言的数据类型
• yaml有一个一致的信息模型
• yaml易于实现
• yaml可以基于流程来处理
• yaml表达能力强,扩展性好
默认状态:prsent 安装或者打开等积极的 absent 卸载或者关闭等不积极的
示例1:基础
示例2:变量(赋予变量以后可以直接用)
示例3:迭代
示例4:触发器notify
示例5:模板templates
notify是一个触发器,下面声明出来触发器的名字,真的触发器是handlers,再触发器内还是按照任务的格式写
而下面的handlers是触发器的执行,声明的触发器的名字必须和下面的name名字必须一致
template模块的用法是可以在其中修改变量,把这个文件当成是模板,进行变量的改变,然后整体调用
示例6:单个任务执行tags
• roles介绍
• 什么情况下会用到roles
假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务器。我们如何来定义playbook?
第一个play用到第一个主机上,用来构建httpd,第二个play用到第二个主机上,用来构建php,第三个play用到第三个主机上,用来构建MySQL。这些个play定义在playbook中比较麻烦,将来也不利于模块化调用,不利于多次调。比如说后来又加进来一个主机,这个第4个主机既是httpd服务器,又是php服务器,我们只能写第4个play,上面写上安装httpd和php。这样playbook中的代码就重复了。
注释:各目录的作用
ansible_playbooks 目录:文件的主目录
roles目录:文件的角色目录,里面包含各个角色
websrcs 目录:webservices这个角色
files 目录:存放文件
handlers目录:存放触发器事件
meta 目录:放置备注信息
templates 目录:放置模板
vars 目录:放置变量
tasks目录:存放任务文件
修改部署文件,可以根据需求进行修改,此处只是一个例子
注:所有的部署文件格式都有严格的要求,要注意
#site.yml
- hosts: webservers
remote_user: root
roles:- websrvs
- dbsrvs
#将文件拷贝到files目录下(因为将文件拷贝到两个部署机上,这个是拷贝的源文件)
cp /etc/httpd/conf/httpd.conf /root/ansible_playbooks/roles/websrvs/files/
#在tasks/下建立main.yml文件并在里面写入
- name: yum install tree
yum: name=tree state=latest - name: create manay user
user: name={{ item }} state=absent
with_items:- user1
- user2
- user3
- name: copy httpd.conf
copy: src=httpd.conf.bak dest=/etc/httpd/conf/httpd.conf
notify:- restart httpd
#在handlers下简历main.yml文件并写入
- name: restart httpd
service: name=httpd state=restarted
#将模板文件拷入到templates目录下并写入变量
Listen {{ port }}
(修改端口是为了让部署完毕后可以从部署机上查询到度那口的改变,证明部署成功)
(修改files目录下的http.conf中的文件,其中的port后面的端口号)
最后全部配置完以后,执行ansible-playbook site.yml