ansible-3

目录

一、Templates 模块

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

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

1.3.编写 playbook 

 二、tags 模块

三、Roles 模块

四、编写模块

4.1.编写httpd模块

4.2.编写mysql模块

4.3.编写php模块

4.4.编写roles


一、Templates 模块

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

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

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.修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量

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 

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都会执行。

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'

查看 

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一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

roles 的目录结构:
cd /etc/ansible/
tree roles/
roles/
├── web/
│   ├── files/
│   ├── templates/
│   ├── tasks/
│   ├── handlers/
│   ├── vars/
│   ├── defaults/
│   └── meta/
└── db/
    ├── files/
    ├── templates/
    ├── tasks/
    ├── handlers/
    ├── vars/
    ├── defaults/
    └── meta/
/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 文件,用于定义此角色的特殊设定及其依赖关系。
在一个 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模块

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模块

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模块

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

vim /etc/ansible/site.yml
---
- hosts: webservers
  remote_user: root
  roles:
   - httpd
   - mysql
   - php


cd /etc/ansible
ansible-playbook site.yml

相关推荐

  1. <span style='color:red;'>Ansible</span><span style='color:red;'>3</span>

    Ansible3

    2024-05-12 00:32:04      60 阅读
  2. <span style='color:red;'>ansible</span>-<span style='color:red;'>3</span>

    ansible-3

    2024-05-12 00:32:04      38 阅读
  3. <span style='color:red;'>Ansible</span>

    Ansible

    2024-05-12 00:32:04      43 阅读
  4. <span style='color:red;'>Ansible</span>

    Ansible

    2024-05-12 00:32:04      58 阅读
  5. <span style='color:red;'>ansible</span>

    ansible

    2024-05-12 00:32:04      47 阅读
  6. <span style='color:red;'>ansible</span>

    ansible

    2024-05-12 00:32:04      60 阅读
  7. <span style='color:red;'>ansible</span>

    ansible

    2024-05-12 00:32:04      53 阅读
  8. Ansible

    2024-05-12 00:32:04       46 阅读
  9. <span style='color:red;'>Ansible</span>

    Ansible

    2024-05-12 00:32:04      39 阅读
  10. <span style='color:red;'>ansible</span>

    ansible

    2024-05-12 00:32:04      62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-12 00:32:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-12 00:32:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-12 00:32:04       87 阅读
  4. Python语言-面向对象

    2024-05-12 00:32:04       96 阅读

热门阅读

  1. 11. 盛最多水的容器

    2024-05-12 00:32:04       30 阅读
  2. React 学习-1

    2024-05-12 00:32:04       32 阅读
  3. CSS Flexbox与Grid:构建响应式布局的艺术

    2024-05-12 00:32:04       36 阅读
  4. 【Halcon 内存泄漏记录 - C#】

    2024-05-12 00:32:04       42 阅读
  5. ImageMagick 的基本概念和使用场景

    2024-05-12 00:32:04       33 阅读
  6. git入门

    git入门

    2024-05-12 00:32:04      27 阅读
  7. 投影、选择转SQL语言

    2024-05-12 00:32:04       34 阅读
  8. BackgroundWorker类 取消任务

    2024-05-12 00:32:04       30 阅读
  9. STL——函数对象和谓词

    2024-05-12 00:32:04       35 阅读