【星海出品】ansible入门(二) playbook

核心是管理配置进行批量节点部署。

执行其中的一些列tasks。

playbook由YAML语言编写。

YAML的格式如下:

文件名应该以 .yml 结尾

1.文件的第一行应该以"---"(三个连字符)开始,表明YAML文件的开始。

2.在同一行中,#之后的内容表示注释,类似于shell,python和ruby。

3.YAML中的列表元素以"-"开头并且跟着一个空格。后面为元素内容。

4.同一个列表之中的元素应该保持相同的缩进,否则会被当做错误处理。

5.play中hosts、variables、roles、tasks等对象的表示方法都是以键值中间以":"分隔表示,并且":"之后要加一个空格。

yaml 复制代码
---
- hosts: node1 #hosts指示使用哪个主机或者主机组来运行下面的tasks,host也可以使用通配符格式.
  remote_user: root #remote_user:指定远端主机的哪个用户来登录远端系统,在远端系统执行task的用户,可以任意指定,也可以使用sudo,但是用户必须要有执行相应的task权限。
  tasks: #执行的核心
    - name: install mysql-server package
      yum: name=mysql-server state=present
    - name: starting mysqld service
      service: name=msyql state=started

一。主机或者主机组在inventorry清单中指定,可以使用系统默认的/etc/ansible/hosts

也可以自己编辑,在运行的时候加上-i 选项指定清单的位置。

在运行清单文件的时候, --list-hosts选项会显示哪些主机将会参与执行task的过程中。

二。使用ansible-playbook运行playbook文件,得到的输出信息中,信息内容为JSON格式,并且由不同的颜色组成,便于识别。

bash 复制代码
[root@ansible ansible]# ansible-playbook roles.yml 

如何定义一个role

bash 复制代码
[root@ansible ansible]# pwd
/etc/ansible
[root@ansible ansible]# ls
ansible.cfg  hosts  nginx.yml  roles

Mkdir:创建文件夹

Mkdir -p :创建嵌套式文件夹

Mkdir -v :显示过程

Mkdir -pv:同时创建多个文件夹
roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制

bash 复制代码
[root@ansible roles]# ls
[root@ansible roles]# mkdir -pv ./{nginx,mysql,httpd}/{files,templates,vars,tasks,handlers,meta,default}
bash 复制代码
[root@ansible roles]# tree 
.
├── httpd
│   ├── default
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   ├── templates
│   └── vars
├── mysql
│   ├── default
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   ├── templates
│   └── vars
└── nginx
    ├── default
    ├── files
    ├── handlers
    ├── meta
    ├── tasks
    ├── templates
    └── vars

[root@ansible nginx]# pwd
/etc/ansible/roles/nginx

用于定义此角色用到的各handler:在handler中使用include包含的其他的handler文件也应该位于此目录中;

files目录:存放由copy或script等模块调用的文件;

templates目录:templates模块会自动在此目录中寻找Jinja2模板文件;

tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用include包含其他的位于此目录中的task文件;

handlers目录:此目录中应当包含一个main;

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

meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;ansible 1.3及其以后的版本才支持

default目录:为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件;

bash 复制代码
.
├── default
├── files
│   └── nginx-1.18.0-1.el7.ngx.x86_64.rpm
├── handlers
│   └── main.yml
├── meta
├── tasks
│   └── main.yml
├── templates
│   └── nginx.conf.j2
└── vars
    └── main.yml
bash 复制代码
[root@ansible ]# cp /var/cache/yum/x86_64/7/nginx/packages/nginx.rpm /etc/ansible/roles/nginx/files/
[root@ansible ]# cp /tmp/nginx.conf.j2 /etc/ansible/roles/nginx/templates/
bash 复制代码
[root@ansible nginx]# ls tasks/
main.yml
[root@ansible nginx]# cat tasks/main.yml 
- name: cp
  copy: src=nginx.rpm dest=/tmp/nginx.rpm
- name: install
  yum: name=/tmp/nginx.rpm state=latest
- name: conf
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  tags: nginxconf
  notify: new conf to reload
- name: start service
  service: name=nginx state=started enabled=true

修改变量文件

bash 复制代码
cat vars/main.yml
nginxport: 9999

定义handlers文件

bash 复制代码
[root@ansible nginx]# cat handlers/main.yml 
- name: new conf to reload
  service: name=nginx state=restarted
bash 复制代码
[root@ansible ansible]# pwd
/etc/ansible
[root@ansible ansible]# cat roles.yml 
- hosts: web
  remote_user: root
  roles:
    - nginx
bash 复制代码
[root@ansible nginx]# cat handlers/main.yml 
- name: new conf to reload
  service: name=nginx state=restarted
[root@ansible nginx]# cat tasks/main.yml 
- name: cp
  copy: src=nginx-1.18.0-1.el7.ngx.x86_64.rpm dest=/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm
- name: install
  yum: name=/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm state=latest
- name: conf
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  tags: nginxconf
  notify: new conf to reload
- name: start service
  service: name=nginx state=started enabled=true
[root@ansible nginx]# cat templates/nginx.conf.j2 
 
user  nginx;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /var/log/nginx/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  65;
 
    #gzip  on;
server {
 
listen  {{ nginxport }};
}
 
    include /etc/nginx/conf.d/*.conf;
}
[root@ansible nginx]# cat vars/main.yml 
nginxport: 9999
相关推荐
lbb 小魔仙9 小时前
【Linux】Ansible 自动化运维实战:2000+ 节点配置标准化教程
linux·运维·ansible
扑火的小飞蛾3 天前
【Ansible学习笔记01】 批量执行 shell 命令
笔记·学习·ansible
oMcLin3 天前
如何在 Red Hat Linux 服务器上使用 Ansible 自动化部署并管理多节点 Hadoop 集群?
linux·服务器·ansible
linux修理工6 天前
vagrant ubuntu 22.04 ansible 配置
ubuntu·ansible·vagrant
biubiubiu07067 天前
Ansible自动化
运维·自动化·ansible
秋4278 天前
ansible配置与模块介绍
ansible
秋4278 天前
ansible剧本
linux·服务器·ansible
码农101号9 天前
Ansible - Role介绍 和 使用playbook部署wordPress
android·ansible
2301_8000509911 天前
Ansible
运维·ansible
阎*水13 天前
Ansible 核心要点总结
ansible