1.准备三台机子,一台用户服务端ansible服务器,另外两台用来做客户端、用来控制它做一些自己化部署。
192.168.10.52 | ansible服务端 |
192.168.10.153 | 客户端 |
192.168.10.51 | 客户端 |
2.配置服务端(192.168.10.52),因为是自动化运维,其它两台主机都不用动。配置一个华为源,安装ansible。
#配置华为源
vi /etc/yum.repos.d/openstack.repo
[base]
name=base
baseurl=https://repo.huaweicloud.com/centos/7/os/x86_64/
enable=1
gpgcheck=0
[extras]
name=extrax
baseurl=https://repo.huaweicloud.com/centos/7/extras/x86_64/
enable=1
gpgcheck=0
[updates]
name=updates
baseurl=https://repo.huaweicloud.com/centos/7/updates/x86_64/
enable=1
gpgcheck=0
[queens]
name=queens
baseurl=https://repo.huaweicloud.com/centos/7/cloud/x86_64/openstack-queens/
enable=1
gpgcheck=0
[virt]
name=virt
baseurl=https://repo.huaweicloud.com/centos/7/virt/x86_64/kvm-common/
enable=1
gpgcheck=0
#下载ansible
yum -y install ansible
3.ansible有两个目录结构,一个是默认root配置文件/etc/ansible,另一个是默认清单文件位置
/etc/ansible/host,当然我们要控制另外两个主机,必须把它加入到主机清单。
#加入主机清单
vi /etc/ansible/hosts #最后面加入
192.168.10.153
192.168.10.51
#第二种方式,也可以把他们两个分成一个组。
vi /etc/ansible/hosts #最后面加入
[abc] #现在就是abc组
192.168.10.153
192.168.10.51
4.做一个免密登录
#生成密钥
ssh-keygen
#拷贝密钥到目标主机,实现免密登录主机
ssh-copy-id root@192.168.10.51
ssh-copy-id root@192.168.10.153
#测试,看看能不能登录,exit退出
ssh root@192.168.10.51
ssh root@192.168.10.153
5.然后现在我们已经控制了这两台主机,试试能不能ping通它们。
#ping 192.168.10.153 #看看是不是绿色
ansible -m ping 192.168.10.153
ansible -m ping 192.168.10.51
#第二种方式 刚刚我们是不是分了一个组,直接用组名进行ping它们两个
ansible -m ping abc
6.我的默认清单,
7.测试一个查看192.168.10.153的源有哪些,我的只有一个本地源。
ansible 192.168.10.153 -m shell -a 'ls /etc/yum.repos.d/'
8.在服务端(192.168.10.52)上操作,使192.168.10.153上可以自动化创建文件(file),删除文件(file),复制文件(copy),(mount)挂载,yum(下载)、(service)启动服务,关闭防火墙(systemd)命令。这些是一些基础的模块
注:ansible执行出来的颜色一定是黄色的。
#创建一个文件,名叫cccc,
ansible 192.168.10.153 -m file -a 'path=/root/cccc state=touch mode=777'
#然后删除这个文件cccc
ansible 192.168.10.153 -m file -a 'path=/root/cccc state=absent'
#复制文件,首先在服务端创建一个文件
touch kkkk
ansible 192.168.10.153 -m copy -a 'src=/root/kkkk dest=/root'
#mount 挂载 ,这里的all表示所有加入主机清单的都执行挂载这个命令
ansible all -m mount -a 'path=/mnt src=/dev/cdrom state=mounted fstype=iso9660'
#下载httpd
ansible all -m yum -a 'name=httpd state=installed'
#启动httpd
ansible all -m service -a 'name=httpd state=started enabled=true'
#关闭防火墙
ansible all -m systemd -a 'name=firewalld state=stopped enabled=no'
9.简单讲一下ansile-playbook,也就是将上面的一些命令,做成一个剧本,让它直接一次性执行。
先说playbook的格式,这个是我直接的一种格式。
#创建一个剧本
vi yyy.yaml 写入 ###注:请注意格式!!!!!!
- hosts: 192.168.10.153 #这个是要在哪一个主机上执行这个剧本,all就是全部主机
tasks:
- name: 安装httpd #这里是名字,就是你这个步骤要干什么,可写可不写
yum: #这个是yum模块(用于下载)
name: httpd #要下载软件的名称
state: installed 下载最新的httpd
10.我来写一个简单的playbook,
1.删除所有源
2.创建ccc组,将hhh用户加入ccc组中
3.拷贝本地源(先要创建一个repo本地源),mount挂载
4.安装httpd,vim,mariadb
5.启动httpd
6.关闭防火墙
7.浏览器查看httpd界面
#创建文件
vi kkkk.yaml
- hosts: all
tasks:
- name: 删除所有源
shell: rm -rf /etc/yum.repos.d/*
- name: 创建ccc组
group:
name: ccc
state: present
- name: 将hhh用户加入ccc组中
user:
name: hhh
group: ccc
- name: 拷贝本地源(先要创建一个repo本地源)
copy:
src: /root/bdy.repo
dest: /etc/yum.repos.d/
- name: mount挂载
mount:
path: /mnt
src: /dev/sr0
state: mounted
fstype: iso9660
- name: 安装httpd,vim,mariadb
yum:
name: httpd,vim,mariadb
state: present
- name: 启动httpd
service:
name: httpd
state: started
enabled: true
- name: 关闭防火墙
systemd:
name: firewalld
state: stopped
enabled: no
#执行剧本
ansible-playbook kkkk.yaml (文件名)
绿色带表已经执行过了
黄色代表执行成功
浏览器访问:192.168.10.153,192.168.10.51
总结:以上就是使用ansible自动化控制主机来执行命令,比较方便管理主机,还用到剧本ansible-playbook的一些编写格式以及基础的模块,如有问题,还是那句话、请联系小编