安装ansible
#需要epl源
[root@centos7 ~]# yum install ansible
#简单使用
[root@centos7 ~]# vim /etc/ansible/hosts
[websrvs]
192.168.37.6
192.168.37.17
[appsrvs]
192.168.37.[1:2]7
[root@centos7 ~]# ansible all --list-hosts
hosts (3):
192.168.37.6
192.168.37.17
192.168.37.27
[root@centos7 ~]# ansible all -m ping -k #-k基于密码验证
[root@centos7 ~]# vim /etc/ansible/ansible.cfg
host_key_checking = False #跳过密码验证
#先做好基于key验证
[root@centos7 ~]# ssh-keygen
[root@centos7 ~]# ssh-copy-id 192.168.37.6
[root@centos7 ~]# ssh-copy-id 192.168.37.17
[root@centos7 ~]# ssh-copy-id 192.168.37.27
[root@centos7 ~]# ansible all -m ping
[root@centos7 ~]# ansible-doc -l #列出模块
*ansible 各种模块
#执行结果:红色-失败,黄色-成功,绿色-命令成功但不修改
#ping
[root@centos7 ~]# ansible all -m ping
#command
[root@centos7 ~]# ansible all -m command -a "ls /data"
[root@centos7 ~]# ansible all -m command -a "creates=/etc/xxx ls /data" #creates=后面文件不存在则执行ls命令
192.168.37.27 | CHANGED | rc=0 >>
cascad_all.sql
logs
master4.sql
mastermha
master.sql
new.sql
slave_all.sql
192.168.37.17 | CHANGED | rc=0 >>
all.sql
cascad_all.sql
inc2.sql
inc.sql
logs
master2.sql
master3.sql
master4.sql
mastermha
master.sql
mysql
slave_all.sql
192.168.37.6 | CHANGED | rc=0 >>
lost+found
[root@centos7 ~]# ansible all -m command -a "removes=/etc/xxx ls /data" #与creates相反
192.168.37.6 | SUCCESS | rc=0 >>
skipped, since /etc/xxx does not exist
192.168.37.27 | SUCCESS | rc=0 >>
skipped, since /etc/xxx does not exist
192.168.37.17 | SUCCESS | rc=0 >>
skipped, since /etc/xxx does not exist
#shell
[root@centos7 ~]# ansible all -m shell -a 'echo $HOSTNAME'
192.168.37.6 | CHANGED | rc=0 >>
centos6.localdomain
192.168.37.27 | CHANGED | rc=0 >>
slave1_sql
192.168.37.17 | CHANGED | rc=0 >>
master_sql
[root@centos7 ~]# ansible all -m shell -a 'echo magedu | passwd --stdin root' #修改密码
192.168.37.27 | CHANGED | rc=0 >>
Changing password for user root.
passwd: all authentication tokens updated successfully.
192.168.37.6 | CHANGED | rc=0 >>
Changing password for user root.
passwd: all authentication tokens updated successfully.
192.168.37.17 | CHANGED | rc=0 >>
Changing password for user root.
passwd: all authentication tokens updated successfully.
#修改默认模块
[root@centos7 ~]# vim /etc/ansible/ansible.cfg
module_name = shell
#copy 本机复制到远程主机
[root@centos7 ~]# ansible websrvs -m copy -a 'src=/etc/fstab dest=/data/ backup=yes' #复制本机文件到远程服务器,backup:覆盖前备份
[root@centos7 ~]# ansible websrvs -a 'ls /data'
192.168.37.17 | CHANGED | rc=0 >>
all.sql
cascad_all.sql
fstab
inc2.sql
inc.sql
logs
master2.sql
master3.sql
master4.sql
mastermha
master.sql
mysql
slave_all.sql
192.168.37.6 | CHANGED | rc=0 >>
fstab
lost+found
#fetch 远程服务器拷贝文件到本机
[root@centos7 ~]# ansible websrvs -m fetch -a 'src=/var/log/messages dest=/data/'
192.168.37.6 | CHANGED => {
"changed": true,
"checksum": "d29f63f4bf673db5a6bf92e11d325b86e1cb437b",
"dest": "/data/192.168.37.6/var/log/messages",
"md5sum": "027cdae7482780008b7c9ace7f35cc5b",
"remote_checksum": "d29f63f4bf673db5a6bf92e11d325b86e1cb437b",
"remote_md5sum": null
}
192.168.37.17 | CHANGED => {
"changed": true,
"checksum": "9afe3ddf6fa06b583413afe1bc47d000548eaf65",
"dest": "/data/192.168.37.17/var/log/messages",
"md5sum": "706d677f6187dc9274e57ecc60ce1063",
"remote_checksum": "9afe3ddf6fa06b583413afe1bc47d000548eaf65",
"remote_md5sum": null
}
#file 文件与权限
[root@centos7 ~]# ansible websrvs -m file -a 'path=/data/fstab owner=nobody mode=600' #修改所属主,权限
192.168.37.6 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 0,
"group": "root",
"mode": "0600",
"owner": "nobody",
"path": "/data/fstab",
"size": 738,
"state": "file",
"uid": 99
}
192.168.37.17 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 0,
"group": "root",
"mode": "0600",
"owner": "nobody",
"path": "/data/fstab",
"size": 738,
"state": "file",
"uid": 99
}
[root@centos7 ~]# ansible websrvs -m file -a 'src=/data/fstab path=/data/fstab.link state=link' #远程主机创建软链接
[root@centos7 ~]# ansible websrvs -m file -a 'path=/data/f1 state=touch' #创建文件
[root@centos7 ~]# ansible websrvs -m file -a 'path=/data/f1 state=absent' #删除文件
[root@centos7 ~]# ansible websrvs -m file -a 'path=/data/ state=absent' #删除目下所有内容
#unarchive:解包解压缩,有两种用法:
# 1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,设置copy=yes.
# 2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
[root@centos7 ~]# ansible websrvs -m unarchive -a 'src=/data/httpd-2.4.25.tar.bz2 dest=/data copy=yes'
#archive 压缩
[root@centos7 ~]# ansible websrvs -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2'
#cron 计划任务
[root@centos7 ~]# ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &> /dev/null' name=synctime" #创建计划任务
[root@centos7 ~]# ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &> /dev/null' name=synctime disabled=yes" #禁用计划任务
[root@centos7 ~]# ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &> /dev/null' name=synctime disabled=no" #启用计划任务
[root@centos7 ~]# ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &> /dev/null' name=synctime state=absent" #删除计划任务
#service 服务管理(started,restarted,stopped,reloaded)
[root@centos7 ~]# ansible websrvs -m service -a 'name=crond state=stopped'
[root@centos7 ~]# ansible websrvs -m service -a 'name=crond state=started'
#user 用户
[root@centos7 ~]# ansible websrvs -m user -a 'name=mysql system=yes home=/data/mysql shell=/bin/false create_home=no'
[root@centos7 ~]# ansible websrvs -m user -a 'name=mysql state=absent remove=yes' #删除家目录
ansible playbook 实现httpd服务部署
#角色目录结构与作用
/roles/project/ :项目名称,有以下子目录
files/ :存放由copy或script模块等调用的文件
templates/:template模块查找所需要模板文件的目录
tasks/:定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
vars/:定义变量,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
#先创建目录
[root@centos7 ~]# mkdir -p /data/playbook/roles
[root@centos7 playbook]# mkdir -p roles/httpd/{tasks,files,templates,vars,handlers}
[root@centos7 playbook]# cd roles/httpd/tasks/
[root@centos7 tasks]# touch user.yml install.yml config.yml data.yml service.yml
[root@centos7 tasks]# ls > main.yml
#准备好模板文件
[root@centos7 tasks]# cp -a /etc/httpd/conf/httpd.conf ../templates/httpd7.conf.j2
#创建配置文件
[root@centos7 tasks]# vim user.yml
- name: create user
user: name=apache shell=/sbin/nologin system=yes create_home=no
[root@centos7 tasks]# vim install.yml
- name: install
yum: name=httpd
[root@centos7 tasks]# vim ../templates/httpd7.conf.j2
listen {{ http_port }}
User {{ username }}
Group {{ groupname }}
[root@centos7 tasks]# vim ../vars/main.yml
http_port: 80
username: apache
groupname: apache
[root@centos7 tasks]# vim config.yml
- name: config
template: src=httpd7.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: restart service
when: ansible_distribution_major_version=="7"
- name: config
template: src=httpd6.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: restart service
when: ansible_distribution_major_version=="6"
[root@centos7 tasks]# vim data.yml
- name: data file
copy: src=roles/httpd/files/index.html dest=/var/www/html
[root@centos7 tasks]# vim service.yml
- name: service
service: name=httpd state=started enabled=yes
[root@centos7 tasks]# vim main.yml
- include: user.yml
- include: install.yml
- include: config.yml
- include: data.yml
- include: service.yml
[root@centos7 tasks]# vim ../handlers/main.yml
- name: restart service
service: name=httpd state=restarted
[root@centos7 tasks]# cd /data/playbook
[root@centos7 playbook]# vim httpd_role.yml
- hosts: appsrvs
remote_user: root
roles:
- httpd
[root@centos7 tasks]# echo "welcome to magedu" >> /data/playbook/roles/httpd/files/index.html
#最终目录结构
[root@centos7 playbook]# tree
.
├── httpd_role.yml
└── roles
└── httpd
├── files
├── handlers
│ └── main.yml
├── tasks
│ ├── config.yml
│ ├── data.yml
│ ├── install.yml
│ ├── main.yml
│ ├── service.yml
│ └── user.yml
├── templates
│ ├── httpd6.conf.j2
│ └── httpd7.conf.j2
└── vars
└── main.yml
7 directories, 11 files
#测试
[root@centos7 tasks]# ansible-playbook -C /data/playbook/httpd_role.yml #检查配置
[root@centos7 tasks]# ansible-playbook /data/playbook/httpd_role.yml #安装
ansible playbook 实现nginx
cd /data/playbook
#准备好目录和文件
[root@centos7 playbook]# mkdir -p roles/nginx/{tasks,files,handlers,templates,vars}
[root@centos7 playbook]# yum install nginx #epl源
[root@centos7 playbook]# cp -a /etc/nginx/nginx.conf roles/nginx/templates/
[root@centos7 tasks]# touch user.yml install.yml config.yml data.yml service.yml
[root@centos7 tasks]# ls > main.yml
#创建roles
[root@centos7 tasks]# vim user.yml
- name: create user
user: name=nginx shell=/sbin/nologin system=yes create_home=no
[root@centos7 tasks]# vim install.yml
- name: install
yum: name=nginx
[root@centos7 tasks]# vim config.yml
- name: config
template: src=nginx.conf dest=/etc/nginx/nginx.conf
notify: restart service
[root@centos7 tasks]# vim ../templates/nginx.conf
listen 9527 default_server;
listen [::]:9527 default_server;
[root@centos7 tasks]# vim ../handlers/main.yml
- name: restart service
service: name=nginx state=started
[root@centos7 tasks]# vim data.yml
- name: data
copy: src=index.html dest=/usr/share/nginx/html
[root@centos7 tasks]# echo 'It work!' > ../files/index.html
[root@centos7 tasks]# vim service.yml
- name: service
service: name=nginx state=restarted enabled=yes
[root@centos7 tasks]# vim main.yml
- include: user.yml
- include: install.yml
- include: config.yml
- include: data.yml
- include: service.yml
[root@centos7 tasks]# cd /data/playbook
[root@centos7 playbook]# vim nginx_role.yml
- hosts: appsrvs
remote_user: root
roles:
- role: nginx
#测试
[root@centos7 playbook]# ansible-playbook -C nginx_role.yml
[root@centos7 playbook]# ansible-playbook nginx_role.yml
ansible playbook 实现二进制安装mariadb
#准备好文件和目录
[root@centos7 data]# cd /data/playbook/roles/
[root@centos7 roles]# mkdir -p mysql/{tasks,files,handlers,vars,templates}
[root@centos7 roles]# cp ~/mariadb-10.2.25-linux-x86_64.tar.gz mysql/files/
[root@centos7 roles]# cd mysql/tasks/
[root@centos7 tasks]# touch user.yml unarchive.yml link.yml datadir.yml database.yml var.yml config.yml script.yml service.yml
#创建roles
[root@centos7 tasks]# vim user.yml
- name: create user
user: name=mysql system=yes home=/data/mysql create_home=no shell=/sbin/nologin
[root@centos7 tasks]# vim unarchive.yml
- name: unarchive
unarchive: src=mariadb-10.2.25-linux-x86_64.tar.gz dest=/usr/local owner=mysql group=mysql
[root@centos7 tasks]# vim link.yml
- name: mysql link
file: src=/usr/local/mariadb-10.2.25-linux-x86_64 dest=/usr/local/mysql state=link
[root@centos7 tasks]# vim datadir.yml
- name: mysql datadir owner group
file: path=/data/mysql state=directory owner=mysql group=mysql
[root@centos7 tasks]# vim database.yml
- name: database
shell: chdir=/usr/local/mysql scripts/mysql_install_db --datadir=/data/mysql --user=mysql
[root@centos7 tasks]# vim var.yml
- name: path variable
copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
[root@centos7 tasks]# vim config.yml
- name: config
shell: cp /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf
- name: set datadir
#shell: sed -i '/\[mysqld\]/a datadir=/data/mysql' /etc/my.cnf
lineinfile: dest=/etc/my.cnf insertafter='\[mysqld\]' line='datadir=/data/mysql'
notify: restart service
[root@centos7 tasks]# vim script.yml
- name: service file
shell: cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@centos7 tasks]# vim service.yml
- name: start file
shell: /etc/init.d/mysqld start
[root@centos7 tasks]# ls > main.yml
[root@centos7 tasks]# vim main.yml
- include: unarchive.yml
- include: user.yml
- include: unarchive.yml
- include: link.yml
- include: datadir.yml
- include: database.yml
- include: var.yml
- include: config.yml
- include: script.yml
- include: service.yml
[root@centos7 tasks]# vim ../handlers/main.yml
- name: restart service
shell: /etc/init.d/mysqld restart
[root@centos7 tasks]# cd /data/playbook/
[root@centos7 playbook]# vim mysql_role.yml
- hosts: appsrvs
remote_user: root
roles:
- role: mysql
#测试
[root@centos7 playbook]# ansible-playbook -C nginx_role.yml #检查时因为并没有解压缩,所以会报创建软链接失败的错误
[root@centos7 playbook]# ansible-playbook nginx_role.yml
网友评论