文章目录
1,基本使用:一个tasks
官网指南:https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html
##1,编写playbook的yaml文件
[root@eadage ansible]# cat t1.yml
- hosts: docker2
remote_user: root
tasks:
- name: create empty file
file: name=/a.txt mode=600 owner=docker state=touch
- name: create noempty file
copy: content="aa\nbb\ncc" dest=/a2.txt
- name: install httpd
yum: name=httpd state=installed
- name: start httpd
service: name=httpd state=started
- name: check httpd
shell: "ss -nltp |grep :80"
##2,调用playbook
[root@eadage ansible]# tail -3 /etc/ansible/hosts
docker #172.16.98.183 #docker
docker2 ansible_user=docker ansible_ssh_pass='123456' ansible_sudo_pass='123456' #172.16.98.184 #docker2
[root@eadage ansible]# ansible-playbook -s t1.yml
[DEPRECATION WARNING]: The sudo command line option has been deprecated in favor of the "become" command line arguments. This feature will be removed in version 2.6.
Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
PLAY [docker2] **************************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [docker2]
TASK [create empty file] ****************************************************************************************************************************************************
changed: [docker2]
TASK [create noempty file] **************************************************************************************************************************************************
ok: [docker2]
TASK [install httpd] ********************************************************************************************************************************************************
ok: [docker2]
TASK [start httpd] **********************************************************************************************************************************************************
changed: [docker2]
TASK [check httpd] **********************************************************************************************************************************************************
changed: [docker2]
PLAY RECAP ******************************************************************************************************************************************************************
docker2 : ok=6 changed=3 unreachable=0 failed=0
2,ansible扩展1(大任务):多个tasks
[root@eadage ansible]# cat web-db.yml
- hosts: webservers
remote_user: root
tasks:
- name: install httpd
yum:
name: httpd
state: latest
- name: replace httpd config
template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
notify: restart httpd
handlers:
- name: restart httpd
service: name=httpd state=restarted
- hosts: databases
remote_user: root
tasks:
- name: install mysql
yum:
name: mysql-server
state: latest
- name: start mysql
service:
name: mysqld
state: started
3,ansible扩展2(大任务的拆分):role, template
a, 配置一个role目录结构: (roles/nginx)
[root@eadage nginx-role]# tree
.
├── nginx.yml
└── roles
└── nginx ##在nginx.yml中配置的名字
├── defaults ################配置默认变量值
│ └── main.yml
├── files ##一般文件存在处:安装包,测试文件
│ ├── index.html
│ └── nginx-1.6.0.tar.gz
├── handlers #################tasks中的任务调动的handlers规则
│ └── main.yml
├── tasks ####################该角色的任务动作
│ ├── install.yml
│ └── main.yml
└── templates ##配置文件模板:以.j2结尾
└── nginx.conf.j2
7 directories, 8 files
############1, nginx.yml
[root@eadage nginx-role]# cat nginx.yml
- name: install nginx from src
hosts: docker2
remote_user: root
roles:
- nginx
############2, tasks/main.yml
[root@eadage nginx-role]# cat roles/nginx/tasks/main.yml
- import_tasks: install.yml
[root@eadage nginx-role]# cat roles/nginx/tasks/install.yml
- name: add nginx user
user: name={{ ngx_user }} state=present system=yes
- name: install dep-rpms-pcre
yum: name=pcre-devel state=installed
- name: install dep-rpms-openssl
yum: name=openssl-devel state=installed
- name: cp files to dest host
unarchive: src={{ ngx_tar_name }} dest=/tmp
- name: ./configure nginx in /tmp/{{ ngx_dir }}
shell: cd /tmp/{{ ngx_dir }} && ./configure --user={{ ngx_user }} --prefix=/usr/local/nginx --with-http_ssl_module
- name: make & make install
shell: cd /tmp/{{ ngx_dir }} && make && make install
- name: start nginx
shell: pkill nginx; /usr/local/nginx/sbin/nginx
- name: replace nginx.conf
template:
src: "{{ ngx_conf }}"
dest: /usr/local/nginx/conf/nginx.conf
- name: check nginx syntax
command: /usr/local/nginx/sbin/nginx -t
notify: restart nginx
- name: set index.html
copy: src=index.html dest=/usr/local/nginx/html/
- name: get nginx index.html
uri: url=http://localhost:{{ ngx_port }} method="GET"
tags: get_index
############3, handlers/main.yml
[root@eadage nginx-role]# cat roles/nginx/handlers/main.yml
- name: restart nginx
shell: /usr/local/nginx/sbin/nginx -s reload
############4, defaults/main.yml
[root@eadage nginx-role]# cat roles/nginx/defaults/main.yml
ngx_user: nginx
ngx_group: nginx
ngx_tar_name: nginx-1.6.0.tar.gz
ngx_dir: nginx-1.6.0
ngx_conf: nginx.conf.j2
ngx_port: 8080
############5, templates/nginx.conf.j2
[root@eadage nginx-role]# cat roles/nginx/templates/nginx.conf.j2
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen {{ ngx_port }};
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
b, 测试调用该role
[root@eadage nginx-role]# ls
nginx.yml roles
[root@eadage nginx-role]# ansible-playbook -s nginx.yml
[DEPRECATION WARNING]: The sudo command line option has been deprecated in favor of the "become" command line arguments. This feature will be removed in version 2.6.
Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
PLAY [install nginx from src] ***********************************************************************************************************************************************
TASK [nginx : add nginx user] ***********************************************************************************************************************************************
ok: [docker2]
TASK [nginx : install dep-rpms-pcre] ****************************************************************************************************************************************
ok: [docker2]
TASK [nginx : install dep-rpms-openssl] *************************************************************************************************************************************
ok: [docker2]
TASK [nginx : cp files to dest host] ****************************************************************************************************************************************
ok: [docker2]
TASK [nginx : ./configure nginx in /tmp/nginx-1.6.0] ************************************************************************************************************************
changed: [docker2]
TASK [nginx : make & make install] ******************************************************************************************************************************************
changed: [docker2]
TASK [nginx : start nginx] **************************************************************************************************************************************************
changed: [docker2]
TASK [nginx : replace nginx.conf] *******************************************************************************************************************************************
ok: [docker2]
TASK [nginx : check nginx syntax] *******************************************************************************************************************************************
changed: [docker2]
TASK [nginx : set index.html] ***********************************************************************************************************************************************
ok: [docker2]
TASK [nginx : get nginx index.html] *****************************************************************************************************************************************
ok: [docker2]
RUNNING HANDLER [nginx : restart nginx] *************************************************************************************************************************************
changed: [docker2]
PLAY RECAP ******************************************************************************************************************************************************************
docker2 : ok=12 changed=5 unreachable=0 failed=0