Templates 模块 Jinja模版架构,通过这个模版可以实现,往配置文件(模版文件)传参(python转义)把占位符参数传到配置文件中去 Jinja就是生产一个目标文本文件,然后传递变量需要配置文件(web开发) |
创建文件 123 345 678 将其复制到12主机上创建的test1 test2 test3
- hosts: 192.168.233.12
remote_user: root
tasks:
- name: create dir
file:
path: "/opt/{{item}}"
state: directory
with_items:
- test1
- test2
- test3
when: inventory_hostname == '192.168.233.12'
- name: copy
copy:
src: "/opt/{{item.src}}"
dest: "/opt/{{item.dest}}"
with_items:
- {src: "123", dest: "test1" }
- {src: "456", dest: "test2" }
- {src: "789", dest: "test3" }
when是一个比较常见的应用场景,实现满足条件即执行,不满足条件即跳过的任务
when是满足条件即执行,不满足不执行
templates模块
jinja模版架构,通过模版可以实现模版文件传参(python转义)把占位符参数传到配置文件中区
生成一个目标文本文件,传递变量到需要配置文件当中(web开发)
[root@docker1 opt]# cd /etc/httpd/conf
[root@docker1 conf]# cp httpd.conf httpd.conf.j2
[root@docker1 opt]# vim jinia.httpd.yaml
[root@docker1 opt]# ansible-playbook jinia.httpd.yaml
- hosts: all
remote_user: root
vars:
- package: httpd
- service: httpd
tasks:
- name: install httpd
yum: name={{package}}
- name: install configure file
template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
#使用template的模版
notify:
- restart httpd
- name: create root_dir
file:
path: /etc/httpd/htdocs
state: directory
- name: start httpd
service: name={{service}} enabled=true state=started
handlers:
- name: restart httpd
service: name={{service}} state=restarted
nginx
[root@docker1 opt]# cd /etc/nginx/
[root@docker1 nginx]# vim nginx.conf.j2
server {
listen "{{port}}";
server_name "{{server_name}}";
root "{{root_dir}}";
[root@docker1 nginx]# vim /etc/ansible/hosts
[webservers]
192.168.233.12 port=8080 server_name=www.guoqi.com:80 root_dir=/opt/nginx/html
[root@docker1 opt]# cp /etc/nginx/nginx.conf.j2 /opt/
- hosts: all
remote_user: root
vars:
- package: nginx
- service: nginx
tasks:
- name: install nginx
yum: name={{package}}
- name: install configure file
template: src=/opt/nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify:
- restart nginx
- name: create root_dir
file:
path: /etc/nginx/html
state: directory
- name: start nginx
service: name={{service}} enabled=true state=started
handlers:
- name: restart nginx
service: name={{service}} state=restarted
[root@docker1 opt]# ansible-playbook jinia.nginx.yaml
[root@docker2 opt]# vim /etc/nginx/nginx.conf
[root@docker2 opt]# netstat -antp | grep 8080
tags模块
标签模块,可以在playbook当中为任务设定标签(tags),在运行playbook时可以通过指定任务标签,来实现只允许设定的标签任务
格式:
- name:
tags:
debug:
--tags debug
--start-at-task='wdf'
#表示只运行debug其他都不运行
任务标签的种类:
always:不管你是否指定了运行标签,任务都会执行
never:即使你运行了指定标签,该任务也不会执行
debug:调试任务
setup:收集主机信息
自定义标签
per_tasks:指定标签之前的任务
post_tasks:运行指定标签之后的任务
- hosts: all
remote_user: root
tasks:
- name: tag debug
debug:
msg: "this is test1"
tags:
- debug
- name: tag setup
setup:
tags:
- setup
- name: tag always
debug:
msg: "run"
tags:
- always
- name: tag never
debug:
msg: "never run"
tags:
- never
[root@docker1 opt]# ansible-playbook tags.yaml --tags="never"
[root@docker1 opt]# ansible-playbook tags.yaml --tags="setup"
#只运行了setup和always
[root@docker1 opt]# ansible-playbook tags.yaml --tags="ll"
[root@docker1 opt]# ansible-playbook tags.yaml --tags="yy"
#自定义标签,可以对标签自定义,指定运行标签的内容,需要运行哪一个任务指定任务的标签就行
练习
#在目标主机上touch guoqi.txt 标签为always,在目标主机复制文件/opt/wdf.txt,标签自定义,第一次运行playbook 不知道查看文件生成情况,指定标签为never,查看文件生成情况
- hosts: 192.168.233.12
remote_user: root
tasks:
- name: touch
file:
path: /opt/guoqi.txt
state: touch
tags:
- always
- name: copy file
copy:
src: /opt/wdf.txt
dest: /opt/wdf.txt
tags:
- never
[root@docker1 opt]# ansible-playbook tags.l.yaml
#never是不运行的
[root@docker1 opt]# ansible-playbook tags.l.yaml --tags="never"
#指定运行never
?
Roles模块
角色
Ansible层次化,结构化的组织playbook使用了rolse(角色)
可以根据层次的结构,自动装载变量文件,tasks以及handlers等等
Rolse:分别把变量,文件,任务,模块,以及处理器,放在单独的目录当中,使用rolse模块来一件调用这些文件
Roles:的结构图
----web----总目录,里面有角色
子目录
Files用来存放copy和script模块调用文件
Templates 存放j2的模版文件
Tasks包含任务的目录
----main.yml 角色运行的任务
Handlers:包含处理器的目录
------main.yml
Vars 存放变量的目录
----- main.yml 只能叫main.yaml/yml
Defaults 包含默认变量的目录
-----main.yml
Meta 包含元信息的目录
----main.yml
Site.yml用来调用所有的配置文件
需要三个服务
httpd mysql php
[root@docker1 opt]# cd /etc/ansible/roles/
[root@docker1 roles]# mkdir httpd mysql php
[root@docker1 httpd]# mkdir files templates tasks handlers vars defaults meta
[root@docker1 httpd]# touch {defaults,vars,tasks,meta,handlers}/main.yml
[root@docker1 mysql]# mkdir files templates tasks handlers vars defaults meta
[root@docker1 mysql]# touch {defaults,vars,tasks,meta,handlers}/main.yml
[root@docker1 php]# mkdir files templates tasks handlers vars defaults meta
[root@docker1 php]# touch {defaults,vars,tasks,meta,handlers}/main.yml