Ansible-playbook

Ansible-playbook

概述

  ​Ansible-playbook是ansible的核心组件,通过yaml文件格式来定义各个task,每个task会调用python的不同模块,多个task的集合就是playbook。

  ​作用:ad-hot方式的没有持久化方案,在实践中效率不高。为了提高效率和重用性,需要一套可以持久化脚本的方案,也就是playbook。

YAML

  ​相比于json的{}的滥用,xml的标签对繁琐。凭借着优雅的缩进,可读性高等特点,YAML语言用来写配置文件变的流行起来。docker compose、kubernetes、ansible等主流开源软件都采用了yaml作为配置文件。

语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • #表示注释

数据类型

  • 对象:键值对

  • 数组:以 - 开头的行表示构成一个数组

  • 存量:整数、浮点数、字符串、布尔值、时间、日期、Null

实例:

# 订单
---
date: 2021-03-16
customer:
  - name: zbk
orderlist:
  - no: 000001
  - item: milk

引用

& 锚点和 ***** 别名,可以用来引用

defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

相当于:

defaults:
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  adapter:  postgres
  host:     localhost

test:
  database: myapp_test
  adapter:  postgres
  host:     localhost

& 用来建立锚点(defaults),<< 表示合并到当前数据,***** 用来引用锚点。

下面是另一个例子:

- &showell Steve 
- Clark 
- Brian 
- Oren 
- *showell 

转为 JavaScript 代码如下:

[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

Playbook

核心元素

  • Hosts 执行的远程主机列表

  • Tasks 任务集

  • Varniables 内置变量或自定义变量在playbook中调用

  • Templates 模板,即使用模板语法(参考附录jinja2语法)的文件,比如配置文件等

  • Handlers 和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行

  • tags 标签,指定某条任务执行,用于选择运行playbook中的部分代码。

实例1:安装httpd

编写httpd.yaml文件
---
# install httpd
- hosts: web
  remote_user: root
  
  tasks:
    - name: install httpd
      yum: name=httpd state=present
    - name: start httpd service
      service: name=httpd state=started enabled=yes
检查语法,运行playbook
# 检查语法(后面不再赘述)
ansible-playbook -C httpd.yaml
# 运行
ansible-playbook httpd.yaml

实例2:安装mysql5.7

准备工作
# MySQL配置文件
[root@ansible ~]#cat my.cnf
[mysqld]
socket=/tmp/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
innodb_file_per_table=1
log-bin
pid-file=/data/mysql/mysqld.pid

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld_safe]
log-error=/var/log/mysqld.log

# MySQL初始化
[root@ansible ~]#cat secure_mysql.sh
#!/bin/bash
/usr/local/mysql/bin/mysql_secure_installation <<EOF

y


y
y
y
y
EOF

# 官方下载源码包,略
-rw-r--r--  1 root root 661214270 4月   5 21:57 mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
编写mysql.yaml文件
- hosts: all
  remote_user: root
  gather_facts: no

  tasks:
    - name: install packages
      yum: name=libaio,perl-Data-Dumper,perl-Getopt-Long
    - name: create mysql group
      group: name=mysql gid=306 
    - name: create mysql user
      user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql
    - name: create path
      file: name=/data/mysql state=directory owner=root group=root
    - name: copy tar to remote host and file mode 
      unarchive: src=mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz dest=/usr/local/ owner=root group=root 
    - name: create linkfile  /usr/local/mysql 
      file: src=mysql-5.7.32-linux-glibc2.12-x86_64 dest=/usr/local/mysql state=link
    - name: data dir
      shell: chdir=/usr/local/mysql/bin ./mysqld --initialize-insecure --user=mysql --datadir=/data/mysql > /root/mysql.txt
      tags: data
    - name: config my.cnf
      copy: src=my.cnf  dest=/etc/my.cnf 
    - name: service script
      shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    - name: enable service
      shell: /etc/init.d/mysqld start;chkconfig --add mysqld;chkconfig mysqld on  
      tags: service
    - name: PATH variable
      copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
    - name: secure script
      script: secure_mysql.sh
      tags: script
运行playbook
# 目录结构
[root@ansible ~]# tree
├── anaconda-ks.cfg
├── install_mysql.yaml
├── my.cnf
├── mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
└── secure_mysql.sh

# 执行playbook
ansible-playbook mysql.yaml

参考:

ansible:http://www.yunweipai.com/34658.html

yaml语法:https://www.runoob.com/w3cnote/yaml-intro.html

jinja2语法:http://www.yunweipai.com/34663.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值