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 == "6" - name: execute hostname command shell: hostname {{ HOSTNAME }} when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "6" - name: set hostname for centos7 shell: hostnamectl set-hostname "{{ HOSTNAME }}" when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "7"
上面还定义了一个拷贝文件的任务。所以我们在要files的目录下,放上你要用到的文件
vim ps1.sh # 更改 PS1 显示 export PS1='[\[\e[36m\]\u\[\e[33m\]@\[\e[34m\]\H\[\e[33m\]:\[\e[32m\]\w\[\e[0m\]]\$ ' # 历史命令 HISTSIZE=100000
这样,一个简单的role角本就写好了。下面我们来创建新的虚拟机,添加hosts文件。验证一下结果吧
添加hosts文件
验证结果
这样,通过ansible的playbook,就可以对新的服务器进行初始化了。