debug模块

1.如何查看ansible-playbook执行过程中产生的具体信息

vim test3.yaml
---
- hosts: all
  remote_user: root
  tasks:
  - name: ls
  	shell: ls /root
  	register: var_stdout	# register:将var_stdout注册为变量
  - name: debug
  	debug:
  	  var: var_stdout		# 查看所有的输出信息
  	  #var: var_stdout["stdout"]	#只看想看的信息

wait_for模块

[root@control roles]# vim /opt/roles/db/tasks/main.yaml
# 判断数据库启动后才能建库
# 代码见/opt/roles/db/tasks/main.yaml

角色role

执行ansible的方式:

ad-hoc模式(点对点模式):使用单个模块,支持批量执行单条命令,相当于bash中的一句话shell

playbook模式(剧本):将多个任务集中在一个剧本中执行,类似于shell脚本

​ 以上两种方式的缺陷:无法实现复用性

role模式(角色):类似于多个脚本导入。roles就是通过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,并可以便捷地include它们的一种机制。

1.创建角色

ansible-galaxy init 角色名字

[root@control ~]# mkdir /opt/roles
[root@control ~]# cd /opt/roles
[root@control roles]# ansible-galaxy init nginx			# 创建角色
- Role nginx was created successfully
[root@control roles]# ansible-galaxy init php			# 创建角色
- Role php was created successfully
[root@control roles]# ansible-galaxy init wordpress		 # 创建角色
- Role wordpress was created successfully
[root@control roles]# ansible-galaxy init db			 # 创建角色
- Role db was created successfully
[root@control roles]# tree nginx/
nginx/
├── README.md
├── defaults				# 默认
│   └── main.yml
├── files					# 存放需要使用的文件
├── handlers				# 处理器,触发器 需要触发的任务 
						    # tasks里面定义的notify除法handlers里面的任务
│   └── main.yml
├── meta
│   └── main.yml
├── tasks					# 写一些任务
│   └── main.yml
├── templates				# 存放需要渲染传递的文件
├── tests
│   ├── inventory
│   └── test.yml
└── vars					# 变量
    └── main.yml

8 directories, 8 files

role部署wordpress

1.角色的使用

1.1 写数据库

[root@control roles]# ls
db  nginx  php  wordpress
[root@control roles]# cd db
[root@control db]# ls
README.md  defaults  files  handlers  meta  tasks  templates  tests  vars
[root@control db]# cd tasks
[root@control tasks]# ls
main.yml
[root@control tasks]# vim main.yml
---
# tasks file for db
- name: Install MySQL
  yum:
    name:  mysql-server
    state: present


- name: Start and enable MySQL
  service:
    name: mysqld
    state: started
    enabled: yes

- name: 等待数据库启动
  wait_for:
    hosts: localhost		# 本机访问
    port: 3306
    timeout: 10				# 等待超时10秒
- name: INIT MySQL passwd
  shell: mysqladmin -p"`awk '/temporary password /{print $NF}' /var/log/mysqld.log`" password "Qq111111."


- name: Create MySQL database
  shell: mysql -p'Qq111111.' -e "CREATE DATABASE if not exists {{ MYSQL_DB_NAME }};create user '{{ MYSQL_USER }}'@'{{ MYSQL_HOST }}' identified by '{{ MYSQL_PASSWORD }}';grant all privileges on {{ MYSQL_DB_NAME }}.* to '{{ MYSQL_USER }}'@'{{ MYSQL_HOST }}';flush privileges;"

[root@control tasks]# vim ../vars/main.yml
---
# vars file for db
MYSQL_DB_NAME: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: "Qwertyuiop@123"
MYSQL_HOST: "%"

[root@control tasks]# cd /opt/roles/
[root@control roles]# ls
db  nginx  php  wordpress
[root@control roles]# vim roles.yaml
- hosts: databases
  remote_user: root
  gather_facts: no
  roles:
    - db

[root@control roles]# ansible-playbook roles.yaml --syntax-check

playbook: roles.yaml
[root@control roles]# ansible-playbook roles.yaml --list-tasks

playbook: roles.yaml

  play #1 (databases): databases        TAGS: []
    tasks:
      db : Install MySQL        TAGS: []
      db : Start and enable MySQL       TAGS: []
      db : INIT MySQL passwd    TAGS: []
      db : Create MySQL database        TAGS: [create]
[root@control roles]# ansible-playbook roles.yaml

PLAY [databases] **************************************************************************

TASK [db : Install MySQL] *****************************************************************
changed: [node1]

TASK [db : Start and enable MySQL] ********************************************************
changed: [node1]

TASK [db : INIT MySQL passwd] *************************************************************
changed: [node1]

TASK [db : Create MySQL database] *********************************************************
changed: [node1]

PLAY RECAP ********************************************************************************
node1                      : ok=4    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0



1.2 nginx

# 准备配置文件
[root@control tasks]# cp /root/nginx.conf /opt/roles/nginx/templates/
[root@control tasks]# vim /opt/roles/nginx/tasks/main.yml
---
# tasks file for nginx
#- name: Install PHP packages and epel-release
#  yum: name={{ item }} state=present disable_gpg_check=yes
 ##with_items:
 ##- epel-release
 ##- http://rpms.remirepo.net/enterprise/remi-release-9.rpm
 ##when: name == "web"
- name: Install nginx
  yum:
    name: nginx
    state: present

- name: Config Nginx
  template:
    src: nginx.conf
    dest: /etc/nginx/nginx.conf

- name: Start nginx
  service:
    name: nginx
    state: started

[root@control ~]# vim /opt/roles/nginx/templates/nginx.conf
user {{ NGINX_USER | default("nginx") }};
#{{ NGINX_USER | default(nginx) }}; 是错的,应该加""
worker_processes {{ NGINX_FORKS | default("auto") }};
。。。。。
    server {
        listen       {{ NGINX_PORT | default(80) }};
        listen       [::]:{{ NGINX_PORT | default(80) }};
        server_name  _;
        root    {{ BASE_DIR }}/wordpress;   # /usr/share/nginx/html;
	# {{ BASE_DIR | default(/usr/share/nginx) }}有问题
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
# 添加内容
        location / {
            root   {{ BASE_DIR }}/wordpress;
            index index.php;
        }
        location ~ \.php$ {
            root     {{ BASE_DIR }}/wordpress;     #/usr/share/nginx/html;  #指定网站目录
            fastcgi_pass  unix:///var/opt/remi/php80/run/php-fpm/www.sock;  #指定访问地址(>旧版为:127.0.0.1:9000)
            fastcgi_index  index.php;       #指定默认文件
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; #站点根目录
,取决于root配置项
            include        fastcgi_params;  #包含nginx常量定义
                }
        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

# 变量
[root@control ~]# vim /opt/roles/nginx/vars/main.yml
---
# vars file for nginx
NGINX_USER: nginx
NGINX_FORKS: auto
NGINX_PORT: 80

1.3 php

[root@control ~]# vim /opt/roles/php/tasks/main.yml
---
# tasks file for php
#- name: Install PHP repository
#  yum:
#   name: http://rpms.remirepo.net/enterprise/remi-release-9.rpm
#   state: present
#   disable_gpg_check: yes

- name: Install PHP
  yum:
    name: "{{ package }}"
    state: present

- name: Start php
  service:
    name: php80-php-fpm
    state: started

# listen默认监听sock文件
- name: mode
  file:
    path: /var/opt/remi/php80/run/php-fpm/www.sock
    mode: "777"

[root@control ~]# vim /opt/roles/php/vars/main.yml
---
# vars file for php
package: php80-php-xsl,php80-php,php80-php-cli,php80-php-devel,php80-php-gd,php80-php-pdo,php80-php-mysql,php80-php-fpm

1.4 上传包

[root@control ~]# cp /opt/latest-zh_CN.zip /opt/roles/wordpress/files/

[root@control ~]# vim /opt/roles/wordpress/tasks/main.yml
---
# tasks file for wordpress
- name: Cp Wordpress to web
  unarchive:
    src: latest-zh_CN.zip
    dest: "{{ BASE_DIR }}" # 解压之后直接在BASE_DIR下产生wordpress目录
    mode: "777"


[root@control ~]# vim /etc/ansible/hosts
[databases]
node1  name="db"
[webserver]
node2  name="web"  BASE_DIR=/usr/share/nginx	# BASE_DIR定义

1.5 运行

[root@control ~]# vim /opt/roles/roles.yaml
- hosts: "{{ host }}"
  remote_user: root
  gather_facts: no
  roles:
    - "{{ role }}"
[root@control ~]# ansible-playbook -e host=databases -e role=db roles.yaml
[root@control ~]# ansible-playbook -e host=webserver -e role=php roles.yaml
[root@control ~]# ansible-playbook -e host=webserver -e role=nginx roles.yaml
[root@control ~]# ansible-playbook -e host=webserver -e role=wordpress roles.yaml

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部