前言:

有关ansible服务的搭建:自动化运维工具Ansible的搭建

ansible-playbook配置思路:
1.通过vars中的main.yml配置变量,主要为源码存放目录及安装目录
2.通过tasks中的copy.yml将源码文件传输到异地服务器上源码存放目录
3.通过tasks中的install.yml调用模板mysql_install.sh,将mysql安装到变量中定义的安装目录
4.通过tasks中的main.yml调用copy模块和install模块
5.通过mysql.yml调用剧本(playbook):mysql_install

playbook的目录结构

[root@test ansible]# cd /etc/ansible/
 [root@test ansible]# mkdir -p roles/mysql_install/{files,handlers,meta,tasks,templates,vars}
 [root@test ansible]# tree /etc/ansible
 ├── ansible.cfg
 ├── hosts
 ├── mysql.yml
 ├── roles
 │ └── mysql_install
 │ ├── files
 │ │ ├── my.cnf
 │ │ └── mysql-5.6.22.tar.gz
 │ ├── handlers
 │ ├── meta
 │ ├── tasks
 │ │ ├── copy.yml
 │ │ ├── install.yml
 │ │ └── main.yml
 │ ├── templates
 │ │ └── mysql_install.sh
 │ └── vars
 │ └── main.yml

说明:
files:存放需要同步到异地服务器的源码文件及配置文件;
handlers:当资源发生变化时需要进行的操作,若没有此目录可以不建或为空;
meta:角色定义可留空;
tasks:mysql安装过程成需要进行的执行的任务;
templates:用于执行mysql安装的模板文件,一般为脚本;
vars:本次安装定义的变量

一、建立角色目录并配置

更改配置文件,指定角色目录

[devops@server1 ansible]$ vim ansible.cfg
[defaults]


inventory      = inventory
roles_path = roles


[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[devops@server1 ansible]$ mkdir roles

初始化生成playbook的默认目录(也可以自己建立,建议用命令生成)

[devops@server1 ansible]$ ansible-galaxy list
[devops@server1 ansible]$ cd roles/
[devops@server1 roles]$ ls
[devops@server1 roles]$ ansible-galaxy init apache

Ansible解压部署程序 ansible解压文件_mysql


可以查看一下我们apache角色的目录树结构

Ansible解压部署程序 ansible解压文件_Ansible解压部署程序_02


首先编写我们的任务目录的yml文件:

[devops@server1 apache]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  vars
[devops@server1 apache]$ vim tasks/main.yml
---
    - name: install httpd
      yum:
        name: httpd
        state: latest

    - name: create index.html
      copy:
        content: "{{ ansible_facts.hostname }} {{ ansible_facts['default_ipv4']['address'] }}\n"
        dest: /var/www/html/index.html
      tags: one

    - name: configure httpd
      template:
        src: templates/httpd.conf.j2
        dest: /etc/httpd/conf/httpd.conf
        owner: root
        group: root
        mode: 644
      notify: restart httpd

    - name: start httpd
      service:
        name: httpd
        state: started
        enabled: true

    - name: start firewalld
      service:
        name: firewalld
        state: started
        enabled: true

    - name: configure firewalld
      firewalld:
        service: http
        state: enabled
        permanent: yes
        immediate: yes

可以看到在configure httpd这个任务里面定义了一个触发器,接下来我们配置这个触发器:

[devops@server1 apache]$ vim handlers/main.yml
---
# handlers file for apache
- name: restart httpd
  service:
    name: httpd
    state: restarted

我们需要把之前的httpd服务的配置文件拷贝到templates目录:

[devops@server1 apache]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  vars
[devops@server1 apache]$ cd templates/
[devops@server1 templates]$ cp ../../../templates/httpd.conf.j2 .
[devops@server1 templates]$ vim httpd.conf.j2

Ansible解压部署程序 ansible解压文件_mysql_03


可以看到端口这里我们定义了一个变量,我们需要在vars目录里面说明

[devops@server1 apache]$ pwd
/home/devops/ansible/roles/apache
[devops@server1 apache]$ vim vars/main.yml
---
# vars file for apache
http_port: 80

现在角色的配置就基本完成了,可是在推送的是否需要一个yml文件。我们现在编辑这个文件,指定使用的角色

[devops@server1 ansible]$ vim apache.yml
---
- hosts: all
  roles:
    - apache

接下来就是推送

Ansible解压部署程序 ansible解压文件_apache_04


查看server2和server3的80端口是否打开

Ansible解压部署程序 ansible解压文件_mysql_05


Ansible解压部署程序 ansible解压文件_apache_06


最后我们更改vars目录下定义http_port的变量为8080

[devops@server1 ansible]$ vim roles/apache/vars/main.yml
---
# vars file for apache
http_port: 8080

重新推送,看是否生效

Ansible解压部署程序 ansible解压文件_apache_07


可以看到configure httpd和restart httpd两个任务执行了。

Ansible解压部署程序 ansible解压文件_apache_08


端口更改为8080了