- ansible的简介与安装
- ansible基础
- Inventory -主机清单
- Ad-Hoc-点对点模式
- YAML-YAML Ain’t Markup Language-非标记语言
- Role-角色扮演
- 拓展
1.ansible的简介与安装
1.1ansible简介
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
实现了批量系统配置、批量程序部署、批量运行命令等功能。
无客户端。
1.2工作原理图
1.3ansible的安装
(一)安装epel源或者阿里源
yum install -y epel-release
(二)安装ansible
yum install -y ansible
(三)查询部署是否完成
rpm -ql ansible 列出所有文件
rpm -qc ansible 查看配置文件
ansible --help 查看ansible帮助
ansible-doc -l 看所有模块(A10,华为,docker,EC2,aws等等广大厂商设备)
ansible-doc -s yum 看yum模块,了解其功能
2.ansible基础
2.1定义主机清单
vim /etc/ansible/hosts :
host1 host2 host3
2.2测试连通性
ansible localhost -m ping :
-m 指定模块de什么功能;ping只是其中一个模块。还有shell,yum等等
注意这里测试先做免密或者关闭ssh的询问用:
ansible host1 -m ping -u root -k
2.3简洁输出
ansible host1 -m ping -o
2.4去掉ssh的询问
vim /etc/ssh/ssh_config 文件中添加如下并重启
StrictHostKeyChecking no
systemctl restart sshd
2.5请注意ping和ssh
ping ICMP:网际消息管理协议
结论ansible的ping,是探测ssh程序是否连接。不是icmp协议
3.Inventory -主机清单
3.1增加主机组
(一)官方链接 :http://docs.ansible.com/ansible/intro_inventory.html#
在vim /etc/ansible/hosts中添加:
在测试:
也可以都做免密,不填密码来进行测试
3.2增加用户名 密码
如果主机和主机的主机名密码不同情况下:
3.3 增加端口
请将host1的sshd程序端口修改为2222
3.4 组:变量
ansible内部变量可以帮助我们简化主机清单的设置;在/etc/ansible/hosts中
常用的变量:
3.5子分组
将不同的分组进行组合
3.6自定义主机列表
创建文件并在其中定义主机组和变量:
使用ansible测试:
4.Ad-Hoc-点对点模式
4.1简介:
临时的,在ansible中是指需要快速执行的单条命令,并且不需要保存的命令。对于复杂的命令则为 playbook。
4.2shell模块
ansible-doc shell 帮助
ansible webserver -m shell -a 'hostname' -o 获取主机名
ansible webserver -m shell -a 'hostname' -o -f 2 -f 2 指定线程数
ansible host2 -m shell -a 'yum -y install httpd' -o 部署apache
ansible host3 -m shell -a 'uptime' -o 查询系统负载
4.3复制模块
ansible-doc copy 帮助
测试:
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777'
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777 backup=yes'
4.4用户模块
ansible-doc user 帮助
ansible webserver -m user -a 'name=qianfeng state=present' 创建用户
修改密码:
echo '512050951' | openssl passwd -1 -stdin 生成加密密码
ansible webserver -m user -a 'name=qianfeng
password="$1$XVzsJMDr$5wI4oUaQ.emxap6s.N272."' 修改密码
修改shell:
ansible webserver -m user -a 'name=qianfeng shell=/sbin/nologin append=yes'
删除用户:
ansible webserver -m user -a 'name=qianfeng state=absent'
4.5软件包管理模块
ansible-doc yum 帮助
ansible host1 -m yum -a 'name="*" state=latest' 升级所有包
ansible host2 -m yum -a 'name="httpd" state=latest' 安装apache
4.6服务模块
ansible-doc service 帮助
ansible host2 -m service -a 'name=httpd state=started' 启动
ansible host2 -m service -a 'name=httpd state=started enabled=yes' 开机启动
ansible host2 -m service -a 'name=httpd state=stopped' 停止
ansible host2 -m service -a 'name=httpd state=restarted' 重启
ansible host2 -m service -a 'name=httpd state=started enabled=no' 开机禁止启动
4.7文件模块
ansible-doc file 帮助
ansible host1 -m file -a 'path=/tmp/88.txt mode=777 state=touch' 创建文件
ansible host1 -m file -a 'path=/tmp/99 mode=777 state=directory' 创建文件夹
4.8收集模块
ansible-doc setup 帮助
ansible host3 -m setup 查询所有信息
ansible host3 -m setup -a 'filter=ansible_all_ipv4_addresses' 查询IP地址信息
5.YAML-YAML Ain’t Markup Language-非标记语言
5.1测试:需求通过YAML编写一个简单的剧本,完成web的部署,配置,启动的全过程。
5.2准备工作
创建文件夹,把安装的http的配置文件(/etc/httpd/conf/httpd.conf)拷贝到创建的文件夹;
并修改配置端口
5.3编写剧本
创建一个以.yaml结尾的文件。 【编写剧本的时候要特别的注意格式】
- hosts: host2
tasks:
- name: install http
yum: name=httpd state=present
- name: copy http conf
copy: src=./http/httpd.conf dest=/etc/http/conf/httpd.conf
- name: ensure http is running
service: name=httpd state=started
5.4测试
(一)编写完成之后检验语法是否有错:
ansible-playbook http.yaml --syntax-check
(二)列出任务:
ansible-playbook http.yaml --list-tasks
(三)列出主机:
ansible-playbook http.yaml --list-hosts
(四)执行并检测
5.5 handlers
如果配置文件发生变化。比如端口发生变化 变为9000
再次执行,命令成功,但配置未生效,所以要增加处理程序。设置触发器
【编写剧本的时候要特别的注意格式】
在文件以.yaml结尾的文件中修改:
- hosts: host2
tasks:
- name: install http
yum: name=httpd state=present
- name: copy http conf
copy: src=./http/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart http service
- name: ensure http is running
service: name=httpd state=started
handlers:
- name: restart http service
service: name=httpd state=restarted
再次执行剧本成功配置生效:
6.Role-角色扮演
6.1简介
roles则是在ansible中,playbooks的目录组织结构。
将代码或文件进行模块化,成为roles的文件目录组织结构,
易读,代码可重用,层次清晰。
6.2测试案例:通过role远程部署nginx并配置
6.3目录结构
nginx 角色名
files 普通文件
handlers 触发器程序
tasks 主任务
templates 金甲模板(有变量的文件)
vars 自定义变量
创建文件:
mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml
echo 1234 > roles/nginx/files/index.html
yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2
6.4编写任务
在"roles/nginx/tasks/main.yaml"的文件中:
---
- name: install epel-release packge
yum: name=epel-release state=latest- name: install nginx packge
yum: name=nginx state=latest- name: copy index.html
copy: src=index.html dest=/usr/share/nginx/html/index.html- name: copy nginx.conf template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restarted nginx- name: make sure nginx service is running
service: name=nginx state=started
6.5准备配置文件
在"roles/nginx/templates/nginx.conf.j2"中:
worker_processes {{ ansible_processor_cores }}; 调用内部已知变量
worker_connections {{ worker_connections }}; 自定义变量
6.6编写变量
在"roles/nginx/vars/main.yaml"中:
worker_connections: 10240
6.7编写处理程序
在"roles/nginx/handlers/main.yaml"中:
---
- name: restarted nginx
service: name=nginx state=restarted
6.8编写剧本
在"roles/site.yaml"中:
- hosts: host3
roles:
- nginx
6.9检验并执行
7.拓展
7.1如何在ansible中,使用不同的用户登录不同的主机
7.2判断主机地址为10.18.46.37的主机。关闭该主机
关闭两台
7.3循环创建多个用户