ansible笔记1&2:安装和基本使用
1. 安装部署
为了便于测试机上的项目管理,一般使用pyvenv进行项目部署,不影响系统全局,且每个项目都是一个独立的文件夹,目录清晰
关于更多的部署方式,ansible installation guide 说的很清楚,自行查阅
1.1 环境配置
OS:CentOS Linux release 7.6.1810 (Core)
Kernel:Linux VM_10_40_centos 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
具体:腾讯云 CVM,官方镜像
yum install -y python3 python3-devel
mkdir /app/ansible
pyvenv /app/ansible/py36
1.2 Ansible部署
ansible 安装
source /app/ansible/py36/bin/activate
pip install ansible
cd /app/ansible
# 新建几个工作目录
mkdir ansible-etc ansible-playbook ansible-plugins ansible-roles tmp
ansible.cfg 配置:到 ansible github 上找到配置文件样本 这里
wget https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg -O /app/ansible/ansible-etc/ansible.cfg
# 添加配置文件的路径到环境变量
vi /app/ansible/py36/bin/activate
# 添加以下两行
ANSIBLE_CONFIG="/app/ansible/ansible-etc/ansible.cfg"
export ANSIBLE_CONFIG
# 重置环境
source /app/ansible/py36/bin/activate
修改 ansible.cfg,因为我们的路径全变了,所以修改为:
[defaults]
inventory = /app/ansible/ansible-etc/hosts
library = /app/ansible/ansible-plugins/modules:/usr/share/ansible/plugins/modules
module_utils = /app/ansible/ansible-plugins/module_utils:/usr/share/ansible/plugins/module_utils
remote_tmp = /app/ansible/tmp
local_tmp = /app/ansible/tmp
inventory 创建
vi /app/ansible/ansible-etc/hosts
# 添加测试用例,10.3.10.40为本地lan地址
[test_server]
10.3.10.40 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=GIMDvZcgqhaYhWk9
测试一下,我们的cfg和Inventory都正常工作了
(py36) [root@VM_10_40_centos tmp]# ansible test_server -m ping
10.3.10.40 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
2. 基本使用
ansible 提供了大量的 Modules 给你直接使用,可以管理
- a10/bigip 这一类硬件负载均衡
- aci 这一类交换机
- aws/azure/vmware 这一类公有云/虚拟化
- docker 容器
- win/os 操作系统
- ...
2.1 Inventory
inventory 是 ansible 用来定义资源的账本,可以有多种定义方式,后面再深入
我们先定义一组server,组名为 test_01,名下有一台主机 10.0.0.40,详细内容有ssh相关信息
[test_01]
10.3.10.40 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=woshimima
2.2 CLI
通过 ansible 命令行工具,可以直接对主机组,或者主机IP进行操作和管理
(py36) [root@VM_10_40_centos tmp]# ansible test_01 -m command -a 'echo "Hello World"'
10.3.10.40 | CHANGED | rc=0 >>
Hello World
ansible命令行还可以支持更多选项,例如ssh选项,是否使用密钥,是否切换账号,账号密码,超时设置,线程数量。敲下 ansible --help查看
2.3 Playbook
playbook 是定义受控节点状态的配置文件,是文件即配置的思想,可以看到后期docker,k8s以及其它很多工具全部都是配置文件定义运行状态的路子
这是最佳的数据中心管理模式,但是很多传统企业没有这种意识,还是会依赖ITSM去进行事务管理,只会在操作层面进行自动化
运行playbook也叫”跑剧本”,做好角色,非常形象了
创建一个playbook,hello-world.yml,进行基本的OS管理
- hosts: test_01
tasks:
- name: Install Package BY Yum
yum:
name: "{{ packages }}"
vars:
packages:
- python3
- python3-devel
- nginx
- name: Remove Package BY Yum
yum:
name: nginx
state: absent
- name: Disable firewalld BY Systemctl
systemd:
name: firewalld
state: stopped
enabled: no
- name: Add os user 'zhangwei'
user:
name: zhangwei
password: default_password
update_password: on_create
shell: /bin/bash
groups: root
append: True
执行playbook,完成受控主机的配置
(py36) [root@VM_10_40_centos ansible]# ansible-playbook ansible-playbook/hello-world.yml
PLAY [test_01] **************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************
ok: [10.3.10.40]
TASK [Install Package BY Yum] ***********************************************************************************
changed: [10.3.10.40]
TASK [Remove Package BY Yum] ************************************************************************************
changed: [10.3.10.40]
TASK [Disable firewalld BY Systemctl] ***************************************************************************
ok: [10.3.10.40]
TASK [Add os user 'zhangwei'] ***********************************************************************************
[WARNING]: The input password appears not to have been hashed. The 'password' argument must be encrypted for
this module to work properly.
changed: [10.3.10.40]
PLAY RECAP ******************************************************************************************************
10.3.10.40 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ok:即为4个自定义task,和1个初始task(facts更新)的运行状态,全部正常。
changed:即3个task的操作触发了变更,包括了
- yum install nginx,安装上了,原来没有
- yum remove nginx,卸载掉了,因为刚刚安装了
- useradd zhangwei,创建了,原来没有
也有1个task是没有任何变化的,即 firewalld 的定义,因为原来就stop&disable了