tags模块 可以给任务定义标签,可以根据标签来运行指定的任务
[root@test41 opt]# vim test1.yaml
#标签的类型
#always:设定标签名为always,除非指定跳过这个标签,否则该任务始终会运行,即使指定了标签还会运行
#never:从不运行的任务,指定标签名never可以运行
#debug:用于调试
#setup:收集主机的信息
#标签名也可以自定义:tags
- hosts: 192.168.65.10
gather_facts: false
tasks:
- name: debug-test1
debug:
msg: 'cow'
tags:
- debug
- name: always-test1
debug:
msg: 'ALWAYS-RUN'
tags:
- always
- name: never-test1
debug:
msg: "Never-run"
tags:
- never
- name: setup-test1
debug:
msg: "SETUP-1"
tags:
- setup
[root@test41 opt]# ansible-playbook test1.yaml --tags=setup
#指定执行哪个
[root@test41 opt]# ansible-playbook test1.yaml --tags="debug","setup"
#跳过指定标签
[root@test41 opt]# ansible-playbook test1.yaml --skip-tags=always
创建自定义任务
[root@test41 opt]# ansible-playbook test1.yaml --skip-tags=always
[root@test41 opt]# vim test2.yaml
- hosts: 192.168.65.10
remote_user: root
tasks:
- name: 复制文件
copy: src=/etc/hosts dest=/opt/hosts
tags:
- cyp
- name: touch file
file: path=/opt/test1.txt state=touch
tags:
- dly
[root@test41 opt]# ansible-playbook test2.yaml --tags=cyp
[root@test41 opt]# ansible-playbook test2.yaml --tags=dly
[root@test10 opt]# ll
总用量 4
-rw-r--r--. 1 root root 158 8月 23 10:39 hosts
-rw-r--r--. 1 root root 0 8月 23 10:38 test1.txt
[root@test41 opt]# cd /etc/httpd/
[root@test41 httpd]# ls
conf conf.d conf.modules.d logs modules run
[root@test41 httpd]# cd conf
[root@test41 conf]# cp httpd.conf /opt/httpd.conf.j2
[root@test41 conf]# cd /opt
[root@test41 opt]# ls
1 httpd.conf.j2 test1.yaml test2.yaml test3.yaml
[root@test41 opt]# vim httpd.conf.j2
42 Listen {{http_port}}
95 ServerName {{server_name}}
119 DocumentRoot "{{root_dir}}"
[root@test41 opt]# vim test3.yaml
#模板,对引用的配置文件初始化:templates模块,jinja组件,把编译过的模板文件传送给目标文件
- hosts: 192.168.65.10
gather_facts: false
remote_user: root
vars:
- pg: httpd
- sv: httpd
tasks:
- name: install httpd
yum: name={{pg}}
- name: editon conf
template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd
handlers:
- name: restart httpd
service: name={{sv}} state=restarted
[root@test41 ansible]# ls
ansible.cfg hosts roles
roles:为了层次化,结构化的组织playbook,使用roles通过层次化自动装载变量,任务和处理器等等
roles把变量,任务和模块的文件单独放置在不同的中,通过roles一键编排
[root@test41 ansible]# mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
[root@test41 ansible]# mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
[root@test41 ansible]# mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p
[root@test41 ansible]# yum -y install tree
已安装:
tree.x86_64 0:1.6.0-10.el7
完毕!
roles:
├── httpd 角色名称 自定义
│ ├── defaults 存放配置文件的目录,可以不写
│ ├── files 存档copy模块或者script
│ ├── handlers 存放处理器文件的目录
│ ├── meta 保存角色源信息的文件
│ ├── tasks 保存任务的文件
│ ├── templates 保存模板的文件
│ └── vars 保存变量的文件
就是把原来写在一个yanl的配置,分开---->不同目录---->保存在一个名字的yanl里面
执行的时候调用不同目录的同一个yaml文件
文件名必须是:main.yaml
ansible:14个模块必须掌握,熟练。
剧本:能够定义一般意义的远程部署和相关的配置即可
了解条件判断,循环,
tags作用 标签的系统标签:always never 自定义
templates:了解即可
roles:了解即可
配置主机清单,实现免密钥对登录。声明ip地址列表
1、在目标主机批量创建目录:/opt/test1 /opt/test2 /opt/test3
2、从主机批量复制文件,123 456 789,分别输出到指定的123-->test1 456---->test2 789---->test3 指定主机为192.168.233.20.
3、创建一个nginx.conf文件,改配置文件可以实现upstream反向代理 复制到nginx1
4、分别在nginx2和nginx3上配置页面: test1 test2
5、在主机访问目标主机nginx1,实现负载均衡。
以上步骤全部用ansible远程完成!
[root@test41 opt]# vim test1.yaml
#在目标主机批量创建目录:/opt/test1 /opt/test2 /opt/test3
#从主机批量复制文件,123 456 789,分别输出到指定的123-->test1 456---->test2 789---->test3
指定主机为192.168.233.20.
- name: this is if
hosts: all
remote_user: root
tasks:
- name: chuangjian
file:
path: "{{ item }}"
state: directory
with_items: [/opt/test1,/opt/test2,/opt/test3]
when: ansible_default_ipv4.address == "192.168.65.50"
- name: fuzhi
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
loop:
- { src: '123', dest: '/opt/test1' }
- { src: '456', dest: '/opt/test2' }
- { src: '789', dest: '/opt/test3' }
when: ansible_default_ipv4.address == "192.168.65.50"
#创建一个nginx.conf文件,改配置文件可以实现upstream反向代理 复制到nginx1
- name: fuzhi nginx.conf
hosts: 192.168.65.50
become: yes
tasks:
- name: nginx.conf
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
notify:
- restart nginx
handlers:
- name: Restart nginx
service:
name: nginx
state: started
#分别在nginx2和nginx3上配置页面: test1 test2
- name: Nginx servers
hosts: all
tasks:
- name: yemian nginx1
shell: echo "this is test1" > /usr/share/nginx/html/index.html
when: ansible_default_ipv4.address == "192.168.65.20"
- name: yemian nginx3
shell: echo "this is test2" > /usr/share/nginx/html/index.html
when: ansible_default_ipv4.address == "192.168.65.30"
#在主机访问目标主机192.168.65.50,实现负载均衡。
[root@test50 nginx]# curl 192.168.65.50
this is test2
[root@test50 nginx]# curl 192.168.65.50
this is test1
[root@test50 nginx]# curl 192.168.65.50
this is test2
[root@test50 nginx]# curl 192.168.65.50
this is test2
[root@test50 nginx]# curl 192.168.65.50
this is test1
[root@test50 nginx]# curl 192.168.65.50
this is test1
[root@test50 nginx]# curl 192.168.65.50
this is test1
[root@test41 opt]# vim nginx.conf
http
upstream xy102 {
server 192.168.65.20;
server 192.168.65.30;
}
server {
listen 80;
location / {
root html;
index index.html index.htm;
proxy_pass http://xy102;
}
1