Ansible 使用角色部署

1、实现 Httpd 角色

# 创建角色相关的目录
[root@ansible roles]# ansible-galaxy role init httpd
- Role httpd was created successfully
[root@ansible roles]# ll
total 0
drwxr-xr-x 10 root root 154 Dec 15 08:52 httpd
[root@ansible roles]# tree
.
└── httpd
    ├── defaults
    │   └── main.yml
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── README.md
    ├── tasks
    │   └── main.yml
    ├── templates
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars
        └── main.yml

9 directories, 8 files
# main.yml 是task的入口文件
[root@ansible httpd]# vim tasks/main.yml

---
# tasks file for httpd

- include: group.yml
- include: user.yml
- include: install.yml
- include: config.yml
- include: index.yml
- include: service.yml
[root@ansible httpd]# vim tasks/group.yml

- name: create apache group
  group:
    name: apache
    system: yes
    gid: 80
[root@ansible httpd]# vim tasks/user.yml

- name: create apache user
  user:
    name: apache
    system: yes
    shell: /sbin/nologin
    home: /var/www/
    uid: 80
    group: apache
[root@ansible httpd]# vim tasks/install.yml

- name: install httpd package
  yum:
    name: httpd
# 文件是放在files目录下,但src的路径无需写files目录名
[root@ansible httpd]# vim tasks/config.yml

- name: config file
  copy:
    src: httpd.conf
    dest: /etc/httpd/conf/
    backup: yes
  notify: restart
[root@ansible httpd]# vim tasks/index.yml

- name: index.html
  copy:
    src: index.html
    dest: /var/www/html/
[root@ansible httpd]# vim tasks/service.yml

- name: start service
  service:
    name: httpd
    state: started
    enabled: yes
[root@ansible httpd]# vim handlers/main.yml

---
# handlers file for httpd

- name: restart
  service:
    name: httpd
    state: restarted
# 在files目录下准备两个文件
[root@ansible httpd]# vim files/index.html

Hello Ansible Roles
# 准备一份httpd配置文件
[root@ansible ansible]# cp /etc/httpd/conf/httpd.conf /root/roles/httpd/files/
# 查看httpd角色下文件
[root@ansible roles]# tree
.
└── httpd
    ├── defaults
    │   └── main.yml
    ├── files
    │   ├── httpd.conf
    │   └── index.html
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── README.md
    ├── tasks
    │   ├── config.yml
    │   ├── group.yml
    │   ├── index.yml
    │   ├── install.yml
    │   ├── main.yml
    │   ├── service.yml
    │   └── user.yml
    ├── templates
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars
        └── main.yml
# 在playbook中调用角色
[root@ansible ~]# vim httpd_role.yml

---

# httpd role
 - hosts: webservers
   remote_user: root

   roles:
       - httpd
[root@ansible ~]# ansible-playbook httpd_role.yml

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

TASK [Gathering Facts] ************************************************************************************************************
ok: [192.168.1.13]
ok: [192.168.1.12]

TASK [httpd : create apache group] ************************************************************************************************
changed: [192.168.1.12]
changed: [192.168.1.13]

TASK [httpd : create apache user] *************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]

TASK [install httpd package] ******************************************************************************************************
changed: [192.168.1.12]
changed: [192.168.1.13]

TASK [httpd : config file] ********************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]

TASK [httpd : index.html] *********************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]

TASK [httpd : start service] ******************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]

RUNNING HANDLER [httpd : restart] *************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]

PLAY RECAP ************************************************************************************************************************
192.168.1.12               : ok=8    changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.1.13               : ok=8    changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
# 验证
[root@ansible ~]# curl http://192.168.1.12:8080
Hello Ansible Roles
[root@ansible ~]# curl http://192.168.1.13:8080
Hello Ansible Roles

2、实现 Nginx 角色

[root@ansible roles]# ansible-galaxy role init nginx
- Role nginx was created successfully

[root@ansible roles]# tree nginx
nginx
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml
[root@ansible nginx]# vim tasks/main.yml

---
# tasks file for nginx

- include: install.yml
- include: config.yml
- include: index.yml
- include: service.yml
[root@ansible nginx]# vim tasks/install.yml

- name: install
  yum:
    name: nginx
[root@ansible nginx]# vim tasks/config.yml

- name: config file for centos7
  template:
    src: nginx7.conf.j2
    dest: /etc/nginx/nginx.conf
  when: ansible_distribution_major_version=="7"
  notify: restart
- name: config file for centos8
  template:
    src: nginx8.conf.j2
    dest: /etc/nginx/nginx.conf
  when: ansible_distribution_major_version=="8"
  notify: restart
# 跨角色调用文件
[root@ansible nginx]# vim tasks/index.yml

- name: index.html
  copy:
    src: roles/httpd/files/index.html
    dest: /usr/share/nginx/html/
[root@ansible nginx]# vim tasks/service.yml

- name: start service
  service:
    name: nginx
    state: started
    enabled: yes
# 创建handler文件
[root@ansible nginx]# vim handlers/main.yml

---
# handlers file for nginx

- name: restart
  service:
    name: nginx
    state: restarted
# 创建两个template文件
[root@ansible nginx]# vim templates/nginx7.conf.j2
...省略...
user {{user}};
worker_processes {{ansible_processor_vcpus+3}};   #修改此行
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
...省略...

[root@ansible nginx]# vim templates/nginx8.conf.j2
...省略...
user {{user}};
worker_processes {{ansible_processor_vcpus**3}};  #修改此行
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
...省略...
# 创建变量文件
[root@ansible nginx]# vim vars/main.yml

---
# vars file for nginx

user: daemon
[root@ansible nginx]# tree
.
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   ├── config.yml
│   ├── index.yml
│   ├── install.yml
│   ├── main.yml
│   └── service.yml
├── templates
│   ├── nginx7.conf.j2
│   └── nginx8.conf.j2
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml
# 在playbook中调用角色
[root@ansible ~]# vim nginx_role.yml

---
#nginx role
- hosts: webservers

  roles:
    - role: nginx
[root@ansible ~]# ansible-playbook nginx_role.yml

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

TASK [Gathering Facts] ************************************************************************************************************
ok: [192.168.1.13]
ok: [192.168.1.12]

TASK [nginx : install] ************************************************************************************************************
changed: [192.168.1.12]
changed: [192.168.1.13]

TASK [nginx : config file for centos7] ********************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]

TASK [nginx : config file for centos8] ********************************************************************************************
skipping: [192.168.1.13]
skipping: [192.168.1.12]

TASK [nginx : index.html] *********************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]

TASK [nginx : start service] ******************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]

RUNNING HANDLER [nginx : restart] *************************************************************************************************
changed: [192.168.1.13]
changed: [192.168.1.12]

PLAY RECAP ************************************************************************************************************************
192.168.1.12               : ok=6    changed=5    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0
192.168.1.13               : ok=6    changed=5    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0
[root@ansible ~]# curl http://192.168.1.12
Hello Ansible Roles
[root@ansible ~]# curl http://192.168.1.13
Hello Ansible Roles

3、实现 Memcached 角色

[root@ansible roles]# ansible-galaxy role init memcached
- Role memcached was created successfully
[root@ansible roles]# tree memcached
memcached
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files
[root@ansible memcached]# vim tasks/main.yml

---
# tasks file for memcached

- include: install.yml
- include: config.yml
- include: service.yml
[root@ansible memcached]# vim tasks/install.yml

- name: install
  yum:
    name: memcached
[root@ansible memcached]# vim tasks/config.yml

- name: config file
  template:
    src: memcached.j2
    dest: /etc/sysconfig/memcached
[root@ansible memcached]# vim tasks/service.yml

- name: service
  service:
    name: memcached
    state: started
    enabled: yes
[root@ansible memcached]# vim templates/memcached.j2

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ansible_memtotal_mb//4}}"
OPTIONS=""
[root@ansible memcached]# tree
.
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   ├── config.yml
│   ├── install.yml
│   ├── main.yml
│   └── service.yml
├── templates
│   └── memcached.j2
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml
[root@ansible ~]# vim memcached_role.yml

---
- hosts: dbservers

  roles:
    - role: memcached
[root@ansible ~]# ansible-playbook memcached_role.yml

PLAY [dbservers] ******************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************
ok: [192.168.1.21]

TASK [memcached : install] ********************************************************************************************************
changed: [192.168.1.21]

TASK [memcached : config file] ****************************************************************************************************
changed: [192.168.1.21]

TASK [memcached : service] ********************************************************************************************************
changed: [192.168.1.21]

PLAY RECAP ************************************************************************************************************************
192.168.1.21               : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
[root@mem ~]# ps -ef | grep memcache
memcach+  27582      1  0 09:50 ?        00:00:00 /usr/bin/memcached -u memcached -p 11211 -m 942 -c 1024
root      27605   1441  0 09:51 pts/0    00:00:00 grep --color=auto memcache

4、实现 MySQL5.7 或 8.0 的角色

[root@ansible roles]# ansible-galaxy role init mysql8
- Role mysql8 was created successfully
[root@ansible roles]# tree mysql8
mysql8
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files
[root@ansible mysql8]# vim files/my.cnf

[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid

[client]
socket=/data/mysql/mysql.sock
[root@ansible mysql8]# vim vars/main.yml

---
# vars file for mysql8

mysql_version: 8.0.28
mysql_file: mysql-{{mysql_version}}-linux-glibc2.12-x86_64.tar.xz
mysql_root_password: 123456
[root@ansible mysql8]# vim tasks/main.yml

---
# tasks file for mysql8

- include: install.yml
- include: group.yml
- include: user.yml
- include: unarchive.yml
- include: linkfile.yml
- include: data.yml
- include: config.yml
- include: script.yml
- include: path.yml
- include: service.yml
- include: secure.yml
[root@ansible mysql8]# vim tasks/install.yml

- name: install packages
  yum:
    name:
      - libaio
      - numactl-libs

- name: create directory
  file:
    path: /data/mysql
    state: directory
[root@ansible mysql8]# vim tasks/group.yml

- name: create mysql group
  group:
    name: mysql
    gid: 306
[root@ansible mysql8]# vim tasks/user.yml

- name: create mysql user
  user:
    name: mysql
    uid: 306
    group: mysql
    shell: /sbin/nologin
    system: yes
    create_home: no
    home: /data/mysql
[root@ansible mysql8]# vim tasks/unarchive.yml

- name: copy tar to remote host and file mode
  unarchive:
    src: "{{ mysql_file }}"
    dest: /usr/local/
    owner: root
    group: root
[root@ansible mysql8]# vim tasks/linkfile.yml

- name: create linkfile /usr/local/mysql
  file:
    src: /usr/local/mysql-{{ mysql_version }}-linux-glibc2.12-x86_64
    dest: /usr/local/mysql
    state: link
[root@ansible mysql8]# vim tasks/config.yml

- name: config my.cnf
  copy:
    src: my.cnf
    dest: /etc/my.cnf
[root@ansible mysql8]# vim  tasks/script.yml

- name: service script
  shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@ansible mysql8]# vim  tasks/path.yml

- name: PATH variable
  copy:
    content: 'PATH=/usr/local/mysql/bin:$PATH'
    dest: /etc/profile.d/mysql.sh
[root@ansible mysql8]# vim tasks/service.yml

- name: enable service
  shell: chkconfig --add mysqld;/etc/init.d/mysqld start
  tags: service
[root@ansible mysql8]# vim  tasks/secure.yml

- name: change password
  shell: /usr/local/mysql/bin/mysqladmin  -uroot password {{mysql_root_password}}
[root@ansible ~]# vim mysql8_role.yml

---
- hosts: dbservers
  remote_user: root
  gather_facts: no
  roles:
    - mysql8
[root@ansible ~]# ansible-playbook mysql8_role.yml

PLAY [dbservers] ******************************************************************************************************************

TASK [mysql8 : install packages] **************************************************************************************************
ok: [192.168.1.21]

TASK [mysql8 : create directory] **************************************************************************************************
changed: [192.168.1.21]

TASK [mysql8 : create mysql group] ************************************************************************************************
changed: [192.168.1.21]

TASK [mysql8 : create mysql user] *************************************************************************************************
changed: [192.168.1.21]

TASK [mysql8 : copy tar to remote host and file mode] *****************************************************************************
changed: [192.168.1.21]

TASK [mysql8 : create linkfile /usr/local/mysql] **********************************************************************************
changed: [192.168.1.21]

TASK [mysql8 : data dir] **********************************************************************************************************
changed: [192.168.1.21]

TASK [mysql8 : config my.cnf] *****************************************************************************************************
changed: [192.168.1.21]

TASK [mysql8 : service script] ****************************************************************************************************
changed: [192.168.1.21]

TASK [mysql8 : PATH variable] *****************************************************************************************************
changed: [192.168.1.21]

TASK [mysql8 : enable service] ****************************************************************************************************
changed: [192.168.1.21]

TASK [mysql8 : change password] ***************************************************************************************************
changed: [192.168.1.21]

PLAY RECAP ************************************************************************************************************************
192.168.1.21               : ok=12   changed=11   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

5、实现 MySQL 5.6 的角色

[root@ansible roles]# ansible-galaxy role init mysql5.6
- Role mysql5.6 was created successfully
[root@ansible roles]# tree mysql5.6/
mysql5.6/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files
[root@ansible mysql5.6]# vim files/my.cnf

[mysqld]
socket=/tmp/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
innodb_file_per_table=1
log-bin
pid-file=/data/mysql/mysqld.pid

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld_safe]
log-error=/var/log/mysqld.log
[root@ansible mysql5.6]# vim files/secure_mysql.sh

#!/bin/bash
/usr/local/mysql/bin/mysql_secure_installation <<EOF

y
123456
123456
y
y
y
y
EOF
[root@ansible mysql5.6]# ll files/
total 333608
-rw-r--r-- 1 root root       232 Dec 15 13:45 my.cnf
-rw-r--r-- 1 root root 341603885 Nov 15 09:21 mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
-rwxr-xr-x 1 root root        94 Dec 15 13:46 secure_mysql.sh
[root@ansible mysql5.6]# vim vars/main.yml

---
# vars file for mysql5.6

mysql_version: mysql-5.6.51-linux-glibc2.12-x86_64
mysql_file: {{mysql_version}}.tar.gz
[root@ansible mysql5.6]# vim tasks/main.yml

---
# tasks file for mysql5.6

- include: install.yml
- include: group.yml
- include: user.yml
- include: unarchive.yml
- include: link.yml
- include: data.yml
- include: config.yml
- include: service.yml
- include: path.yml
- include: secure.yml
[root@ansible mysql5.6]# vim tasks/install.yml

- name: install packages
  yum:
    name:
      - libaio
      - perl-Data-Dumper
      - perl-Getopt-Long

- name: create directory
  file:
    path: /data/mysql
    state: directory
[root@ansible mysql5.6]# vim tasks/group.yml

- name: create mysql group
  group:
    name: mysql
    gid: 306
[root@ansible mysql5.6]# vim tasks/user.yml

- name: create mysql user
  user:
    name: mysql
    uid: 306
    group =mysql
    shell: /sbin/nologin
    system: yes
    create_home: no
    home: /data/mysql
[root@ansible mysql5.6]# vim tasks/unarchive.yml

- name: copy tar to remote host and file mode
  unarchive:
    src: "{{ mysql_file }}"
    dest: /usr/local/
    owner: root
    group: root
[root@ansible mysql5.6]# vim tasks/link.yml

- name: mkdir /usr/local/mysql
  file:
    src: /usr/local/{{mysql_version}}
    dest: /usr/local/mysql
    state: link
[root@ansible mysql5.6]# vim tasks/data.yml

- name: data dir
  shell: chdir=/usr/local/mysql/ ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
[root@ansible mysql5.6]# vim tasks/config.yml

- name: config my.cnf
  copy:
    src: my.cnf
    dest: /etc/my.cnf
[root@ansible mysql5.6]# vim tasks/service.yml

- name: service script
  shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld;chkconfig --add mysqld;chkconfig mysqld on;/etc/init.d/mysqld start
[root@ansible mysql5.6]# vim tasks/path.yml

- name: PATH variable
  copy:
    content: 'PATH=/usr/local/mysql/bin:$PATH'
    dest: /etc/profile.d/mysql.sh
[root@ansible mysql5.6]# vim tasks/secure.yml

- name: secure script
  script: secure_mysql.sh
[root@ansible mysql5.6]# tree
.
├── defaults
│   └── main.yml
├── files
│   ├── my.cnf
│   ├── mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
│   └── secure_mysql.sh
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   ├── config.yml
│   ├── data.yml
│   ├── group.yml
│   ├── install.yml
│   ├── link.yml
│   ├── main.yml
│   ├── path.yml
│   ├── secure.yml
│   ├── service.yml
│   ├── unarchive.yml
│   └── user.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml
[root@ansible ~]# vim mysql5.6_role.yml

- hosts: dbservers
 remote_user: root
 roles:
   - mysql5.6
[root@ansible ~]# ansible-playbook mysql5.6_role.yml

PLAY [dbservers] ******************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************
ok: [192.168.1.21]

TASK [mysql5.6 : install packages] ************************************************************************************************
changed: [192.168.1.21]

TASK [mysql5.6 : create directory] ************************************************************************************************
changed: [192.168.1.21]

TASK [mysql5.6 : create mysql group] **********************************************************************************************
changed: [192.168.1.21]

TASK [mysql5.6 : create mysql user] ***********************************************************************************************
changed: [192.168.1.21]

TASK [mysql5.6 : copy tar to remote host and file mode] ***************************************************************************
changed: [192.168.1.21]

TASK [mysql5.6 : mkdir /usr/local/mysql] ******************************************************************************************
changed: [192.168.1.21]

TASK [mysql5.6 : data dir] ********************************************************************************************************
changed: [192.168.1.21]

TASK [mysql5.6 : config my.cnf] ***************************************************************************************************
changed: [192.168.1.21]

TASK [mysql5.6 : service script] **************************************************************************************************
changed: [192.168.1.21]

TASK [mysql5.6 : PATH variable] ***************************************************************************************************
changed: [192.168.1.21]

TASK [mysql5.6 : secure script] ***************************************************************************************************
changed: [192.168.1.21]

PLAY RECAP ************************************************************************************************************************
192.168.1.21               : ok=12   changed=11   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享