自動化運維_Ansible


1. 前言

Ansible是自動化運維的工具,基於Python開發,實現了批量系統配置、批量程序部署、批量運行命令等功能。

Ansible是基於模塊工作的,ansible提供一個框架,通過模塊實現批量部署。

2. 安裝,使用

2.1 安裝Ansible

使用epel的源安裝,添加epel源此處不詳述。

# yum install ansible --enablerepo=epel

2.2 設置密鑰登錄

生成SSH公鑰密鑰對

# ssh-keygen -t rsa -P ''

拷貝公鑰到被管理端的服務器

# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
# chmod 600 /root/.ssh/authorized_keys

確認可以用密鑰連接到管理端的服務器

2.3 配置Ansible

定義主機組,可以使用主機名或IP

# vi /etc/ansible/hosts
[tests]
test167
test154

另外,Ansible的配置文件在 /etc/ansible/ansible.cfg,默認不需要修改。

2.4 使用Ansible

2.4.1 Ping模塊

# ansible tests -m ping

2.4.2 執行命令,command、shell模塊

# ansible tests -m command -a 'uptime'
# ansible tests -m shell -a 'date'

# ansible tests -m command -a 'cat  /etc/resolv.conf'

2.4.3 查看配置,setup模塊

# ansible tests -m setup

2.4.4 拷貝文件,copy模塊

# ansible tests -m copy -a 'src=/home/ec2-user/test.txt dest=/tmp/test222.txt mode=0644'

2.4.5 添加用戶,user模塊

# ansible tests -m user -a 'name=test comment="test user" uid=1000 password="crypted-password"'

密碼生成方法:

# yum install python-pip
# pip install passlib

# python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt(getpass.getpass())"

2.4.6 安裝軟件,yum模塊

# ansible tests -m yum -a 'name=vsftpd state=present'

2.4.7 啟動服務,設置開機自啟動,service模塊

# ansible tests -m service -a 'name=vsftpd state=started enabled=yes'

查看

# ansible tests -m shell -a 'ps -ef| grep ftp'
# ansible tests -m shell -a 'ss -tln| grep 21'

2.4.8 支持管道,raw,shell模塊

# ansible tests -m raw -a 'ss -tln| grep 21'

2.5 其他命令

2.5.1 查看幫助

列出所有已安裝模塊

# ansible-doc -l

查看某模塊的簡介

# ansible-doc -s ping

2.5.2 ansible-pull

使用pull模式,(默認是push模式)

3. Playbook文件

Playbook是由一個或多個“play”組成的列表,可以讓它們聯同起來按事先編排的機制執行

# ansible-playbook test.yml

Playbook文件的格式,YAML是一個可讀性高的標記語言。

Role可以把playbook分成一個一個模塊,使結構更清晰。

3.1 Role的構造

包括 tasks, defaults, vars, files, templates, mata, handlers 各目錄,其中 tasks 是必需的。

3.2 Role的例子

本例子是最基本的構成,只包括tasks

3.2.1 創建目錄 roles/apache2/tasks

# mkdir -p roles/apache2/tasks

3.2.2 創建 tasks/main.yml

---
- name: Install apache2 (RedHat).
  yum: name=httpd
  when: "ansible_os_family == 'RedHat'"

- name: Install apache2 (Debian).
  apt: name=apache2
  when: "ansible_os_family == 'Debian'"

3.2.3 創建 Playbook (site.yml)

---
- name: Install Apache2
  hosts: tests
  remote_user: root

  roles:
    - apache2

3.2.4 執行

# ansible-playbook site.yml

3.3 官方的playbook例子

https://github.com/ansible/ansible-examples

3.4 playbook文件加密

ansible-vault 對配置文件(比如playbooks),進行基於密碼的加密,防止敏感信息泄露

3.4.1 加密已存在文件

# ansible-vault encrypt ./site.yml

3.4.2 加密並創建文件

# ansible-vault create filename

加密后的playbook

3.4.3 執行加密后的playbook

# ansible-playbook ./site.yml --ask-vault-pass

3.4.4 解密

# ansible-vault decrypt ./site.yml

4. 后記

Ansible使用簡單,不需要客戶端,模塊化程度高,定制靈活,當管理服務器的數量多的時候,能起到很大的幫助。是一個很好的自動化運維工具。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM