首页 > 系统相关 >Linux架构28 ansible流程控制, 条件判断(主机,是否安装,系统版本), 循环语句(安装启动,字典定义变量)

Linux架构28 ansible流程控制, 条件判断(主机,是否安装,系统版本), 循环语句(安装启动,字典定义变量)

时间:2024-04-09 14:57:13浏览次数:27  
标签:www shell name when 28 item ansible 安装

Ansible 流程控制

一、playbook条件语句

不管是shell还是各大变成语言中,流程控制,条件判断这些都是必不可少的,在我们使用Ansible的过程中,条件判断的使用频率极其高。
例如:
1.我们使用不同的系统的时候,可以通过判断系统来对软件包进行安装。
2.在nfs和rsync安装过程中,客户端服务器不需要推送配置文件,之前我们都是写多个play,会影响效率。
3.我们在源码安装nginx的时候,执行第二遍就无法执行了,此时我们就可以进行判断是否安装过。

1.稍微修改lnmp.yml

#修改部分,使用自己配置好的博客站点目录
- name: Install Wordpress Code
  unarchive:
    src: /root/blog.tar.gz
    dest: /

#添加数据库导入部分
- name: Post wordpress.sql
  copy:
    src: /root/db01/root/wordpress.sql
    dest: /tmp/
    
- name: Import wordpress.sql
  mysql_db:
    state: import
    name: wordpress
    target: /tmp/wordpress.sql

2.判断主机

- name: Create www Group    #如果主机名等于web01,执行下方命令
  group:
    name: www
    gid: 666
    state: present
  when: ansible_fqdn == "web01"    #判断语句中变量不需要加大括号和引号,因为不需要打印
  #when: ansible_fqdn is match "web*"    #当主机名匹配web*,用于多台web
  #when: ansible_fqdn != "db01"    #当主机名不等于db01
  
- name: Create www User    #如果主机名等于web01或web02执行下方命令
  user:
    name: www
    gid: 666
    group: www
    create_home: false
    shell: /sbin/nologin
    state: present
  when: (ansible_fqdn == "web01") or (ansible_fqdn == "web02")    # ()加or表示多个

3.如何判断服务是否安装

通过rpm -qa|grep php 命令返回的$?来判断是否已经安装,0表示安装,1表示未安装

- hosts: web01
  tasks:
    #执行shell,判断服务是否安装,并把结果注册一个变量
    - name: Get PHP Install Status
      shell: "rpm -qa | grep php"
      ignore_errors: yes    #获取状态,加上忽略错误(否则非0报错,不往下执行)
      register: get_php_install_status

    #调用变量,查看内容,如果知道使用什么值判断可以不写
    - name: Get get_php_install_status
      debug:    #输出
        msg: "{{ get_php_install_status }}"

    #调用变量结果,rc值不等于0时执行安装命令
    - name: Install PHP Server
      shell: "yum localinstall -y /tmp/*.rpm"
      when: get_php_install_status.rc != 0    #rc就是$?返回

4.判断系统

[root@m01 base]# vim xitong.yml
- hosts: web01
  tasks:
    - name: Install CentOS apache
      shell: "yum install -y httpd"
      when: ansible_distribution == "CentOS"
      
    - name: Install Ubuntu apache
      shell: "apt-get apache"
      when: ansible_distribution == "Ubuntu"

5.判断系统版本

[root@m01 base]# vim start.yml
- hosts: web01
  tasks:
    - name: Start CentOS6 apache
      shell: "/etc/init.d/httpd start"
      when: (ansible_distribution == "CentOS") and (ansible_distribution_major_version == "6")
      
    - name: Install Ubuntu apache
      shell: "apt-get apache"
      when: (ansible_distribution == "CentOS") and (ansible_distribution_major_version == "7")
      
#指定多个条件,除了用and,还可以使用列表形式
- hosts: web01
  tasks:
    - name: Start CentOS6 apache
      shell: "/etc/init.d/httpd start"
      when:
        - ansible_distribution == "CentOS"
        - ansible_distribution_major_version == "6"
      
    - name: Install Ubuntu apache
      shell: "apt-get apache"
      when:
        - ansible_distribution == "CentOS"
        - ansible_distribution_major_version == "7"

6.可以通过提示决定是否执行

#当企业里有很多版本的系统时,先判断版本是否支持服务再进行操作
tasks:
  - shell: echo "only on Red Hat 6, derivatives, and later"
    when: ansible_facts['os_family'] == "RedHat" and ansible_facts['lsb']['major_release']|int >= 7

 

二、playbook循环语句

1.定义变量循环安装

- hosts: db01
  tasks:
    - name: Install Mariadb Server
      yum:
        name: "{{ package }}"
        state: present
      vars:
        package:
          - mariadb-server
          - MySQL-python

2.定义变量启动服务

#错误配置方法
    - name: Start PHP and Nginx Server
      systemd:
        name: "{{ server }}"
        state: started
        enabled: yes
      vars:    #同时执行,当成一个字符串
        server:
          - php-fpm
          - nginx
          
#正确做法
    - name: Start PHP and Nginx Server
      systemd:
        name: "{{ item }}"    #固定写法
        state: started
        enabled: yes
      with_items:    #固定写法,设置变量,一个一个执行
        - php-fpm
        - nginx

 

3.字典定义变量

    #创建用户组
    - name: Create www lhd test Group
      group:
        name: "{{ item.name }}"
        gid: "{{ item.gid }}"
        state: present
      with_items:
        - { name: "www", gid: "666"}
        - { name: "lhd", gid: "777"}
        - { name: "test", gid: "888"}
    
    #创建多个用户
    - name: Create www lhd test User
      user:
        name: "{{ item.name }}"
        uid: "{{ item.uid }}"
        group: "{{ item.group }}"
        create_home: "{{ item.create_home }}"
        shell: "{{ item.shell }}"
        state: present
      with_items:
        - { name: "www", uid: "666", group: "www", create_home: "false", shell: "/sbin/nologin"}
        - { name: "lhd", uid: "777", group: "lhd", create_home: "true", shell: "/sbin/nologin"}
        - { name: "test", uid: "888", group: "test", create_home: "false", shell: "/bin/bash"}
        
    #创建多个目录(赋权,没有目录就会创建)
    - name: Chown Code Dir
      file:
        path: "{{ item.path }}"
        state: directory
        owner: "{{ item.user }}"
        group: "{{ item.user }}"
        recurse: yes
      with_items:
        - { path: "/code", user: "www" }
        - { path: "/data", user: "lhd" }

4.利用字典定义方式优化lnmp.yml

    - name: Config Nginx Server
      copy:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
      with_items:
        - { src: "/root/nginx.conf", dest: "/etc/nginx/" }
        - { src: "/root/wordpress.conf", dest: "/etc/nginx/conf.d/" }


    - name: Tar PHP and Wordpress Package
      unarchive:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
      with_items:
        - { src: "/root/php.tar.gz", dest: "/tmp/" }
        - { src: "/root/blog.tar.gz", dest: "/" }      

 

标签:www,shell,name,when,28,item,ansible,安装
From: https://www.cnblogs.com/ludingchao/p/18123946

相关文章

  • CommMonitor 如下载安装串口监控精灵软件?
    1、CEIWEICommMonitor串口监控精灵软件下载方式官网:http://www.ceiwei.com/mt/软件简介:http://www.ceiwei.com/mt/download/showdownload.php?id=21、CEIWEICommMonitor串口监控精灵软件下载方式华军网下载:https://www.onlinedown.net/soft/98731.htm非凡......
  • docker上安装上常用软件-mysql
       操作步骤: 1.下载指定版本mysql:dockerpullmusql:5.7 2.启动mysql 3.进入命令行交互模式启动 4.mysql命令执行: 插入中文时,插入失败:需要手动修改mysqldb的编码为utf-8:docker里查看mysql容器实例的编码:SHOWVARIABLESLIKE'CHARACTER%'然后修改d......
  • Typora安装教程
    ......
  • 【攻防实操系列+域渗透】--安装域控(Windows-Server-2008-R2-x64)教程
    1.创建windows2008R2虚拟机选完全安装。第一个是标准版功能很少。不建议选。另外两个任意选。我选的是Enterprse企业版。❗❗❗注意:需要提前了解域控的密码复杂度规则。密码一定要自己记住!!!密码①可以看到界面非常小,不方便操作。❗❗❗需要安装vm......
  • Centos 7 yum 安装nginx
    要在Centos7上使用yum安装nginx,您可以按照以下步骤操作:打开终端或SSH连接到您的Centos7服务器。确保您具有sudo权限或root权限。运行以下命令更新yum包管理器的软件包索引:sudoyumupdate运行以下命令安装nginx:sudoyuminstallnginx确认安装过程中会提示您是否......
  • 安装docker
    安装podman-docker命令行输入docker,系统自动提示安装podman-docker,然后输入若干次y即可#dockerbash:docker:commandnotfound...Installpackage'podman-docker'toprovidecommand'docker'?[N/y]y安装依赖#dnfinstall-ydevice-mapper-persistent-datalvm2#dnfc......
  • Kibana的安装使用
    目录一、Kibana介绍二、下载Kibana三、修改配置文件四、启动五、查看5.1浏览器访问5.2开发工具一、Kibana介绍Kibana是一款开源的数据可视化和实时分析的工具平台,它是ElasticStack成员之一,设计用于和Elasticsearch协作。可以使用Kibana对Elasticsearch索引中的数......
  • linux环境安装——redis安装复习
      redis版本:redis-7.0.5.tar.gz  Sessionstopped-Press<Return>toexittab-PressRtorestartsession-PressStosaveterminaloutputtofile┌─────────────────────────────────────────......
  • VMware下CentOS7.6安装openGauss
    VMware下CentOS7.6(7.9)安装openGausscentos安装这里我使用的是vmwareworkstationPro15虽然官网了解了一下openGauss最适合的centos版本为centos7.6但是因为centos7.6版本已经停更,所以我这里下载的是7.9版本的镜像文件下载完成后打开vmware,创建新的虚拟机......
  • Peakfit | 光谱分析拟合软件功能介绍&安装教程
    PeakFit当前新版本为V4.12SystatPeakFit是一款功能强大的数据峰值拟合软件,通过该软件,用户可以快速的将数据导入软件进行分析,为用户拟合出各项数据的峰值,该软件支持大多数数据文件格式导入您可以利用软件中的数据扫面功能将该分析数据运用在软件中,当您创建一个新的峰值时,可以将计......