ansible——使用角色,yaml文件拆分为多个文件

48 篇文章 1 订阅

前言:

有关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

在这里插入图片描述
可以查看一下我们apache角色的目录树结构
在这里插入图片描述
首先编写我们的任务目录的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

在这里插入图片描述
可以看到端口这里我们定义了一个变量,我们需要在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

接下来就是推送
在这里插入图片描述
查看server2和server3的80端口是否打开
在这里插入图片描述
在这里插入图片描述
最后我们更改vars目录下定义http_port的变量为8080

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

重新推送,看是否生效
在这里插入图片描述
可以看到configure httpd和restart httpd两个任务执行了。
在这里插入图片描述
端口更改为8080了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值