《Centos7——playbook快速入门》

目录

    • 1. ansible执行方式
    • 2. playbook中的变量的定义和引用
    • 3. 引用变量
    • 4. playbook
    • 5. 第一触发任务(handlers)
    • 6. playbook中的循环
    • 7. playbook中的判断

1. ansible执行方式

通过ansible下发单个任务,这种执行方式:Ad-hoc,点对点!临时任务,不复杂任务
1. mkdir httpd	&&	cd	httpd	&&	vim httpd.yml -----创建目录,进入目录,编辑文件
2. 读取playbook文件执行任务!后缀.yml或.yaml
3. ansible-playbook httpd.yml -----执行playbook文件
4. ansible-playbook --syntax-check httpd.yml ----语法检测 

格式:

---
- hosts: webservers #主机组
  tasks:
    - name:	"安装apache"
   	  yum:	name=httpd state=latest
   	- name: "启动apache"
   	  service: name=httpd state=started enabled=yes

查看ansible主机中远程主机信息

[root@localhost httpd]# ansible webservers --list-hosts
  hosts (1):
    192.168.179.131

修改任务返回success颜色:

[root@localhost ~]# vim /etc/ansible/ansible.cfg -----编辑配置文件
[colors] 
ok=purple #改为紫色

2. playbook中的变量的定义和引用

定义变量:
在playbook文件中可以使用vars元素来定义变量

==例如:定义一个名为port的变量,值为80==
---
- hosts: nginx
  vars:
    port: 80

3. 引用变量

在playbook的任何位置都可以引用变量,变量需要加{ {}} 引用例如

---
- hosts: nginx
  vars:
	port: 80
  tasks:
    - name: "监听端口{
     { port }}"
	  shell: echo "{
     { port }}"
## 在模板文件中引用变量
 定义变量
---
- hosts: webservers
  vars:
    port: 8000
  tasks:
    - name: "发送文件"
  template: src=port.conf.j2  dest=/opt/port.conf
引用变量,编辑模板文件ort.conf.j2,通过template模块变量读入到模板文件中,并将文件发送至被管理节点
# vim port.conf.j2
{
     {
      port }}
我们也可以直接引用setup模块的关键词,当作变量,无需定义!
例如:
{
     {
      ansible_hostname }}

4. playbook

给任务打标签:
tags
一个任务可以拥有多个标签
例子:
    - name: "创建测试页面"
      shell: echo "nginx" > {
     {
      ngx_root }}/index.html
      tags: 
        - page
    
使用标签:
[root@localhost ~]# ansible-playbook -t page nginx.yml

5. 第一触发任务(handlers)

 handlers:
      handlers可以定义一些触发任务,这些任务可以被其他任务引用!这些触发任务只会在引用的任务有更改时执行!
      handlers定义的触发任务,一般要写到文件的末尾!在其他任务中通过(notiy: 触发任务名称)引用

   例子:
 tasks:
    - name: "推送模板配置文件"
      template: src=nginx.conf.j2   dest=/usr/local/nginx/conf/nginx.conf
      tags:
        - config-nginx
      notify: reload-nginx

 handlers:
    - name: "reload-nginx"
      shell: /usr/local/nginx/sbin/nginx -s reload

案例1

源码部署nginx的playbook文件内容,仅供参考

---
- hosts: webservers
  vars:
    ngx_root: /html
    ngx_port: 8000
    ngx_user: www
  tasks:
    - name: "安装依赖环境"
      yum: name=gcc,pcre-devel,openssl-devel state=latest
    - name: "分发nginx源码安装包"
      unarchive: src=nginx-1.18.0.tar.gz  dest=/root/
    - name: "安装nginx"
      shell: cd /root/nginx-1.18.0 && ./configure && make && make install
    - name: "启动nginx"
      shell: /usr/local/nginx/sbin/nginx
      ignore_errors: True
    - name: "推送模板配置文件"
      template: src=nginx.conf.j2   dest=/usr/local/nginx/conf/nginx.conf
      tags: config-nginx
      notify: reload-nginx
    - name: "创建运行用户"
      user: name={
     {
      ngx_user }}
      tags: config-nginx
    - name: "创建网站根目录"
      file: path={
     {
      ngx_root }}  state=directory group={
     {
      ngx_user }} owner={
     {
      ngx_user }}
      tags: config-nginx
    - name: "创建测试页面"
      shell: echo "{
     { ngx_root }}" > {
     {
      ngx_root }}/index.html
      tags:
        - page
        - config-nginx
  handlers:
    - name: "reload-nginx"
      shell: /usr/local/nginx/sbin/nginx -s reload

6. playbook中的循环

---
- hosts:
  tasks:
   - name: "安装lamp相关组件"
     yum: name={
     {
      item }} state=latest
     with_items:
       - php
       - php-mysql
       - php-gd
       - mysql
       - mysql-server
说明: item会依次等于php php-mysql php-gd mysql mysql-server,会循环执行5次

7. playbook中的判断

用when来给任务添加条件,当满足条件才能执行任务,不满足的节点不执行

例子:

---
- hosts: webservers
  tasks:
    - name: "满足主机名为:node-161,创建node-161.txt文件"
      file: path=/opt/node-161.txt state=touch
      when: ansible_hostname == "node-161"

    - name: "满足主机名为:node-162,创建node-162.txt文件"
      file: path=/opt/node-162.txt state=touch
      when: ansible_hostname == "node-162"

你可能感兴趣的:(ansible,centos,1024程序员节)