ansible的组成
------>Ansible主要由一下6部分组成
Ansible Playbooks:任务集,编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是json格式的YML文件。
Inventory:Ansible管理主机的清单。
Modules:Ansible执行命令的功能模块,多数为内置的核心模块,也支持自定义
Plugins:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,改功能不常用。
API:供第三方程序调用的应用程序编程接口;
Ansible:此处指的是组合nventory、Modules、Plugins、API的Ansible命令工具,其为核心执行工具
ansible工作流程
使用Ansible或Ansible-playbooks时,在服务器终端输入Ansible的Ad-Hoc命令集或palybook后,Ansible会遵循预先编排的规则将Playbooks逐条拆解为Play,再将paly组织成Ansible可识别的任务(Task),随后调用任务涉及的所有模块(modules)和插件(plugins),根据Inventory中定义的主机列表通过SSH将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果,如果是临时文件,则执行完毕后自动删除。
环境准备:
4台虚拟机:
(ansible 192.168.200.1)
(node1 192.168.200.101)
(node2 192.168.200.102)
(node3 192.168.200.103)
所有机器都必须是免密登陆
4台主机上面配置/etc/hosts,以ansible主机为例
vim /etc/hosts
192.168.200.1 ansible
192.168.200.101 node1
192.168.200.102 node2
192.168.200.103 node3
for i in {101…103}; do scp /etc/hosts 192.168.200.$i:/etc/hosts; done
apt install -y ansible
主机清单
vim /etc/ansible/hosts
[web]
node1
node2
[db]
node3
结果测试
ansible all -m ping
node2 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
node1 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
node3 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
ansible web -m ping
node2 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
node1 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
简单的批量执行
command命令模块
ansible all -m command -a “uptime”
ansible db -m command -a “useradd -m -s /bin/bash test”
shell模块
ansible db -m shell -a "echo “test:123” |chpasswd "
script模块
vim 1.sh
#!/bin/bash
touch /root/1.txt
ansible web -m script -a “/root/1.sh”
playbook
一个playbook由一个到多个play构成
每个play都可以指定对某些主机生效
每个play由一个多多个任务构成
执行任务通过调用模块来实现
yaml语法格式
同级别数据元素必须有相同的缩进
子元素必须比父元素缩进更多
推荐缩进两个空格
每个文件首行是“–”,最后一行是“…”
playbook是play 的列表,列表项表示为“-”
paly本身是key:val对的字典
帮助查看
ansible-doc apt
执行playbook
ansible-playbook --syntax-check **.yml //检测语法格式
ansible-playbook **.yml //执行playbook
实验-包含多个play的playbook
vim tow.yml
name: Execute NODE1
hosts: node1
tasks:
name: install http
apt:
name: apache2
state: present
name: Start service httpd, if not started
service:
name: apache2
state: started
name: Execute NODE2
hosts:
node1
node2
node3
tasks:
name: install gcc
apt:
name: gcc
state: present
ansible-playbook --syntax-check tow.yml
ansible all -m shell -a “apt update”
ansible-playbook tow.yml
curl 192.168.200.101 //验证可以访问到
实验-循环
同时启动ssh和apache
vim Circulates.yml
name: xhlx
hosts: node1
tasks:
name: sshd and apache2 are running
service:
name: “{{ item }}”
state: started
loop:
sshd
apache2
ansible-playbook --syntax-check Circulates.yml
ansible-playbook Circulates.yml
实验-变量及条件判断
变量my_service已定义,如果定义了,安装相应的软件包,没定义则跳过、也不会报错
vim tjpd.yml
name: panduan
hosts: all
vars:
my_service: apache2
tasks:
name: “{{ my_service }} package is installed”
apt:
name: “{{ my_service }}”
when: my_service is defined
判断路径:
hosts: all
remote_user: root
gather_facts: no
vars:
testpath1: “/etc”
testpath2: “/haha”
tasks:
debug:
msg: “directory”
when: testpath1 is directory
debug:
msg: “file”
when: testpath2 is file
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!