1.原理:經過limit的參數,限制新定義的服務器。便可給新買的服務器初始化優化。(以下圖所示)git
首先咱們編寫一個總入口的palybook腳本: init.ymlshell
--- - hosts: all user: root gather_facts: true roles: - ../../init
第二步:建立相對應的目錄。這些目錄都有各自的功能。vim
mkdir {file,tasks,vars} // 具體的目錄和功能,能夠上網查一下。centos
第三步:進入到vars目錄下定義hosts的內置變量服務器
vim main.yml --- HOSTNAME: "{{ inventory_hostname }}" IP: "{{ ansible_eth0['ipv4']['address'] }}"
第四步:進入到tasks目錄下,建立任務的腳本。app
main.yml做爲整個tasks目錄的總入口,是必須有這個配置ssh
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
子腳本2centos7
vim init_tools.yml --- - name: 安裝基本命令 yum: name={{ item }} with_items: - epel-release - telnet - vim - unzip - tree - net-tools - git - screen
子腳本3spa
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,就能夠對新的服務器進行初始化了。