1.ansible简介
Ansible默认通过 SSH 协议管理机器,帮助自动化管理工作。安装Ansible之后,不需要启动或运行一个后台进程,或是添加一个数据库.只要在一台电脑(可以是一台笔记本)上安装好,就可以通过这台电脑管理一组远程的机器.在远程被管理的机器上,不需要安装运行任何软件,因此升级Ansible版本不会有太多问题。
2.ansible安装
$ sudo yum install epel-release -y
$ sudo yum install ansible –y
3.查看Ansible目录结构
$ rpm -ql ansible
配置文件目录:/etc/ansible/
执行文件目录:/usr/bin/
Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/
Help文档目录:/usr/share/doc/ansible-X.X.X/
Man文档目录:/usr/share/man/man1/
4.管理服务器Inventory文件
进入/etc/ansible编辑hosts文件,新增如下配置:
[jdk-nodes]
10.xx.xx.[1:100] ansible_ssh_port=22 ansible_ssh_pass=testcc #定义一个IP范围1到100
5.生成秘钥
将在/home/wxt下生成id_rsa及id_rsa.pub
ssh-keygen
6.向目标服务器分发秘钥
编写playbook脚本
---
- hosts: jdk-nodes
remote_user: wxt
tasks:
- name: copy ssh
authorized_key:
user: wxt
key: "{{ lookup('file','/home/wxt/.ssh/id_rsa.pub') }}"
检验语法是否正确
ansible-playbook ssh_push.yml --syntax-check
执行
ansible-playbook ssh_push.yml
playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
7.ping目标服务器
通过ping统一检查目标服务器ssh是否配置成功。
---
- hosts: jdk-nodes
remote_user: uaren
tasks:
- name: test connection
ping:
remote_user: uaren
检验语法是否正确
ansible-playbook test_collect.yml --syntax-check
执行
ansible-playbook test_collect.yml
8.ansible安装jdk
---
- hosts: jdk-nodes
remote_user: uaren
tasks:
- name: copy jdk-8u162-linux-x64.tar.gz remote hosts
copy: src=jdk-8u162-linux-x64.tar.gz dest=/usr/local/nlp/java
- name: tar jdk-8u162-linux-x64.tar.gz
shell: chdir=/usr/local/nlp/java tar zxf jdk-8u162-linux-x64.tar.gz
- name: delete old java_home in /etc/bashrc
become: yes
become_user: root
become_method: sudo
lineinfile:
dest: /etc/bashrc
state: absent
regexp: '^export JAVA_HOME='
tags:
- deleteexport JAVA_HOME=
- name: /etc/bashrc config
become: yes
become_user: root
become_method: sudo
lineinfile:
dest: /etc/bashrc
regexp: '^export JAVA_HOME='
insertafter: '^# vim:ts=4:sw=4'
line: 'export JAVA_HOME=/usr/local/nlp/java/jdk1.8.0_162'
tags:
- xxx
- name: /etc/bashrc source
shell: source /etc/bashrc
- name: delete old java_home in /etc/profile
become: yes
become_user: root
become_method: sudo
lineinfile:
dest: /etc/profile
state: absent
regexp: '^export JAVA_HOME='
tags:
- deleteexport JAVA_HOME=
- name: /etc/profile config
become: yes
become_user: root
become_method: sudo
lineinfile:
dest: /etc/profile
regexp: '^export JAVA_HOME='
insertbefore: '^export PATH='
line: 'export JAVA_HOME=/usr/local/nlp/java/jdk1.8.0_162'
tags:
- xxx
- name: /etc/profile source
shell: source /etc/profile
检验语法是否正确
ansible-playbook jdk_install.yml --syntax-check
执行
ansible-playbook jdk_install.yml