ansible-3

目录

[一、Templates 模块](#一、Templates 模块)

[1.1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量](#1.1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量)

1.2.修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量

[1.3.编写 playbook](#1.3.编写 playbook)

[二、tags 模块](#二、tags 模块)

[三、Roles 模块](#三、Roles 模块)

四、编写模块

4.1.编写httpd模块

4.2.编写mysql模块

4.3.编写php模块

4.4.编写roles


一、Templates 模块

Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。

1.1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量

css 复制代码
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

vim /opt/httpd.conf.j2
Listen {{http_port}}                #42行,修改
ServerName {{server_name}}            #95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改

1.2.修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量

css 复制代码
vim /etc/ansible/hosts       
[webservers]
192.168.190.104 http_port=8080 server_name=www.accp.com:80 root_dir=/etc/httpd/htdocs

[dbservers]
192.168.190.105 http_port=8081 server_name=www.benet.com:80 root_dir=/etc/httpd/htdocs

1.3.编写 playbook

css 复制代码
vim apache.yaml
---
- name: install httpd
  hosts: all
  remote_user: root
  vars:
    - pk: httpd
    - service: httpd
  tasks:
    - name: install httpd pk 
      yum: name={{pk}} state=latest
    - name: copy confg file
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify: 
        - restart httpd
    - name: start httpd server
      service: name={{service}} enabled=true state=started
  handlers:
    - name: restart httpd
      service: name={{service}} state=restarted




ansible-playbook apache.yaml

二、tags 模块

可以在一个playbook中为某个或某些任务定义"标签",在执行此playbook时通过ansible-playbook命令使用--tags选项能实现仅运行指定的tasks。

playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。

css 复制代码
vim webhosts.yaml
---
- hosts: webservers
  remote_user: root
  tasks:
    - name: copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
      - wys
    - name: touch file
      file: path=/opt/testhost state=touch


ansible-playbook webhosts.yaml --tags='wys'

查看

css 复制代码
vim webhosts.yaml
---
- hosts: webservers
  remote_user: root
  tasks:
    - name: Copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
      - only     #可自定义
    - name: touch file
      file: path=/opt/testhost state=touch
	  tags:
	  - always    #表示始终要运行的代码

三、Roles 模块

Ansible为了层次化、结构化地组织Playbook,使用了角色(roles),roles可以根据层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们。roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

css 复制代码
roles 的目录结构:
cd /etc/ansible/
tree roles/
roles/
├── web/
│   ├── files/
│   ├── templates/
│   ├── tasks/
│   ├── handlers/
│   ├── vars/
│   ├── defaults/
│   └── meta/
└── db/
    ├── files/
    ├── templates/
    ├── tasks/
    ├── handlers/
    ├── vars/
    ├── defaults/
    └── meta/
css 复制代码
/roles 内各目录含义解释
●files
用来存放由 copy 模块或 script 模块调用的文件。

●templates
用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。

●tasks
此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。

●handlers
此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。

●vars
此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。

●defaults
此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。

●meta
此目录应当包含一个 main.yml 文件,用于定义此角色的特殊设定及其依赖关系。
css 复制代码
在一个 playbook 中使用 roles 的步骤:
(1)创建以 roles 命名的目录
mkdir /etc/ansible/roles/ -p    #yum装完默认就有

(2)创建全局变量目录(可选)
mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all     #文件名自己定义,引用的时候注意

(3)在 roles 目录中分别创建以各角色名称命令的目录,如 httpd、mysql
mkdir /etc/ansible/roles/httpd
mkdir /etc/ansible/roles/mysql

(4)在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}

(5)在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

(6)修改 site.yml 文件,针对不同主机去调用不同的角色
vim /etc/ansible/site.yml
---
- hosts: webservers
  remote_user: root
  roles:
     - httpd
- hosts: dbservers
  remote_user: root
  roles:
     - mysql
	 
(7)运行 ansible-playbook
cd /etc/ansible
ansible-playbook site.yml


示例:
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

四、编写模块

4.1.编写httpd模块

css 复制代码
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: install apache
  yum: name={{pkg}} state=latest
- name: start apache
  service: enabled=true name={{svc}} state=started
 
//定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中
vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
svc: httpd

4.2.编写mysql模块

css 复制代码
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: install mysql
  yum: name={{pkg}} state=latest
- name: start mysql
  service: enabled=true name={{svc}} state=started
  
vim /etc/ansible/roles/mysql/vars/main.yml
pkg:
  - mariadb
  - mariadb-server
svc: mariadb

4.3.编写php模块

css 复制代码
vim /etc/ansible/roles/php/tasks/main.yml
- name: install php
  yum: name={{pkg}} state=latest
- name: start php-fpm
  service: enabled=true name={{svc}} state=started

vim /etc/ansible/roles/php/vars/main.yml
pkg:
  - php
  - php-fpm
svc: php-fpm

4.4.编写roles

css 复制代码
vim /etc/ansible/site.yml
---
- hosts: webservers
  remote_user: root
  roles:
   - httpd
   - mysql
   - php


cd /etc/ansible
ansible-playbook site.yml
相关推荐
风清再凯2 天前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机2 天前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星15 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥15 天前
ANSIBLE
ansible
码农101号15 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号15 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信16 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li16 天前
ANSIBLE(运维自动化)
运维·自动化·ansible
@donshu@19 天前
Linux运维-ansible-python开发-获取inventroy信息
linux·运维·ansible
Kendra91922 天前
Ansible
ansible