ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Ansible流程控制

2022-06-30 19:04:16  阅读:213  来源: 互联网

标签:控制 name dest when 流程 hostname ansible nginx Ansible


Ansible流程控制

1.条件语句(判断)

	在各大编程语言中,流程控制、条件判断都是必不可少的,在使用Ansible的过程中,条件判断使用频率高。条件判断通俗点讲就是当满足什么条件时就执行哪些语句

2.ansible获取主机名

ansible_hostname:只显示第一个‘.’前面的名字
[root@m01 ~]# ansible web01 -m setup -a 'filter=ansible_hostname'
        "ansible_hostname": "locahost"
ansible_fqdn:获取完整的主机名
[root@m01 ~]# ansible web01 -m setup -a 'filter=ansible_fqdn'
        "ansible_fqdn": "locahost.local"

3.条件判断语法

tasks: 
  - name: "shut down Debian flavored systems" 
  	command: /sbin/shutdown -t now 
  	when: ansible_facts['os_family'] == "Debian"
# 或

tasks: 
  - name: "shut down Ubuntu flavored systems" 
    command: apt-get install apache2 
    when: ansible_os_family == "Ubuntu"

案例

通过判断系统对软件包进行安装

- hosts: rsync
  tasks:
    - name: "shut down RedHat flavored systems"
      command: yum install -y unzip
      when:  ansible_facts['os_family'] == "RedHat"

通过判断主机来安装服务和推送文件

- hosts: all
  tasks:
    - name: 安装rsync和nfs服务
      yum: 
        name: 
          - rsync
          - nfs-utils
      when: ansible_hostname == 'backup' or ansible_hostname == 'nfs'
    - name: 推送rsync文件
      template: 
        src: /root/wordpress_ansible/rsync/rsyncd.conf
        dest: /etc/
      when: ansible_hostname == 'backup'
## 判断中的或与非
# and:与
# or:或
# !:非

判断是否安装nginx包

- hosts: web_group
  tasks: 
  - name: 查看nginx目录
    shell: "ls -l /etc/nginx"
    ## 通过register将命令执行结果保存到变量,然后通过when语句进行判断
    register: ng   
  - name: 判断是否安装nginx
    shell: "cd /opt && rpm-Uvh *.rpm"
    when: ng.rc != 0
    
# 模糊匹配
- hosts: all
  tasks: 
  - name: 查看nginx目录
    shell: "ls -l /etc/nginx"
    when: ansible_hostname is match 'web*'

playbook循环语句

列表循环

# 启动多个服务
- hosts: all
  tasks: 
  - name: 重新启动nginx和php
    service: 
      name: "{{ item }}"
      state: restarted
    with_items: 
      - nginx
      - php-fpm
    when: ansible_hostname is match 'web*'

字典循环

- hosts: all
  tasks: 
  - name: 重新启动nginx和php
    service: 
      name: "{{ item }}"
      state: restarted
    with_items: 
      - nginx
      - php-fpm
    when: ansible_hostname is match 'web*'
  - name: nginx and php Profile
    template: 
      src: "{{ item.src }}"
      dest: "{{ item.dest }}"
    with_items: 
      - {src: "/root/wordpress_ansible/nginx_php/nginx.conf",dest: "/etc/nginx/"}
      - {src: "/root/wordpress_ansible/nginx_php/blog.jl.com.conf",dest: "/etc/nginx/conf.d"}
    when: ansible_hostname is match 'web*'

优化剧本

- hosts: all
  tasks:
  - name: Create group
    group:
      name: "{{ user_group }}"
      gid: "{{ id }}"
  - name: cerate user
    user: 
      name: "{{ user_group }}"
      uid: "{{ id }}"
      group: "{{ id }}"
      shell: /sbin/nologin
      create_home: no
  - name: Install rsync
    yum:
      name: nfs-utils,rsync
      state: present
  - name: xxx
    copy: 
      src: /root/wordpress_ansible/rsync/rsyncd.conf
      dest: /etc/
    when: ansible_hostname == 'backup'
  - name: Creating a password file
    copy:
      content: rsync_backup:123
      dest: /etc/rsync.passwd
      mode: 0600
    when: ansible_hostname == 'backup'
  - name: create backup directory
    file: 
      path: /backup
      owner: "{{ user_group }}"
      group: "{{ user_group }}"
      state: directory
    when: ansible_hostname == 'backup'
  - name: start rsync
    service: 
      name: rsyncd
      state: started
      enabled: yes
    when: ansible_hostname == 'backup'

  - name: Creating a password file
    copy: 
      content: 123
      dest: /etc/rsync.passwd
      mode: 0600
    when: ansible_hostname == 'nfs'      

  - name: nfs Profile
    copy:
      content: /{{ nfs_dir }} 172.16.1.0/24(rw,sync,anonuid="{{ id }}",anongid="{{ id }},all_squash")
      dest: /etc/exports
    when: ansible_hostname == 'nfs' or ansible_hostname == 'backup'
  
  - name: create directory
    file: 
      path: /{{ nfs_dir }}
      owner: "{{ user_group }}"
      group: "{{ user_group }}"
      state: directory
    when: ansible_hostname == 'nfs' or ansible_hostname == 'backup'
  - name: start nfs
    service: 
      name: nfs
      state: started
      enabled: yes
    when: ansible_hostname == 'nfs' or ansible_hostname == 'backup'
  - name: upload
    unarchive: 
      src: /root/wordpress_ansible/nfs/2022.tgz
      dest: /data
      owner: www
      group: www
    when: ansible_hostname == 'nfs' or ansible_hostname == 'backup'

  - name: php nginx Install
    unarchive: 
      src: /root/wordpress_ansible/nginx_php/nginx_php.tgz
      dest: /opt/
    when: ansible_hostname is match 'web*'
- hosts: web_group
  tasks:
  - name: php nginx Install
    shell: "yum localinstall -y /opt/*.rpm"

  - name: nginx Profile
    template: 
      src: "{{ item.src }}"
      dest: "{{ item.dest }}"
    with_items: 
      - {src: "/root/wordpress_ansible/nginx_php/nginx.conf",dest: "/etc/nginx/"}
      - {src: "/root/wordpress_ansible/nginx_php/blog.jl.com.conf",dest: "/etc/nginx/conf.d/"}
  - name: php Profile
    copy: 
      src: /root/wordpress_ansible/nginx_php/www.conf
      dest: /etc/php-fpm.d/

  - name: create directory
    file: 
      path: /{{ web_dir }}
      owner: "{{ user_group }}"
      group: "{{ user_group }}"
      state: directory
  - name: download wordpress
    unarchive: 
      src: /root/wordpress_ansible/wordpress/wordpress.tgz
      dest: /{{ web_dir }}
      owner: "{{ user_group }}"
      group: "{{ user_group }}"
  - name: start nginx php
    service: 
      name: "{{ item }}"
      state: started
      enabled: yes
    with_items: 
      - nginx
      - php-fpm
  - name: nfs
    mount: 
      path: /{{ web_dir }}/wordpress/wp-content/uploads
      src: 172.16.1.31:/data
      fstype: nfs
      state: mounted

- hosts: db01
  tasks:
  - name: 推送mysql文件
    copy: 
      src: "{{ item.src }}"
      dest: "{{ item.dest }}"
    with_items: 
      - {src: "/root/wordpress_ansible/mariadb/my.cnf",dest: "/etc/"}
      - {src: "/root/wordpress_ansible/mariadb/wp_ansible.sql",dest: "/opt/"}
    when: ansible_hostname == 'db01'

  - name: mariadb Install
    yum: 
      name: mariadb-server,MySQL-python
    when: ansible_hostname == 'db01'
  - name: start mariadb
    service:
      name: mariadb
      state: started
      enabled: True
    when: ansible_hostname == 'db01'
  - name: create a batabase
    mysql_db: 
      name: wordpress
      state: present
    when: ansible_hostname == 'db01'
  - name: grant mysql user
    mysql_user: 
      name: wp_user
      password: 123
      host: "172.16.1.%"
      priv: "wordpress.*:ALL"
      state: present
    when: ansible_hostname == 'db01'
  - name: import mysql
    mysql_db: 
      name: wordpress
      target: /opt/wp_ansible.sql
      state: import
    when: ansible_hostname == 'db01'

标签:控制,name,dest,when,流程,hostname,ansible,nginx,Ansible
来源: https://www.cnblogs.com/zlyj/p/16428069.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有