流程控制优化

1.安装ansible
[root@m01 ~]# yum install -y ansible

2.修改ansible配置文件
[root@m01 ~]# vim /etc/ansible/ansible.cfg
host_key_checking = False             # 把前面的#注释去掉,跳过检查主机指纹
log_path = /var/log/ansible.log       # 把前面的#注释去掉,打开日志文件

3.创建秘钥对

4.发公钥

5.创建ansible_project目录,并在其目录下每个模块创建一个目录
[root@m01 ~]# mkdir -p ansible_project/{nfs,nginx,rsync,php,user,mariadb,sersync,wordpress,mount}

6.创建一个主yml文件
[root@m01 ~]# vim task.yml

7.给每个目录配置不同的配置文件
## 准备
[root@m01 user]# vim ready.yml
- name: Stop Firewalld Server
  service:
    name: firewalld
    state: stopped

- name: Disabled Selinux
  selinux:
    state: disabled

- name: Create www Group
  group:
    name: www
    gid: 666
    state: present
- name: Create www User
  user:
    name: www
    uid: 666
    group: ‘666‘
    shell: /sbin/nologin
    create_home: no
    state: present
    
## mariadb
[root@m01 mariadb]# vim create_data_user.yml
- name: create wordpress database
  mysql_db:
    name: wordpress
    state: present
    encoding: utf8
  when: ansible_hostname == ‘db01‘

- name: create wordpress user
  mysql_user:
    name: wordpress
    state: present
    priv: "wordpress.*:ALL"
    host: "%"
    passwd: "123"
  when: ansible_hostname == ‘db01‘

[root@m01 mariadb]# vim install_mariadb.yml 
- name: install mariadb
  yum:
    name:
      - mariadb-server
      - MySQL-python
    state: present
  when: ansible_hostname == ‘db01‘
    
[root@m01 mariadb]# vim start_mariadb.yml 
- name: start mariadb
  service:
    name: mariadb
    state: started
    enabled: yes
  when: ansible_hostname == ‘db01‘

## nfs
[root@m01 nfs]# vim nfs_conf.yml
- name: config nfs
  copy:
    content: ‘/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)‘
    dest: /etc/exports
  notify: restart nfs
  when: ansible_hostname == "nfs"

[root@m01 nfs]# vim create_data.yml
- name: create data
  file:
    path: /data
    owner: "{{  item.owner }}"
    group: "{{  item.group }}"
    mode: "{{ item.mode }}"
    state: directory
  with_items:
    - {owner: ‘www‘,group: ‘www‘,mode: ‘0600‘}
  when: ansible_hostname == "nfs"
 
[root@m01 nfs]# vim install_nfs.yml 
- name: install nfs
  yum:
    name: nfs-utils
    state: present
  when: ansible_hostname == "web01" or ansible_hostname == "web02" or ansible_hostname == "nfs" or ansible_hostname == "backup"

[root@m01 nfs]# vim start_nfs.yml 
- name: start nfs
  service:
    name: nfs-server
    state: started
    enabled: yes
  when: ansible_hostname == "nfs" or ansible_hostname == "backup" 
  
## nginx
[root@m01 nginx]# vim push_nginx_conf.yml 
- name: push nginx conf
  copy:
    src: "{{ item.src }}"
    dest: "{{ item.dest}}"
  with_items:
    - {src: "./nginx.conf",dest: "/etc/nginx/nginx.conf"}
    - {src: "./blog.conf",dest: "/etc/nginx/conf.d/blog.conf"}
  notify: reload nginx
  when: ansible_hostname is match ‘web*‘

[root@m01 nginx]# vim install_nginx.yml 
- name: Install nginx
  yum:
    name: nginx
    state: present
  when: ansible_hostname is match ‘web*‘
  
[root@m01 nginx]# vim start_nginx.yml 
- name: start nginx
  service:
    name: nginx
    state: started
    enabled: yes
  when: ansible_hostname is match ‘web*‘
  
## php
[root@m01 php]# vim push_php_conf.yml
- name: copy php conf
  copy:
    src: ./www.conf
    dest: /etc/php-fpm.d/www.conf
  when: ansible_hostname is match ‘web*‘

[root@m01 php]# vim install_php.yml 
- name: push php
  unarchive:
    src: "{{ item.src}}"
    dest: "{{ item.dest}}"
  with_items:
    - {src: "./php.tgz",dest: "/tmp"}
  when: ansible_hostname is match ‘web*‘
- name: install php
  shell: "rpm -Uvh /tmp/*.rpm"
  ignore_errors: yes
  when: ansible_hostname is match ‘web*‘

[root@m01 php]# vim start_php.yml 
- name: start php
  service:
    name: php-fpm
    state: started
    enabled: yes
  when: ansible_hostname is match ‘web*‘

## rsync
[root@m01 rsync]# vim install_rsync.yml 
- name: install rsync
  yum:
    name: rsync
    state: present
  when: ansible_hostname == ‘backup‘

[root@m01 rsync]# vim push_rsync.yml 
- name: configure rsync server
  copy:
    src: ./rsyncd.conf
    dest: /etc/rsyncd.conf
  notify: restart rsync
  when: ansible_hostname == ‘backup‘

- name: create backup
  file:
    path: "{{ item.path }}"
    owner: "{{ item.owner }}"
    group: "{{ item.group }}"
    state: directory
  with_items:
    - {path: "/backup",owner: "www",group: "www"}
  when: ansible_hostname == ‘backup‘

- name: copy rsync passwd
  copy:
    content: ‘rsync_backup:123‘
    dest: /etc/rsyncd.passwd
    mode: "0600"
  when: ansible_hostname == ‘backup‘
  
[root@m01 rsync]# vim start_rsync.yml 
- name: start rsync
  service:
    name: rsyncd
    state: started
    enadled: yes
  when: ansible_hostname == ‘backup‘
  
## sersync
[root@m01 sersync]# vim push_sersync_conf.yml
- name: unarchive sersyncd.tar.gz
  unarchive:
    src: ./sersyncd.tar.gz
    dest: /root
  when: ansible_hostname == ‘nfs‘

- name: copy service
  copy:
    src: ./sersyncd.service
    dest: /usr/lib/systemd/system/sersyncd.service
  when: ansible_hostname == ‘nfs‘

[root@m01 sersync]# vim start_sersync.yml
- name: start sersync
  service:
    name: sersyncd
    state: started
    enabled: yes
  when: ansible_hostname == ‘nfs‘
  
## wordpress
[root@m01 wordpress]# vim wordpress.yml 
- name: Create code
  file:
    path: /code
    owner: "{{ item.owner }}"
    group: "{{ item.group }}"
    mode: "{{ item.mode }}"
    state: directory
  with_items:
    - {owner: "www",group: "www",mode: "0755"}
  when: ansible_hostname is match ‘web*‘

- name: unarchive wordpress
  unarchive:
    src: ./latest.tar.gz
    dest: /code
    owner: www
    group: www
  when: ansible_hostname is match ‘web*‘

- name: mkdir uploads
  file:
    path: /code/wordpress/wp-content/uploads
    state: directory
    owner: www
    group: www
    mode: 0755
  when: ansible_hostname is match ‘web*‘

- name: chmod /var/lib/nginx
  file:
    path: /var/lib/nginx
    owner: www
    group: www
    recurse: yes
  when: ansible_hostname is match ‘web*‘

## 挂载
[root@m01 mount]# vim mount.yml
- name: mount
  mount:
    path: /code/wordpress/wp-content/uploads
    src: 172.16.1.31:/data
    fstype: nfs
    state: mounted
  when: ansible_hostname is match ‘web*‘

8.创建入口文件
[root@m01 ansible_project]# vim task.yml
- hosts: all
  tasks:
    - include_tasks: user/ready.yml
    - include_tasks: mariadb/install_mariadb.yml 
    - include_tasks: mariadb/start_mariadb.yml
    - include_tasks: mariadb/create_data_user.yml
    - include_tasks: nfs/install_nfs.yml 
    - include_tasks: nfs/nfs_conf.yml
    - include_tasks: nfs/create_data.yml
    - include_tasks: nfs/start_nfs.yml
    - include_tasks: nginx/install_nginx.yml 
    - include_tasks: nginx/push_nginx_conf.yml
    - include_tasks: nginx/start_nginx.yml 
    - include_tasks: php/install_php.yml
    - include_tasks: php/push_php_conf.yml
    - include_tasks: php/start_php.yml 
    - include_tasks: rsync/install_rsync.yml 
    - include_tasks: rsync/push_rsync.yml 
    - include_tasks: rsync/start_rsync.yml 
    - include_tasks: sersync/push_sersync_conf.yml
    - include_tasks: sersync/start_sersync.yml
    - include_tasks: wordpress/wordpress.yml 
    - include_tasks: mount/ mount.yml

流程控制优化

上一篇:Gitee应用


下一篇:数据结构之树