ansible-playbook编写服务器初始化脚本
1.原理:通过limit的参数,限制新定义的服务器。即可给新买的服务器初始化优化。(如下图所示)

首先我们编写一个总入口的palybook脚本: init.yml
---
- hosts: all
user: root
gather_facts: true
roles:
- ../../init

第二步:创建相对应的目录。这些目录都有各自的功能。
mkdir {file,tasks,vars} // 具体的目录和功能,可以上网查一下。
第三步:进入到vars目录下定义hosts的内置变量
vim main.yml
---
HOSTNAME: "{{ inventory_hostname }}"
IP: "{{ ansible_eth0['ipv4']['address'] }}"

第四步:进入到tasks目录下,创建任务的脚本。
main.yml作为整个tasks目录的总入口,是必须有这个配置

vim main.yml
---
- name: 复制 PS1 变量
copy:
src: ps1.sh
dest: /etc/profile.d/
- shell: source /etc/profile
- include_tasks: init_hostname.yml # include类似于子配置脚本。
- include_tasks: init_user.yml
- include_tasks: init_tools.yml
子脚本1
vim init_user.yml
---
# 创建用户。generate_ssh_key参数是生成公钥和私钥。我这里主要是生成.ssh目录,然后推送authorized_key
- name: create user
user: name="{{ item}}" append=yes generate_ssh_key=yes
with_items:
- ops
- dev
# 推送用到authorized_key模块
- name:
authorized_key: user={{ item }} key={{ lookup('file', '/home/{{ item }}/.ssh/id_rsa.pub') }}
with_items:
- ops
- dev
子脚本2
vim init_tools.yml
---
- name: 安装基本命令
yum: name={{ item }}
with_items:
- epel-release
- telnet
- vim
- unzip
- tree
- net-tools
- git
- screen
子脚本3
vim init_hostname.yml
---
- name: update file (/etc/sysconfig/network)
lineinfile:
dest: /etc/sysconfig/network
regexp: '^HOSTNAME'
line: 'HOSTNAME={{ HOSTNAME }}'
when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "" - name: execute hostname command
shell: hostname {{ HOSTNAME }}
when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "" - name: set hostname for centos7
shell: hostnamectl set-hostname "{{ HOSTNAME }}"
when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == ""
上面还定义了一个拷贝文件的任务。所以我们在要files的目录下,放上你要用到的文件

vim ps1.sh
# 更改 PS1 显示
export PS1='[\[\e[36m\]\u\[\e[33m\]@\[\e[34m\]\H\[\e[33m\]:\[\e[32m\]\w\[\e[0m\]]\$ '
# 历史命令
HISTSIZE=
这样,一个简单的role角本就写好了。下面我们来创建新的虚拟机,添加hosts文件。验证一下结果吧
添加hosts文件


验证结果

这样,通过ansible的playbook,就可以对新的服务器进行初始化了。
ansible-playbook编写服务器初始化脚本的更多相关文章
- ansible roles实践——服务器初始化
1.服务器初始化可以做哪些工作 关闭selinux ntp同步时间 修改dns为自建dns 配置ssh互信 修改yum源 设置主机名 内核参数优化 安装jdk 2.roles编写
- Ansible playbook编写Apache角色
编写Apache角色:使用源码安装 在files中下载扩展包和安装包 [root@localhost project]# ls roles/httpd/files/ apr-1.6.5.tar.gz ...
- Ansible playbook 批量修改服务器密码 先普通后root用户
fsckzy Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...
- Ubuntu 系统服务器初始化配置、安全加固、内核优化和常用软件安装的Shell脚本分享
转载自:https://www.bilibili.com/read/cv13875402?spm_id_from=333.999.0.0 描述: 适用于企业内部 Ubuntu 操作服务器初始化.系统安 ...
- CentOS7 系统服务器初始化配置、安全加固、内核升级优化常用软件安装的Shell脚本分享
转载自:https://www.bilibili.com/read/cv13875630?spm_id_from=333.999.0.0 描述: 适用于企业内部 CentOS7 系列操作服务器初始化. ...
- linux软件管理之------编译安装nginx服务器并手动编写自动化运行脚本
红帽系列的 linux软件管理分为三类:1. rpm 安装软件.2. yum 安装软件.3. 源码包编译安装.前面两种会在相关专题给出详细讲解.源码包的编译安装是非常关键的,我们知道linux的相关版 ...
- ansible笔记(10):初识ansible playbook
ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...
- 2.Ansible Playbook剧本
1.playbook?playbook翻译过来就是"剧本",那playbook组成如下 play: 定义的是主机的角色 task: 定义的是具体执行的任务 playbook: 由一 ...
- Ansible-playbook服务器初始化
一.什么是Playbook playbook可以理解为ansible的shell脚本,它是一个编排工具,作用是使用编排出能够重复利用的ansible脚本,并并发处理多台服务器. 二.playbook使 ...
随机推荐
- 基于云开发开发 Web 应用(四):引入统计及 Crash 收集
在完成了产品的基础开发以后,接下来需要进行一些周边的工作,这些周边工具将会帮助下一步优化产品. 为什么要加应用统计和 Crash 收集 不少开发者在开发的时候,很少会意识到需要添加应用统计和 Cras ...
- springboot入门学习1
springboot学习1 SpringBoot对Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑 业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中 ...
- mysql 中两个日期相减获得 天 小时 分钟 或者 小时:分钟的格式
/**有一个需求,要求获得两个日期想减的天数,小时数,分钟数.通过查找资料,于是乎我写出了如下代码,来获得两个字段.*/ IFNULL(CONCAT( ,'-',''), ),),'天')), ),) ...
- ACWING基础算法(三)
双指针算法. 相向双指针,指的是在算法的一开始,两根指针分别位于数组/字符串的两端,并相向行走. ACWING 的一道裸题(不知道为啥进不去404):最长连续不重复子序列 输入 5 1 2 2 3 5 ...
- 自定义View不显示的问题
问题描述: 我自定义了一个把 SwipeRefreshLayout 和 RecyclerView 封装在一起的 View ,但是发现 List 不能正常的显示出来,本以为是数据源出现问题,debug了 ...
- 网格视图GridView
1.常用属性 2.Adapter接口 3.Demo演示 今天观看了GridView的相关视频,并且根据案例,进行了代码的编写和实例 新建GridViewActivity.java继承AppCompat ...
- eclipse中tomcat添加或移除web项目出错,显示无资源能被添加或移除
错误截图 之前一直都能正常使用,今天莫名其妙出现这个错误 解决办法 https://blog.csdn.net/u012956987/article/details/79134474 右击项目,在属性 ...
- Iterator迭代器,获取集合元素
* Object next() :返回下一个元素 * boolean hasNext():判断时是否有元素可以获取 public static void main(String[] args ...
- 72)MFC测试动态共享库
动态共享库: 首先我建立一个新的动态库: 然后不选择空项目了,因为我们普通的cpp文件 入口是main win32入口是winmain 那么这个动态库的入口在哪里 我们就是为了看一看: 出来这样 ...
- torch基础学习
目录 Pytorch Leture 05: Linear Rregression in the Pytorch Way Logistic Regression 逻辑回归 - 二分类 Lecture07 ...