【星海出品】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
相关推荐
我的运维人生2 天前
利用Python与Ansible实现高效网络配置管理
网络·python·ansible·运维开发·技术共享
qlau20072 天前
基于kolla-ansible在AnolisOS8.6上部署all-in-one模式OpenStack-Train
ansible·openstack
Shenqi Lotus2 天前
Ansible——Playbook基本功能
运维·ansible·playbook
qlau20075 天前
基于kolla-ansible在openEuler 22.03 SP4上部署OpenStack-2023.2
ansible·openstack
水彩橘子5 天前
Semaphore UI --Ansible webui
ui·ansible
happy_king_zi5 天前
ansible企业实战
运维·ansible·devops
码上飞扬5 天前
深入浅出 Ansible 自动化运维:从入门到实战
运维·ansible·自动化运维
theo.wu6 天前
Ansible自动化部署kubernetes集群
kubernetes·自动化·ansible
xidianjiapei0016 天前
Ubuntu Juju 与 Ansible的区别
linux·ubuntu·云原生·ansible·juju
打败4046 天前
ansible_find模块
linux·ansible