ansible之变量使用与playbook的设置(重点)

ansible之playbook

1.playbook的语法格式如下:  - hosts:  webservers 是定义的主机组 也就是playbook中的 play 角色的意思 注意":" 冒号后面也必须价格空格不然就报错

  tasks: 注意 他前面是有2个空格的, ansible 是用空格来区分规格的, 记住不能使用tab按键

[[email protected] ~]# mkdir project1
[[email protected] ~]# cd project1/
[[email protected] project1]# cat p1.yml
---
#play
- hosts: webservers

  tasks:
    - name: Installed Httpd Server
      yum:
        name: httpd
        state: present

    - name: Start Httpd Server
      systemd:
        name: httpd
        state: started
        enabled: yes

2.检查语法,只检查是否是yaml语法格式。并不做逻辑校验。  (记住这个要经常使用,他是判断语法是否正确!!!)

[[email protected] project1]# ansible-playbook --syntax-check p1.yml 

3.模拟执行(不是真的执行)

[[email protected] project1]# ansible-playbook -C  p1.yml 

4.真实的描述状态(被控端的状态必须与控制端描述的状态一致)

[[email protected] project1]# ansible-playbook p1.yml

[[email protected] project1]# cat p1.yml
---
#play
- hosts: webservers

  tasks:
    - name: Installed Httpd Server
      yum: name=httpd state=present

    - name: Start Httpd Server
      systemd: name=httpd state=started enabled=yes

    - name: Start Firewalld Server
      systemd: name=firewalld state=started enabled=yes

    - name: Configure Firewalld Server
      firewalld: service=http immediate=yes permanent=yes state=enabled

- hosts: web01
  tasks:
    - name: Configure web01 Website
      copy: content=‘This is Web01‘ dest=/var/www/html/index.html

- hosts: web02
  tasks:
    - name: Cofnigure webi-2 weisite
      copy: content=‘This is Web02‘ dest=/var/www/html/index.html

多paly语法示例

    1.安装
    2.配置
        用户
        /data
    3.启动

#记得重启你的nfs
[[email protected] project1]# cat nfs.yml
- hosts: web01

  tasks:
    - name: Install NFS-utils Server
      yum: name=nfs-utils state=present

    - name: Configure Nfs-utils Server
      copy: src=./exports.j2 dest=/etc/exports owner=root group=root mode=0644

    - name: Create NFS Group
      group: name=www gid=666

    - name: Create NFS User
      user: name=www uid=666 group=www create_home=no shell=/sbin/nologin

    - name: Create Data Directory
      file: path=/data state=directory owner=www group=www mode=0755 recurse=yes

    - name: Start NFS Server
      systemd: name=nfs state=started enabled=yes

- hosts: web02
  tasks:
    - name: Mount NFS Server
      mount: path=/opt src=172.16.1.7:/data fstype=nfs opts=defaults state=mounted

安装NFS服务

1.使用yum安装 httpd、php、php-mysql、mariadb、firewalld等
2.启动httpd、firewalld、mariadb等服务
3.添加防火墙规则,放行http的流量,并永久生效
4.使用get_url下载 http://fj.xuliangwei.com/public/index.php 文件

[[email protected] project1]# cat lamp.yml
#- hosts: webservers
- hosts: otherservers
  tasks:
    - name: Installed Web Packages
      yum: name=httpd,mariadb-server,php,php-mysql,php-pdo state=present

    - name: Start Web Serivce
      service: name=httpd state=started

    - name: Start Mariadb Service
      service: name=mariadb state=started

    - name: Get Wordpress
      unarchive: src=./wordpress-5.0.3-zh_CN.tar.gz dest=/var/www/html/ copy=yes mode=0755

  #  - name: Copy Index.php
  #    copy: src=./index.php.j2 dest=/var/www/html/index.php

 #   - name: Get Url index.php
 #     get_url: url="http://fj.xuliangwei.com/public/index.php" des

使用AnsiblePlaybook方式构建LAMP架构,具体操作步骤如下:



ansible之编写playbook的变量形式

变量
1、playbook变量可以通过多种方式进行定义,最简单的方式就是在playbook的开头通过vars进行定义

#安装两个软件包使用变量方式
[[email protected] project1]# cat  p2.yml
- hosts: webservers
  vars:
    - web_package: httpd
    - ftp_package: vsftpd
  tasks:
    - name: Installed Packages
      yum:
        name:
          - "{{ web_package }}"
          - "{{ ftp_package }}"
        state: present

2.也可以在playbook中使用vars_files指定文件作为变量文件,好处就是其他的playbook也可以调

[[email protected] project1]# cat vars.yml
web_package: httpd
ftp_package: vsftpd

[[email protected] project1]# cat p2.yml
- hosts: webservers
  vars_files: ./vars.yml
  tasks:
    - name: Installed Packages
      yum:
        name:
          - "{{ web_package }}"
          - "{{ ftp_package }}"
        state: present

4.更好的方式是在ansible的项目目录中创建额外的两个变量目录,分别是host_vars和group_vars

group_vars目录下必须存放和inventory清单文件中定义的组名一致,如下
[[email protected] project1]# cat /etc/ansible/hosts
[webservers]
web01 ansible_ssh_host=172.16.1.7
web02 ansible_ssh_host=172.16.1.8

[[email protected] project1]# cat group_vars/webservers
web_package: httpd
ftp_package: vsftpd
注意:系统提供了特殊的组,all,也就说在group_vars目录下创建一个all文件,定义变量对所有的主机都生效

[[email protected] project1]# cat host_vars/web01
web_package: zlib-static
ftp_package: zmap

[[email protected] project1]# cat group_vars/webservers
web_package: httpd
ftp_package: vsftpd

[[email protected] project1]#  cat p4.yml
- hosts: webservers
#- hosts: otherservers
  tasks:
    - name: Installed Packages
      yum:
        name:
          - "{{ web_package }}"
          - "{{ ftp_package }}"
        state: present

[[email protected] project1]# ansible-playbook p4.yml 

PLAY [webservers] ********************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************
ok: [web02]
ok: [web01]

TASK [Installed Packages] ************************************************************************************************
ok: [web02]
changed: [web01]

PLAY RECAP ***************************************************************************************************************
web01                      : ok=2    changed=1    unreachable=0    failed=0
web02                      : ok=2    changed=0    unreachable=0    failed=0   

6.变量优先级测试
命令行变量--->play中的vars_files--->play中的vars变量-->host_vars中定义的变量--->group_vars/组--->group_vars/all

6.变量注册register

- hosts: webservers
  tasks:
    - name: Get Network Port Status
      shell: netstat -lntp
      register: net_port

    - name: OutPut Network Port Status
      debug:
        msg: "{{ net_port.stdout_lines }}"

7.变量也支持层级定义,使用"."可能会有问题,建议使用"[]"代替。

[[email protected] project1]# cat vars1.yml
rainbow:
  web:
    web_package: httpd
    db_package: mariadb

code:
  web:
    filename: code_web_filename

[[email protected] project1]# cat p8.yml
- hosts: webservers
  vars_files: ./vars1.yml
  tasks:
    - name: Install Package
      yum: name= "{{ rainbow[‘web‘][‘web_package‘] }}"

    - name: create filename
      file:
        path: /tmp/{{ code.web.filename }}
        state: touch
        

facts (setup模块)  重点!!!! 他可以获取被控端的主机的变量信息, 还可以通过变量的运算得到相应的值

  当使用facts 就需要使用template 这个模块

[[email protected] project1]# cat p10.yml
- hosts: webservers
  #gather_facts: no   关闭facts采集
  vars:
    - zabbix_server: 172.16.1.71
  tasks:
    - name: Copy Zabbix Agent Configure
      template: src=./zabbix_agentd.conf dest=/tmp/zabbix_agent.conf

playbook安装一个memcached : 这里就用到了变量的运算,获取对应的值的信息

[[email protected] project1]# cat memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ ansible_memtotal_mb //2 }}"
OPTIONS=""

[[email protected] project1]# cat p11.yml
- hosts: webservers
  tasks:
    - name: Installed Memcached
      yum: name=memcached state=present

    - name: Configure Memcached
      template: src=./memcached.j2 dest=/etc/sysconfig/memcached

    - name: Start Memcached
      service: name=memcached state=started enabled=yes

原文地址:https://www.cnblogs.com/gukai/p/10805251.html

时间: 2024-10-09 09:14:57

ansible之变量使用与playbook的设置(重点)的相关文章

自动化运维工具Ansible实战(六)playbook

(一)简述 playbook的模块与在ansible命令行下使用的模块有一些不同.这主要是因为在playbook中会使用到一些facts变量和一些通过setup模块从远程主机上获取到的变量.有些模块没法在命令行下运行,就是因为它们需要这些变量.而且即使那些可以在命令行下工作的模块也可以通过playbook的模块获取一些更高级的功能. (二)常用的模块 1,template模块 在实际应用中,我们的配置文件有些地方可能会根据远程主机的配置的不同而有稍许的不同,template可以使用变量来接收远程

自动化运维-Ansible (第三部:Playbook 介绍)

前言 之前有两篇文章分别讲了 Ansible 的部署.Ansible 的 模块使用,对 Ansible 有了最初的了解,这篇文章最主要是要介绍 Playbook.需要了解 Ansible 的部署请点击:Ansible 第一部 :部署需要了解 Ansible 的模块庆典节:Ansible 第二部:模块使用 Playbook 介绍 Playbook 是由一个或多个play 组成的列表,主要功能是将task 定义好的角色归并为一组进行统一管理,也就是通过task 调用 Asible 的模板将多个 pl

nginx+php 完成 kod云搭建(ansible使用变量)

nginx+php 完成 kod云搭建(ansible使用变量) [[email protected] project1]# vim kod.yml - hosts: web #1.卸载php低版本 #2.安装nginx1.12 php5.4 tasks: - name: Installed Nginx yum: name=nginx,php,php-fpm,php-pdo,php-gd,php-mbstring state=present #4.创建组和用户 www - name: Creat

自动化运维工具Ansible实战(五)playbook使用

(一)playbook简述 ansbile-playbook是一系统ansible命令的集合,其利用yaml 语言编写,运行过程,ansbile-playbook命令根据自上而下的顺序依次执行.同时,playbook开创了很多特性,它可以允许你传输某个命令的状态到后面的指令,如你可以从一台机器的文件中抓取内容并附为变量,然后在另一台机器中使用,这使得你可以实现一些复杂的部署机制,这是ansible命令无法实现的. playbook通过ansible-playbook命令使用,它的参数和ansib

Ansible学习记录五:PlayBook学习

0.介绍 Playbooks 是 Ansible 管理配置.部署应用和编排的语言,可以使用 Playbooks 来描述你想在远程主机执行的策略或者执行的一组步骤过程等 类似于一组任务集,定义好像项目,组织结构,配置文件等信息,通过task将所要做的事情一步一步的组织在一起就是完整的Playbook 官方Demo资料:https://github.com/ansible/ansible-examples Playbooks是采用YMAL语言结构,基础语法请参考:http://docs.ansibl

ansible自定义lookup_plugins插件实现playbook扩展

前沿: ansible的那几个插件都不错,现在咱们聊聊lookup plugins这个插件. Lookup_plugins主要是用来实现扩展playbook里面各种的字符串和变量的扩展.对于我个人来说,用途不是太大,但是看了下官方提供的lookup_plugins的扩展列表,还是有些想法的. 一开始使用lookup的时,遇到了一个问题,{{ lookup }}里面的数据没有处理,怎么也找不到解决的方法,最后问题在于ubuntu下的版本问题.貌似那个版本对lookup组建支持不好. 感谢沈灿的在旁

自动化运维工具Ansible实战(七)playbook循环

(一)简述 在使用ansible做自动化运维的时候,免不了的要重复执行某些操作,如:添加几个用户,创建几个MySQL用户并为之赋予权限,操作某个目录下所有文件等等.好在playbook支持循环语句,可以使得某些需求很容易而且很规范的实现. (二)常用的循环语句 1,with_items.with_items是playbooks中最基本也是最常用的循环语句: 语法: tasks: - name:Secure config files     file: path=/etc/{{ item }} m

ansible——组织变量

在ansible中有很多种定义变量的方式,我们没必要去关注太多,只需要掌握几个常用的变量定义和应用方式即可,这篇文章记录的是将变量定义在外部文件中,然后去引入这些外部文件中的变量. 引入保存了变量的文件有两种方式:include_vars和vars_files.此外,还可以在命令行中使用"-e"或"--extra-vars"选项来引入. 1.vars_files vars_files是一个play级别的指令,可用于在解析playbook的截断引入一个或多个保存了变量

__attribute__特性介绍以及变量和函数特定布局设置

ARM的MDK编译__attribute__介绍:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348bc/Ciafccai.html 比如实现flash特定布局,在ISP和IAP中使用: 1.变量定义或声明const unsigned char IAP[] __attribute__((section("flash.updatable"), used)) 2.链接文件设置:LR_ROM_UPDATE