ansible-playbook var.yml
ansible all -m setup |grep men
cd ansible/
vim vars.yml
var1: httpd
var2: vsftpd
vim testvar.yml
---
- hosts: all
remote_user: root
vars_file:
- vars.yml
tasks:
-name: install package
yum: name={{ var1 }}
-name: create file
file: name=/data/{{ var2 }}.log state=touch
ansible-playbook -C testvar.yml
ansible all -m shell -a 'rpm -q httpd'
yum install nginx
rpm -ql nginx
/etc/nginx/nginx.conf
mkdir ./ansible/templates
ansible-doc -s template
cp /etc/nginx/nginx.conf ./templates/nginx.conf.j2
vim testtemplate.yml
---
- host: all
remote_user: root
tasks:
- name: install package
yum: name=nginx
- name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
- name: start service
service: name=nginx state=started enabled=yes
ansible-playbook -C testtemplate.yml
ansible all -m setup |grep "cpu"
{{ ansible_processor_vcpu**2 }}
vim testtemplate1.yml
---
- host: all
remote_user: root
tasks:
- name: install package
yum: name=nginx
- name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart service
- name: start service
service: name=nginx state=started enabled=yes
handlers:
- name: restart service
service: name=nginx state=restarted
09:53
vim /etc/ansible/hosts
vim testtemplate1.yml
lsiten {{httpd_port}} default_server;
vim testtemplate1.yml
---
- host: all
remote_user: root
vars:
- http_port: 88
tasks:
- name: install package
yum: name=nginx
- name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart service
- name: start service
service: name=nginx state=started enabled=yes
handlers:
- name: restart service
service: name=nginx state=restarted
ansible-playbook -e "httpd_port=99" testtemplate1.yml
比较谁定义的变量优先级高:
-e 命令行 > playbook > 主机清单的普通变量 > 主机清单的公共变量
when
ansible all -m setup -a 'filter=ansible_os_family'
ansible all -m setup -a '*distribution*'
cat ifcfg-eth1
service NetworkManager restart
vim testtemplate2.yml
---
- host: all
remote_user: root
vars:
- http_port: 88
tasks:
- name: install package
yum: name=nginx
- name: copy template for centos7
template: src=nginx.conf7.j2 dest=/etc/nginx/nginx.conf
when: ansible_distribution_major_version == "7"
notify: restart service
- name: copy template for centos6
template: src=nginx.conf6.j2 dest=/etc/nginx/nginx.conf
when: ansible_distribution_major_version == "6"
notify: restart service
- name: start service
service: name=nginx state=started enabled=yes
handlers:
- name: restart service
service: name=nginx state=restarted
centos6
scp /etc/nginx/nginx.conf 192.168.30.7:/root/ansible/templates/nginx.conf6.j2
centos7
scp /etc/nginx/nginx.conf 192.168.30.7:/root/ansible/templates/nginx.conf7.j2
/root/ansible/templates/
nginx.conf6.j2
nginx.conf7.j2
ansible-playbook testtemplate2.yml
vim testitem.yml
---
- hosts: all
remote_user: root
tasks:
- name: create some files
file: name=/data/{{ item }} state=touch
when: ansible_distribution_major_version == "7"
with_items:
- file1
- file2
- file3
- name: install some packages
yum: name={{ item }}
with_items:
- htop
- sl
- hping3
ansible-playbook testitem.yml
vim testitem1.yml
---
- hosts: all
remote_user: root
tasks:
- name: create some groups
group: name={{ item }}
when: ansible_distribution_major_version == "7"
with_items:
- g1
- g2
- g3
ansible-playbook testitem1.yml
ansible all -a 'getent group'
vim testitem2.yml
---
- hosts: all
remote_user: root
tasks:
- name: create some groups
group: name={{ item }}
when: ansible_distribution_major_version == "7"
with_items:
- g1
- g2
- g3
- name: create some user
user: name={{item.name}} group={{item.group}}
with_items:
- { name: 'user1', group: 'g1' }
- { name: 'user2', group: 'g2' }
- { name: 'user3', group: 'g3' }
ansible-playbook testitem2.yml
ansible all -a 'getent passwd'
for
vim testfor.yml
---
- hosts: all
remote_user: root
vars:
ports:
- 81
- 82
- 83
tasks:
- name: copy conf
template: src=for1.conf.j2 dest=/data/for1.conf
vim ./template/for1.conf.j2
{% for port in ports %}
server{
lsiten {{ port }}
}
{% endfor %}
ansible-playbook testfor.yml
vim testfor1.yml
---
- hosts: all
remote_user: root
vars:
ports:
- listen_port: 81
- listen_port: 82
- listen_port: 83
tasks:
- name: copy conf
template: src=for1.conf.j2 dest=/data/for1.conf
vim ./template/for1.conf.j2
{% for port in ports %}
server{
lsiten {{ port.listen_port }}
}
{% endfor %}
ansible-playbook testfor1.yml
vim testfor2.yml
---
- hosts: all
remote_user: root
vars:
ports:
- web1:
port: 81
name: web1.magedu.com
rootdir: /data/website1
- web2:
port: 82
name: web2.magedu.com
rootdir: /data/website2
- web3:
port: 83
name: web3.magedu.com
rootdir: /data/website3
tasks:
- name: copy conf
template: src=for2.conf.j2 dest=/data/for2.conf
vim ./template/for2.conf.j2
{% for port in ports %}
server{
lsiten {{ port.port }}
servername {{ port.name }}
documentroot {{ port.rootdir }}
}
{% endfor %}
ansible-playbook testfor2.yml
if
vim testfor3.yml
---
- hosts: all
remote_user: root
vars:
ports:
- web1:
port: 81
#name: web1.magedu.com
rootdir: /data/website1
- web2:
port: 82
name: web2.magedu.com
rootdir: /data/website2
- web3:
port: 83
#name: web3.magedu.com
rootdir: /data/website3
tasks:
- name: copy conf
template: src=for3.conf.j2 dest=/data/for3.conf
vim ./template/for3.conf.j2
{% for port in ports %}
server{
lsiten {{ port.port }}
{% if port.name is defined %}
servername {{ port.name }}
{% endif %}
documentroot {{ port.rootdir }}
}
{% endfor %}
ansible-playbook testfor3.yml
roles
mkdir roles
/etc/ansible/roles/
mkdir ./{nginx,httpd,mysql,memcache} -pv
cd ./nginx
mkdir task templates
cd ./tasks
vim group.yml
- name: create group
group: name=nginx gid=80
vim user.yml
- name: create user
user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
vim yum.yml
- name: install packages
yum: name=nginx
vim start.yml
- name: start service
service: name=nginx state=started enable=yes
vim restart.yml
- name: restart service
service: name=nginx state=restarted
vim nginx.conf.j2
vim templ.yml
- name: copy conf
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
vim main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: templ.yml
- include: start.yml
cd .. (/etc/ansible/roles)
vim nginx_role.yml
- hosts: all
remote_user: root
roles:
-role: nginx
ansible-playbook -C nginx_role.yml
httpd
cd ./roles/httpd/
mkdir tasks
cd ./tasks
vim user.yml
- name: create user
user: name=apache system=yes shell=/sbin/nologin
cp /etc/httpd/conf/httpd.conf
vim copyfile.yml
- name: copy file
copy: src=/etc/httpd/conf/httpd.conf dest=/data/ ower=apache
vim main.yml
- include: user.yml
- include: copyfile.yml
vim httpd_role.yml
- hosts: all
remote_user: root
roles:
-httpd
ansible-playbook httpd_role.yml
cp nginx_role.yml some_role.yml
vim some_role.yml
- hosts: all
remote_user: root
roles:
-role: nginx
-role: nginx
ansible-playbook -C some_role.yml
vim ./roles/nginx/tasks/main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: templ.yml
- include: start.yml
- include: roles/httpd/tasks/copyfile.yml
ansible-playbook -C nginx_role.yml
cp -r nginx/ app/
vim some_role.yml
- hosts: all
remote_user: root
roles:
- { role: httpd,tags: ['web','httpd'] }
- { role: nginx,tags: ['web','nginx'] }
- { role: app,tags: "app" }
ansible-playbook -t web some_role.yml
vim some_role.yml
- hosts: all
remote_user: root
roles:
- { role: httpd,tags: ['web','httpd'] }
- { role: nginx,tags: ['web','nginx'],when: ansible_distribution_major_version == "7" }
- { role: app,tags: "app"}
ansible-playbook some_role.yml
cd /etc/ansible/roles/
mkdir app
cd app/
mkdir tasks templates vars handlers files
cd tasks/
vim group.yml
- name: create group
group: name=app system=yes gid=123
vim user.yml
- name: create user
user: name=app group=app system=yes shell=/sbin/nologin uid=123
vim yum.yml
- name: install packages
yum: name=httpd
cp /etc/httpd/conf/httpd.conf ../templates/httpd.conf.j2
vim template.yml
- name: copy conf
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: restart service
vim vars/main.yml
username: app
groupname: app
vim handlers/restart.yml
- name: restart service
service: name=httpd state=restarted
vim tasks/start.yml
- name: start service
service: naem=httpd state=started enabled=yes
vim task/copyfile.yml
- name: copy config
copy: src=vhosts.conf dest=/etc/httpd/conf.d/ owner=app
vim main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: template.yml
- include: copyfile.yml
- include: start.yml
vim app_role.yml
- hosts: all
remote_user: root
roles:
- app
ansible-playbook -C app_role.yml
memcache 11211
mkdir tasks templates
yum install memcached
/etc/sysconfig/memcached
cp /etc/sysconfig/memcached templates/memcached.j2
vim memcached.j2
ansible all -m setup -a 'filter="*memtotal*"'
CACHESIZE="{{ ansible_memtotal_mb//4 }}"
vim tasks/yum.yml
- name: install packages
yum: name=memcached
vim tasks/start.yml
- name: start service
service: name=memcached state=started enable=yes
vim tasks/template.yml
- name: copy conf
template: src=memcached.j2 dest=/etc/sysconfig/memcached
vim main.yml
-include: yum.yml
-include: template.yml
-include: start.yml
vim memcached_role.yml
- hosts: all
ansible all -m setup |grep men
cd ansible/
vim vars.yml
var1: httpd
var2: vsftpd
vim testvar.yml
---
- hosts: all
remote_user: root
vars_file:
- vars.yml
tasks:
-name: install package
yum: name={{ var1 }}
-name: create file
file: name=/data/{{ var2 }}.log state=touch
ansible-playbook -C testvar.yml
ansible all -m shell -a 'rpm -q httpd'
yum install nginx
rpm -ql nginx
/etc/nginx/nginx.conf
mkdir ./ansible/templates
ansible-doc -s template
cp /etc/nginx/nginx.conf ./templates/nginx.conf.j2
vim testtemplate.yml
---
- host: all
remote_user: root
tasks:
- name: install package
yum: name=nginx
- name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
- name: start service
service: name=nginx state=started enabled=yes
ansible-playbook -C testtemplate.yml
ansible all -m setup |grep "cpu"
{{ ansible_processor_vcpu**2 }}
vim testtemplate1.yml
---
- host: all
remote_user: root
tasks:
- name: install package
yum: name=nginx
- name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart service
- name: start service
service: name=nginx state=started enabled=yes
handlers:
- name: restart service
service: name=nginx state=restarted
09:53
vim /etc/ansible/hosts
vim testtemplate1.yml
lsiten {{httpd_port}} default_server;
vim testtemplate1.yml
---
- host: all
remote_user: root
vars:
- http_port: 88
tasks:
- name: install package
yum: name=nginx
- name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart service
- name: start service
service: name=nginx state=started enabled=yes
handlers:
- name: restart service
service: name=nginx state=restarted
ansible-playbook -e "httpd_port=99" testtemplate1.yml
比较谁定义的变量优先级高:
-e 命令行 > playbook > 主机清单的普通变量 > 主机清单的公共变量
when
ansible all -m setup -a 'filter=ansible_os_family'
ansible all -m setup -a '*distribution*'
cat ifcfg-eth1
service NetworkManager restart
vim testtemplate2.yml
---
- host: all
remote_user: root
vars:
- http_port: 88
tasks:
- name: install package
yum: name=nginx
- name: copy template for centos7
template: src=nginx.conf7.j2 dest=/etc/nginx/nginx.conf
when: ansible_distribution_major_version == "7"
notify: restart service
- name: copy template for centos6
template: src=nginx.conf6.j2 dest=/etc/nginx/nginx.conf
when: ansible_distribution_major_version == "6"
notify: restart service
- name: start service
service: name=nginx state=started enabled=yes
handlers:
- name: restart service
service: name=nginx state=restarted
centos6
scp /etc/nginx/nginx.conf 192.168.30.7:/root/ansible/templates/nginx.conf6.j2
centos7
scp /etc/nginx/nginx.conf 192.168.30.7:/root/ansible/templates/nginx.conf7.j2
/root/ansible/templates/
nginx.conf6.j2
nginx.conf7.j2
ansible-playbook testtemplate2.yml
vim testitem.yml
---
- hosts: all
remote_user: root
tasks:
- name: create some files
file: name=/data/{{ item }} state=touch
when: ansible_distribution_major_version == "7"
with_items:
- file1
- file2
- file3
- name: install some packages
yum: name={{ item }}
with_items:
- htop
- sl
- hping3
ansible-playbook testitem.yml
vim testitem1.yml
---
- hosts: all
remote_user: root
tasks:
- name: create some groups
group: name={{ item }}
when: ansible_distribution_major_version == "7"
with_items:
- g1
- g2
- g3
ansible-playbook testitem1.yml
ansible all -a 'getent group'
vim testitem2.yml
---
- hosts: all
remote_user: root
tasks:
- name: create some groups
group: name={{ item }}
when: ansible_distribution_major_version == "7"
with_items:
- g1
- g2
- g3
- name: create some user
user: name={{item.name}} group={{item.group}}
with_items:
- { name: 'user1', group: 'g1' }
- { name: 'user2', group: 'g2' }
- { name: 'user3', group: 'g3' }
ansible-playbook testitem2.yml
ansible all -a 'getent passwd'
for
vim testfor.yml
---
- hosts: all
remote_user: root
vars:
ports:
- 81
- 82
- 83
tasks:
- name: copy conf
template: src=for1.conf.j2 dest=/data/for1.conf
vim ./template/for1.conf.j2
{% for port in ports %}
server{
lsiten {{ port }}
}
{% endfor %}
ansible-playbook testfor.yml
vim testfor1.yml
---
- hosts: all
remote_user: root
vars:
ports:
- listen_port: 81
- listen_port: 82
- listen_port: 83
tasks:
- name: copy conf
template: src=for1.conf.j2 dest=/data/for1.conf
vim ./template/for1.conf.j2
{% for port in ports %}
server{
lsiten {{ port.listen_port }}
}
{% endfor %}
ansible-playbook testfor1.yml
vim testfor2.yml
---
- hosts: all
remote_user: root
vars:
ports:
- web1:
port: 81
name: web1.magedu.com
rootdir: /data/website1
- web2:
port: 82
name: web2.magedu.com
rootdir: /data/website2
- web3:
port: 83
name: web3.magedu.com
rootdir: /data/website3
tasks:
- name: copy conf
template: src=for2.conf.j2 dest=/data/for2.conf
vim ./template/for2.conf.j2
{% for port in ports %}
server{
lsiten {{ port.port }}
servername {{ port.name }}
documentroot {{ port.rootdir }}
}
{% endfor %}
ansible-playbook testfor2.yml
if
vim testfor3.yml
---
- hosts: all
remote_user: root
vars:
ports:
- web1:
port: 81
#name: web1.magedu.com
rootdir: /data/website1
- web2:
port: 82
name: web2.magedu.com
rootdir: /data/website2
- web3:
port: 83
#name: web3.magedu.com
rootdir: /data/website3
tasks:
- name: copy conf
template: src=for3.conf.j2 dest=/data/for3.conf
vim ./template/for3.conf.j2
{% for port in ports %}
server{
lsiten {{ port.port }}
{% if port.name is defined %}
servername {{ port.name }}
{% endif %}
documentroot {{ port.rootdir }}
}
{% endfor %}
ansible-playbook testfor3.yml
roles
mkdir roles
/etc/ansible/roles/
mkdir ./{nginx,httpd,mysql,memcache} -pv
cd ./nginx
mkdir task templates
cd ./tasks
vim group.yml
- name: create group
group: name=nginx gid=80
vim user.yml
- name: create user
user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
vim yum.yml
- name: install packages
yum: name=nginx
vim start.yml
- name: start service
service: name=nginx state=started enable=yes
vim restart.yml
- name: restart service
service: name=nginx state=restarted
vim nginx.conf.j2
vim templ.yml
- name: copy conf
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
vim main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: templ.yml
- include: start.yml
cd .. (/etc/ansible/roles)
vim nginx_role.yml
- hosts: all
remote_user: root
roles:
-role: nginx
ansible-playbook -C nginx_role.yml
httpd
cd ./roles/httpd/
mkdir tasks
cd ./tasks
vim user.yml
- name: create user
user: name=apache system=yes shell=/sbin/nologin
cp /etc/httpd/conf/httpd.conf
vim copyfile.yml
- name: copy file
copy: src=/etc/httpd/conf/httpd.conf dest=/data/ ower=apache
vim main.yml
- include: user.yml
- include: copyfile.yml
vim httpd_role.yml
- hosts: all
remote_user: root
roles:
-httpd
ansible-playbook httpd_role.yml
cp nginx_role.yml some_role.yml
vim some_role.yml
- hosts: all
remote_user: root
roles:
-role: nginx
-role: nginx
ansible-playbook -C some_role.yml
vim ./roles/nginx/tasks/main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: templ.yml
- include: start.yml
- include: roles/httpd/tasks/copyfile.yml
ansible-playbook -C nginx_role.yml
cp -r nginx/ app/
vim some_role.yml
- hosts: all
remote_user: root
roles:
- { role: httpd,tags: ['web','httpd'] }
- { role: nginx,tags: ['web','nginx'] }
- { role: app,tags: "app" }
ansible-playbook -t web some_role.yml
vim some_role.yml
- hosts: all
remote_user: root
roles:
- { role: httpd,tags: ['web','httpd'] }
- { role: nginx,tags: ['web','nginx'],when: ansible_distribution_major_version == "7" }
- { role: app,tags: "app"}
ansible-playbook some_role.yml
cd /etc/ansible/roles/
mkdir app
cd app/
mkdir tasks templates vars handlers files
cd tasks/
vim group.yml
- name: create group
group: name=app system=yes gid=123
vim user.yml
- name: create user
user: name=app group=app system=yes shell=/sbin/nologin uid=123
vim yum.yml
- name: install packages
yum: name=httpd
cp /etc/httpd/conf/httpd.conf ../templates/httpd.conf.j2
vim template.yml
- name: copy conf
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: restart service
vim vars/main.yml
username: app
groupname: app
vim handlers/restart.yml
- name: restart service
service: name=httpd state=restarted
vim tasks/start.yml
- name: start service
service: naem=httpd state=started enabled=yes
vim task/copyfile.yml
- name: copy config
copy: src=vhosts.conf dest=/etc/httpd/conf.d/ owner=app
vim main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: template.yml
- include: copyfile.yml
- include: start.yml
vim app_role.yml
- hosts: all
remote_user: root
roles:
- app
ansible-playbook -C app_role.yml
memcache 11211
mkdir tasks templates
yum install memcached
/etc/sysconfig/memcached
cp /etc/sysconfig/memcached templates/memcached.j2
vim memcached.j2
ansible all -m setup -a 'filter="*memtotal*"'
CACHESIZE="{{ ansible_memtotal_mb//4 }}"
vim tasks/yum.yml
- name: install packages
yum: name=memcached
vim tasks/start.yml
- name: start service
service: name=memcached state=started enable=yes
vim tasks/template.yml
- name: copy conf
template: src=memcached.j2 dest=/etc/sysconfig/memcached
vim main.yml
-include: yum.yml
-include: template.yml
-include: start.yml
vim memcached_role.yml
- hosts: all
remote_user:root
ansible-playbook -C memcached_role.yml
roles:-memcached
ansible-playbook -C memcached_role.yml