“Playbook”的版本间的差异
跳到导航
跳到搜索
(未显示同一用户的27个中间版本) | |||
第1行: | 第1行: | ||
− | == | + | =简单例子= |
+ | |||
+ | 在线playbook分享平台:https://galaxy.ansible.com | ||
+ | <pre> | ||
+ | ansible tree ansible-nginx | ||
+ | ansible-nginx | ||
+ | ├── files | ||
+ | │ └── nginx.conf.j2 | ||
+ | └── playbook.yml | ||
+ | |||
+ | 1 directory, 2 files | ||
+ | |||
+ | ➜ ansible-nginx cat files/nginx.conf.j2 | ||
+ | server { | ||
+ | listen 80; | ||
+ | |||
+ | root /tmp/; | ||
+ | index index.html index.htm; | ||
+ | |||
+ | server_name a.com; | ||
+ | |||
+ | location / { | ||
+ | default_type "text/html"; | ||
+ | try_files $uri.html $uri $uri/ =404; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ➜ ansible-nginx cat playbook.yml | ||
+ | --- | ||
+ | - hosts: d11 | ||
+ | name: playbook demo | ||
+ | become: yes | ||
+ | gather_facts: false | ||
+ | remote_user: root | ||
+ | become_user: root | ||
+ | tasks: | ||
+ | - name: Update apt cache and install Nginx | ||
+ | apt: | ||
+ | name: nginx | ||
+ | state: latest | ||
+ | update_cache: yes | ||
+ | |||
+ | - name: Apply Nginx template | ||
+ | template: | ||
+ | src: files/nginx.conf.j2 | ||
+ | dest: /etc/nginx/sites-available/default | ||
+ | notify: Restart Nginx | ||
+ | |||
+ | - name: Enable new site | ||
+ | file: | ||
+ | src: /etc/nginx/sites-available/default | ||
+ | dest: /etc/nginx/sites-enabled/default | ||
+ | state: link | ||
+ | notify: Restart Nginx | ||
+ | |||
+ | - name: Allow all access to tcp port 80 | ||
+ | ufw: | ||
+ | rule: allow | ||
+ | port: '80' | ||
+ | proto: tcp | ||
+ | |||
+ | handlers: | ||
+ | - name: Restart Nginx | ||
+ | service: | ||
+ | name: nginx | ||
+ | state: restarted | ||
+ | |||
+ | |||
+ | ansible-playbook -C playbook.yml | ||
+ | ansible-playbook playbook.yml | ||
+ | |||
+ | |||
+ | |||
+ | </pre> | ||
+ | =galaxy.ansible= | ||
+ | |||
+ | 找几个例子看看 | ||
+ | |||
+ | https://galaxy.ansible.com/andrewrothstein/java-oracle-jdk | ||
+ | |||
+ | |||
+ | https://galaxy.ansible.com/sansible/golang | ||
+ | |||
+ | <pre> | ||
+ | #快速创建role文件与目录 | ||
+ | ansible ansible-galaxy init --init-path playbooks/roles web | ||
+ | - Role web was created successfully | ||
+ | ➜ ansible | ||
+ | |||
+ | ansible tree playbooks/roles/web | ||
+ | playbooks/roles/web | ||
+ | ├── defaults | ||
+ | │ └── main.yml | ||
+ | ├── files | ||
+ | ├── handlers | ||
+ | │ └── main.yml | ||
+ | ├── meta | ||
+ | │ └── main.yml | ||
+ | ├── README.md | ||
+ | ├── tasks | ||
+ | │ └── main.yml | ||
+ | ├── templates | ||
+ | ├── tests | ||
+ | │ ├── inventory | ||
+ | │ └── test.yml | ||
+ | └── vars | ||
+ | └── main.yml | ||
+ | |||
+ | 8 directories, 8 files | ||
+ | |||
+ | |||
+ | </pre> | ||
+ | |||
+ | =基本语法= | ||
+ | == 3.4.4 条件语句== | ||
+ | <pre> | ||
+ | #如果是debian类,关机 | ||
+ | playbooks cat when.yml | ||
+ | --- | ||
+ | - name: shtudown | ||
+ | hosts: pi3 | ||
+ | tasks: | ||
+ | - name: shutdown if debian | ||
+ | command: /sbin/shutdown -t now | ||
+ | when: ansible_os_family =="Debian" | ||
+ | |||
+ | |||
+ | #更加好的例子 | ||
+ | --- | ||
+ | - name: Install vim | ||
+ | hosts: all | ||
+ | tasks: | ||
+ | - name:Install VIM via yum | ||
+ | yum: | ||
+ | name: vim-enhanced | ||
+ | state: installed | ||
+ | when: ansible_os_family =="RedHat" | ||
+ | |||
+ | - name:Install VIM via apt | ||
+ | apt: | ||
+ | name: vim | ||
+ | state: installed | ||
+ | when: ansible_os_family =="Debian" | ||
+ | |||
+ | - name: Unexpected OS family | ||
+ | debug: msg="OS Family {{ ansible_os_family }} is not supported" fail=yes | ||
+ | when: not ansible_os_family =="RedHat" or ansible_os_family =="Debian" | ||
+ | |||
+ | |||
+ | </pre> | ||
+ | |||
+ | [https://www.cnblogs.com/breezey/p/10996632.html Ansible14:Playbook条件语句] | ||
+ | == 3.4.5循环控制== | ||
+ | <pre> | ||
+ | 一般书上都是用with_item | ||
+ | cat loop-user2.yml | ||
+ | --- | ||
+ | - name: create user | ||
+ | hosts: pi3 | ||
+ | tasks: | ||
+ | - name: create user | ||
+ | user: | ||
+ | name: "{{ item }}" | ||
+ | state: present | ||
+ | with_items: | ||
+ | - user04 | ||
+ | - user05 | ||
+ | - user06 | ||
+ | |||
+ | - name: set password | ||
+ | shell: echo 'e12345678' | passwd --stdin "{{ item }}" | ||
+ | with_items: | ||
+ | - user04 | ||
+ | - user05 | ||
+ | - user06 | ||
+ | |||
+ | |||
+ | |||
+ | ➜ ansible cat loop-user.yml | ||
+ | --- | ||
+ | - name: create user | ||
+ | hosts: pi3 | ||
+ | tasks: | ||
+ | - name: create user | ||
+ | user: | ||
+ | name: "{{ item }}" | ||
+ | state: present | ||
+ | loop: | ||
+ | - user01 | ||
+ | - user02 | ||
+ | - user03 | ||
+ | |||
+ | - name: set password | ||
+ | shell: echo 'e12345678' | passwd --stdin "{{ item }}" | ||
+ | loop: | ||
+ | - user01 | ||
+ | - user02 | ||
+ | - user03 | ||
+ | |||
+ | |||
+ | ansible-playbook -C loop-user.yml | ||
+ | ansible-playbook loop-user.yml | ||
+ | |||
+ | |||
+ | 执行后查看结果 | ||
+ | |||
+ | root@mypi3b:~# cat /etc/passwd | grep user | ||
+ | root@mypi3b:~# | ||
+ | root@mypi3b:~# cat /etc/passwd | grep user | ||
+ | user01:x:1003:1004::/home/user01:/bin/sh | ||
+ | user02:x:1004:1005::/home/user02:/bin/sh | ||
+ | user03:x:1005:1006::/home/user03:/bin/sh | ||
+ | root@mypi3b:~# su - user01 | ||
+ | $ hostname | ||
+ | mypi3b | ||
+ | $ id | ||
+ | uid=1003(user01) gid=1004(user01) groups=1004(user01) | ||
+ | </pre> | ||
+ | |||
+ | ==3.4.6 include语法 == | ||
+ | <pre> | ||
+ | playbook中代码复用非常爽,eg task | ||
+ | --- | ||
+ | - tasks: | ||
+ | - include: a.yml user=root | ||
+ | - include: b.yml user=root | ||
+ | - include: c.yml user=root | ||
+ | |||
+ | |||
+ | 或者是下面的多个项目用一个脚本的例子 | ||
+ | |||
+ | |||
+ | ➜ playbooks cat restart_ng.yml | ||
+ | - name: Restart ng Server | ||
+ | service: | ||
+ | name: nginx | ||
+ | state: restarted | ||
+ | |||
+ | |||
+ | ➜ playbooks cat a.yml | ||
+ | - hosts: pi3 | ||
+ | tasks: | ||
+ | - name: A Project command | ||
+ | command: echo "A" | ||
+ | |||
+ | - name: Restart ng | ||
+ | include: restart_ng.yml | ||
+ | ➜ playbooks cat b.yml | ||
+ | - hosts: mytmp | ||
+ | tasks: | ||
+ | - name: A Project command | ||
+ | command: echo "A" | ||
+ | |||
+ | - name: Restart ng | ||
+ | include: restart_ng.yml | ||
+ | |||
+ | ansible-playbook a.yml | ||
+ | ansible-playbook b.yml | ||
+ | |||
+ | |||
+ | 成功执行后 查看结果 | ||
+ | |||
+ | nsible pi3 -m shell -a "systemctl status nginx" | ||
+ | 192.168.10.5 | CHANGED | rc=0 >> | ||
+ | ● nginx.service - A high performance web server and a reverse proxy server | ||
+ | Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) | ||
+ | Active: active (running) since Thu 2023-08-24 12:59:57 CST; 3min ago | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </pre> | ||
+ | |||
+ | ===Inlcude结合tags应用=== | ||
+ | <pre> | ||
+ | ”include”不仅能够引用任务列表,还能够引用playbook,比如,在一个playbook中引用另一个playbook。 | ||
+ | |||
+ | 示例:通过指定标签 tags ,来说明是安装 tomcat8 还是 tomcat9 | ||
+ | |||
+ | 1.准备入口 main.yml 文件,然后包含 install_tomcat8.yml 以及install_tomcat9.yml | ||
+ | |||
+ | 2.在执行 main.yml 时,需要通过 --tags 指明要安装的版本 | ||
+ | |||
+ | 3.还可以在主playbook文件中向引用的playbook传递变量。 | ||
+ | |||
+ | 编写main.yml入口文件: | ||
+ | # cat tomcat_main.yml | ||
+ | - name: Install Tomcat8 | ||
+ | import_playbook: install_tomcat8.yml | ||
+ | tags: tomcat8 | ||
+ | vars: | ||
+ | tomcat_version: 8.5.69 | ||
+ | tomcat_install_path: /usr/local | ||
+ | |||
+ | - name: Install Tomcat9 | ||
+ | import_playbook: install_tomcat9.yml | ||
+ | tags: tomcat9 | ||
+ | vars: | ||
+ | tomcat_version: 9.0.50 | ||
+ | tomcat_install_path: /usr/local | ||
+ | |||
+ | 编写install_tomcat8.yml文件 | ||
+ | cat install_tomcat8.yml | ||
+ | --- | ||
+ | - hosts: localhost | ||
+ | |||
+ | tasks: | ||
+ | - name: Install JDK | ||
+ | yum: | ||
+ | name: java-1.8.0-openjdk | ||
+ | state: present | ||
+ | |||
+ | - name: Download Tomacat | ||
+ | get_url: | ||
+ | url: https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz | ||
+ | dest: /root | ||
+ | |||
+ | - name: Unarchive Tomcat | ||
+ | unarchive: | ||
+ | src: /root/apache-tomcat-{{ tomcat_version }}.tar.gz | ||
+ | dest: "{{ tomcat_install_path }}" | ||
+ | |||
+ | - name: Create Link File | ||
+ | file: | ||
+ | src: "{{ tomcat_install_path }}/apache-tomcat-{{ tomcat_version }}" | ||
+ | dest: "{{ tomcat_install_path }}/tomcat8" | ||
+ | state: link | ||
+ | |||
+ | - name: Start Tomcat | ||
+ | shell: cd "{{ tomcat_install_path }}"/tomcat8/bin && nohup ./startup.sh & | ||
+ | |||
+ | 编写install_tomcat9.yml文件: | ||
+ | cat install_tomcat9.yml | ||
+ | --- | ||
+ | - hosts: localhost | ||
+ | |||
+ | tasks: | ||
+ | - name: Install JDK | ||
+ | yum: | ||
+ | name: java-1.8.0-openjdk | ||
+ | state: present | ||
+ | |||
+ | - name: Download Tomacat | ||
+ | get_url: | ||
+ | url: https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz | ||
+ | dest: /root | ||
+ | |||
+ | - name: Unarchive Tomcat | ||
+ | unarchive: | ||
+ | src: /root/apache-tomcat-{{ tomcat_version }}.tar.gz | ||
+ | dest: "{{ tomcat_install_path }}" | ||
+ | |||
+ | - name: Create Link File | ||
+ | file: | ||
+ | src: "{{ tomcat_install_path }}/apache-tomcat-{{ tomcat_version }}" | ||
+ | dest: "{{ tomcat_install_path }}/tomcat9" | ||
+ | state: link | ||
+ | |||
+ | - name: Start Tomcat | ||
+ | shell: cd "{{ tomcat_install_path }}"/tomcat9/bin && nohup ./startup.sh & | ||
+ | |||
+ | #安装tomcat9 | ||
+ | [root@xuzhichao playbook]# ansible-playbook -t tomcat9 tomcat_main.yml | ||
+ | |||
+ | #安装tomcat8 | ||
+ | [root@xuzhichao playbook]# ansible-playbook -t tomcat8 tomcat_main.yml | ||
+ | |||
+ | </pre> | ||
+ | https://blog.51cto.com/u_15127516/3557509 | ||
+ | |||
+ | [https://blog.csdn.net/qq_43714097/article/details/128952860 [Ansible系列<nowiki>]</nowiki>ansible-playbook之include和import] | ||
+ | |||
+ | [https://www.cnblogs.com/ccbloom/p/15508703.html ansible10:include说明] | ||
+ | |||
+ | ==pre-tasks and post-tasks == | ||
+ | <pre> | ||
+ | --- | ||
+ | - hosts: www | ||
+ | remote_user: vagrant | ||
+ | sudo: yes | ||
+ | pre_tasks: | ||
+ | - name: update the apt cache | ||
+ | apt: update_cache=yes | ||
+ | - shell: echo 'I":" Beginning to configure web server..' | ||
+ | roles: | ||
+ | - nginx | ||
+ | post_tasks: | ||
+ | - shell: echo 'I":" Done configuring nginx web server...' | ||
+ | </pre> | ||
+ | https://www.oreilly.com/library/view/ansible-playbook-essentials/9781784398293/ch02s09.html | ||
+ | |||
+ | =常用 role 及playgook 例子= | ||
+ | ==playbook 安装golang == | ||
+ | |||
+ | ===pre config=== | ||
+ | <pre> | ||
+ | #pre config | ||
+ | cat /etc/ansible/ansible.cfg | ||
+ | [defaults] | ||
+ | inventory = /home/evan/ansible/inventory/hosts | ||
+ | roles_path = /home/evan/ansible/playbooks/roles | ||
+ | |||
+ | cat ~/ansible/inventory/hosts | ||
+ | [mytmp] | ||
+ | 192.168.10.7 ansible_user=root | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | == 目录== | ||
+ | <pre> | ||
+ | ├── go.yml | ||
+ | ├── roles | ||
+ | │ └── go_install | ||
+ | │ ├── files | ||
+ | │ │ └── go1.17.1.linux-amd64.tar.gz | ||
+ | │ ├── tasks | ||
+ | │ │ ├── copy.yml | ||
+ | │ │ ├── install.yml | ||
+ | │ │ └── main.yml | ||
+ | │ └── templates | ||
+ | │ └── go_install.sh | ||
+ | |||
+ | </pre> | ||
+ | ==文件详情== | ||
+ | <pre> | ||
+ | cat go.yml | ||
+ | --- | ||
+ | - name: Installing Go from source | ||
+ | hosts: mytmp | ||
+ | remote_user: root | ||
+ | roles: | ||
+ | - go_install | ||
+ | |||
+ | ********** | ||
+ | cat copy.yml | ||
+ | - name: copy go_tgz to client | ||
+ | copy: src=/home/evan/ansible/playbooks/roles/go_install/files/go1.17.1.linux-amd64.tar.gz dest=/usr/local/src/ | ||
+ | - name: copy install_go_script to client | ||
+ | copy: src=/home/evan/ansible/playbooks/roles/go_install/templates/go_install.sh dest=/tmp/go_install.sh owner=root group=root mode=755 | ||
+ | |||
+ | cat install.yml | ||
+ | - name: install go | ||
+ | shell: /bin/bash /tmp/go_install.sh | ||
+ | |||
+ | cat main.yml | ||
+ | - include_tasks: copy.yml | ||
+ | - include_tasks: install.yml | ||
+ | |||
+ | cat templates/go_install.sh | ||
+ | #!/bin/bash | ||
+ | # install golang | ||
+ | # yum tools | ||
+ | |||
+ | yum -y groupinstall "Development tools" | ||
+ | yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel | ||
+ | cd /usr/local/src | ||
+ | tar -C /usr/local -xzf go1.17.1.linux-amd64.tar.gz | ||
+ | echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile | ||
+ | source /etc/profile | ||
+ | # end | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | [[https://github.com/evan886/my-ansible/tree/main/ansible4goins 详情代码可见我的github,有小改动]] | ||
=refer= | =refer= | ||
+ | https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_roles.html#dynamic-versus-static-includes | ||
+ | |||
[https://blog.51cto.com/u_13630803/2154192 Ansible之Playbook详解、案例] | [https://blog.51cto.com/u_13630803/2154192 Ansible之Playbook详解、案例] | ||
[https://www.jianshu.com/p/c41427cf5264 通过ansible安装中间件(jdk,nginx,mysql,etcd集群)] | [https://www.jianshu.com/p/c41427cf5264 通过ansible安装中间件(jdk,nginx,mysql,etcd集群)] | ||
+ | [https://juejin.cn/post/6844903631066513421 (playbook ins zbx还不错) ansible自动化运维详细教程及playbook详解 ] | ||
+ | |||
+ | |||
+ | |||
+ | [https://blog.devgenius.io/how-to-install-nginx-using-ansible-playbook-48e2aa74f944?gi=19b433cc3a8d How to Install Nginx using Ansible Playbook] | ||
+ | |||
+ | |||
+ | [https://www.cnblogs.com/vincenshen/p/12587749.html Ansible Loop循环控制] | ||
+ | |||
+ | 官网参考文档: | ||
+ | |||
+ | loops: https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html | ||
+ | |||
+ | filters: https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html | ||
[[category:devops]][[category:ansible]] | [[category:devops]][[category:ansible]] |
2023年8月30日 (三) 02:32的版本
目录
简单例子
在线playbook分享平台:https://galaxy.ansible.com
ansible tree ansible-nginx ansible-nginx ├── files │ └── nginx.conf.j2 └── playbook.yml 1 directory, 2 files ➜ ansible-nginx cat files/nginx.conf.j2 server { listen 80; root /tmp/; index index.html index.htm; server_name a.com; location / { default_type "text/html"; try_files $uri.html $uri $uri/ =404; } } ➜ ansible-nginx cat playbook.yml --- - hosts: d11 name: playbook demo become: yes gather_facts: false remote_user: root become_user: root tasks: - name: Update apt cache and install Nginx apt: name: nginx state: latest update_cache: yes - name: Apply Nginx template template: src: files/nginx.conf.j2 dest: /etc/nginx/sites-available/default notify: Restart Nginx - name: Enable new site file: src: /etc/nginx/sites-available/default dest: /etc/nginx/sites-enabled/default state: link notify: Restart Nginx - name: Allow all access to tcp port 80 ufw: rule: allow port: '80' proto: tcp handlers: - name: Restart Nginx service: name: nginx state: restarted ansible-playbook -C playbook.yml ansible-playbook playbook.yml
galaxy.ansible
找几个例子看看
https://galaxy.ansible.com/andrewrothstein/java-oracle-jdk
https://galaxy.ansible.com/sansible/golang
#快速创建role文件与目录 ansible ansible-galaxy init --init-path playbooks/roles web - Role web was created successfully ➜ ansible ansible tree playbooks/roles/web playbooks/roles/web ├── defaults │ └── main.yml ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── README.md ├── tasks │ └── main.yml ├── templates ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml 8 directories, 8 files
基本语法
3.4.4 条件语句
#如果是debian类,关机 playbooks cat when.yml --- - name: shtudown hosts: pi3 tasks: - name: shutdown if debian command: /sbin/shutdown -t now when: ansible_os_family =="Debian" #更加好的例子 --- - name: Install vim hosts: all tasks: - name:Install VIM via yum yum: name: vim-enhanced state: installed when: ansible_os_family =="RedHat" - name:Install VIM via apt apt: name: vim state: installed when: ansible_os_family =="Debian" - name: Unexpected OS family debug: msg="OS Family {{ ansible_os_family }} is not supported" fail=yes when: not ansible_os_family =="RedHat" or ansible_os_family =="Debian"
3.4.5循环控制
一般书上都是用with_item cat loop-user2.yml --- - name: create user hosts: pi3 tasks: - name: create user user: name: "{{ item }}" state: present with_items: - user04 - user05 - user06 - name: set password shell: echo 'e12345678' | passwd --stdin "{{ item }}" with_items: - user04 - user05 - user06 ➜ ansible cat loop-user.yml --- - name: create user hosts: pi3 tasks: - name: create user user: name: "{{ item }}" state: present loop: - user01 - user02 - user03 - name: set password shell: echo 'e12345678' | passwd --stdin "{{ item }}" loop: - user01 - user02 - user03 ansible-playbook -C loop-user.yml ansible-playbook loop-user.yml 执行后查看结果 root@mypi3b:~# cat /etc/passwd | grep user root@mypi3b:~# root@mypi3b:~# cat /etc/passwd | grep user user01:x:1003:1004::/home/user01:/bin/sh user02:x:1004:1005::/home/user02:/bin/sh user03:x:1005:1006::/home/user03:/bin/sh root@mypi3b:~# su - user01 $ hostname mypi3b $ id uid=1003(user01) gid=1004(user01) groups=1004(user01)
3.4.6 include语法
playbook中代码复用非常爽,eg task --- - tasks: - include: a.yml user=root - include: b.yml user=root - include: c.yml user=root 或者是下面的多个项目用一个脚本的例子 ➜ playbooks cat restart_ng.yml - name: Restart ng Server service: name: nginx state: restarted ➜ playbooks cat a.yml - hosts: pi3 tasks: - name: A Project command command: echo "A" - name: Restart ng include: restart_ng.yml ➜ playbooks cat b.yml - hosts: mytmp tasks: - name: A Project command command: echo "A" - name: Restart ng include: restart_ng.yml ansible-playbook a.yml ansible-playbook b.yml 成功执行后 查看结果 nsible pi3 -m shell -a "systemctl status nginx" 192.168.10.5 | CHANGED | rc=0 >> ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2023-08-24 12:59:57 CST; 3min ago
Inlcude结合tags应用
”include”不仅能够引用任务列表,还能够引用playbook,比如,在一个playbook中引用另一个playbook。 示例:通过指定标签 tags ,来说明是安装 tomcat8 还是 tomcat9 1.准备入口 main.yml 文件,然后包含 install_tomcat8.yml 以及install_tomcat9.yml 2.在执行 main.yml 时,需要通过 --tags 指明要安装的版本 3.还可以在主playbook文件中向引用的playbook传递变量。 编写main.yml入口文件: # cat tomcat_main.yml - name: Install Tomcat8 import_playbook: install_tomcat8.yml tags: tomcat8 vars: tomcat_version: 8.5.69 tomcat_install_path: /usr/local - name: Install Tomcat9 import_playbook: install_tomcat9.yml tags: tomcat9 vars: tomcat_version: 9.0.50 tomcat_install_path: /usr/local 编写install_tomcat8.yml文件 cat install_tomcat8.yml --- - hosts: localhost tasks: - name: Install JDK yum: name: java-1.8.0-openjdk state: present - name: Download Tomacat get_url: url: https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz dest: /root - name: Unarchive Tomcat unarchive: src: /root/apache-tomcat-{{ tomcat_version }}.tar.gz dest: "{{ tomcat_install_path }}" - name: Create Link File file: src: "{{ tomcat_install_path }}/apache-tomcat-{{ tomcat_version }}" dest: "{{ tomcat_install_path }}/tomcat8" state: link - name: Start Tomcat shell: cd "{{ tomcat_install_path }}"/tomcat8/bin && nohup ./startup.sh & 编写install_tomcat9.yml文件: cat install_tomcat9.yml --- - hosts: localhost tasks: - name: Install JDK yum: name: java-1.8.0-openjdk state: present - name: Download Tomacat get_url: url: https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz dest: /root - name: Unarchive Tomcat unarchive: src: /root/apache-tomcat-{{ tomcat_version }}.tar.gz dest: "{{ tomcat_install_path }}" - name: Create Link File file: src: "{{ tomcat_install_path }}/apache-tomcat-{{ tomcat_version }}" dest: "{{ tomcat_install_path }}/tomcat9" state: link - name: Start Tomcat shell: cd "{{ tomcat_install_path }}"/tomcat9/bin && nohup ./startup.sh & #安装tomcat9 [root@xuzhichao playbook]# ansible-playbook -t tomcat9 tomcat_main.yml #安装tomcat8 [root@xuzhichao playbook]# ansible-playbook -t tomcat8 tomcat_main.yml
https://blog.51cto.com/u_15127516/3557509
[Ansible系列]ansible-playbook之include和import
pre-tasks and post-tasks
--- - hosts: www remote_user: vagrant sudo: yes pre_tasks: - name: update the apt cache apt: update_cache=yes - shell: echo 'I":" Beginning to configure web server..' roles: - nginx post_tasks: - shell: echo 'I":" Done configuring nginx web server...'
https://www.oreilly.com/library/view/ansible-playbook-essentials/9781784398293/ch02s09.html
常用 role 及playgook 例子
playbook 安装golang
pre config
#pre config cat /etc/ansible/ansible.cfg [defaults] inventory = /home/evan/ansible/inventory/hosts roles_path = /home/evan/ansible/playbooks/roles cat ~/ansible/inventory/hosts [mytmp] 192.168.10.7 ansible_user=root
目录
├── go.yml ├── roles │ └── go_install │ ├── files │ │ └── go1.17.1.linux-amd64.tar.gz │ ├── tasks │ │ ├── copy.yml │ │ ├── install.yml │ │ └── main.yml │ └── templates │ └── go_install.sh
文件详情
cat go.yml --- - name: Installing Go from source hosts: mytmp remote_user: root roles: - go_install ********** cat copy.yml - name: copy go_tgz to client copy: src=/home/evan/ansible/playbooks/roles/go_install/files/go1.17.1.linux-amd64.tar.gz dest=/usr/local/src/ - name: copy install_go_script to client copy: src=/home/evan/ansible/playbooks/roles/go_install/templates/go_install.sh dest=/tmp/go_install.sh owner=root group=root mode=755 cat install.yml - name: install go shell: /bin/bash /tmp/go_install.sh cat main.yml - include_tasks: copy.yml - include_tasks: install.yml cat templates/go_install.sh #!/bin/bash # install golang # yum tools yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel cd /usr/local/src tar -C /usr/local -xzf go1.17.1.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile source /etc/profile # end
refer
通过ansible安装中间件(jdk,nginx,mysql,etcd集群)
(playbook ins zbx还不错) ansible自动化运维详细教程及playbook详解
How to Install Nginx using Ansible Playbook
官网参考文档:
loops: https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html
filters: https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html