运维自动化之ansible-2

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

  remote_user:root

ansible-playbook -C memcached_role.yml  

  roles:

    -memcached

ansible-playbook -C memcached_role.yml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值