如何在Ubuntu 16.04上设置Ansible

在本文中,我们将学习如何配置Ansible –自动化配置管理系统。Anisble是一种配置管理系统,可以通过易于管理的方式控制大量客户端计算机,并且可以从中央位置自动进行管理。

Anisble通过SSH隧道进行通信,不需要在客户端计算机上安装任何软件,它会从发出命令并复制文件的远程ansible计算机中检索信息。

Anisble配置文件主要使用YAML数据格式,这可能是由于具有流行语言相似性的表现形式所致。客户端可以使用命令行或剧本进行通信。

先决条件

  • 我们需要Ubuntu 16.04和具有sudo权限的非root用户。

  • 用户需要的SSH键。

安装Ansible onf Ubuntu 16.04

由于我们需要在一台计算机上安装Anisble软件,因此Ubuntu默认存储库中没有Ansible,因此我们将Anisble个人软件包存档添加到系统中。

以下是添加存储库的命令–

$ sudo apt-add-repository ppa:ansible/ansible
Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications — automate in a language that approaches plain English, using SSH, with no agents to install on remote systems.
http://ansible.com/
More info: https://launchpad.net/~ansible/+archive/ubuntu/ansible
Press [ENTER] to continue or ctrl-c to cancel adding it
gpg: keyring `/tmp/tmp8ffrbkin/secring.gpg' created
gpg: keyring `/tmp/tmp8ffrbkin/pubring.gpg' created
gpg: requesting key 7BB9C367 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmp8ffrbkin/trustdb.gpg: trustdb created
gpg: key 7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK

在将Ansible PPA添加到本地计算机之后,我们需要更新Linux,以便将软件包存储库添加到该计算机。

$ sudo apt-get update –y
Hit:1 http://security.ubuntu.com/ubuntu xenial-security InRelease
Hit:2 http://in.archive.ubuntu.com/ubuntu xenial InRelease
Get:3 http://ppa.launchpad.net/ansible/ansible/ubuntu xenial InRelease [18.1 kB]
Hit:4 http://in.archive.ubuntu.com/ubuntu xenial-updates InRelease
Hit:5 http://in.archive.ubuntu.com/ubuntu xenial-backports InRelease
Get:6 http://ppa.launchpad.net/ansible/ansible/ubuntu xenial/main amd64 Packages [552 B]
Get:7 http://ppa.launchpad.net/ansible/ansible/ubuntu xenial/main i386 Packages [552 B]
Get:8 http://ppa.launchpad.net/ansible/ansible/ubuntu xenial/main Translation-en [340 B]
Fetched 19.5 kB in 1s (18.2 kB/s)
Reading package lists... Done

软件包存储库更新后,我们将使用以下命令安装Ansible。

$ sudo apt-get install ansible
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libyaml-0-2 python python-crypto
python-ecdsa python-httplib2 python-jinja2 python-markupsafe python-minimal python-paramiko
python-pkg-resources python-setuptools python-six python-ya
l python2.7 python2.7-minimal
sshpass
Suggested packages:
python-doc python-tk python-crypto-dbg python-crypto-doc python-jinja2-doc
python-setuptools-doc python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
ansible libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libyaml-0-2 python
python-crypto python-ecdsa python-httplib2 python-jinja2 python-markupsafe python-minimal
python-paramiko python-pkg-resources python-setuptools python-six python-yaml python2.7
python2.7-minimal sshpass
0 upgraded, 20 newly installed, 0 to remove and 12 not upgraded.
Need to get 6,145 kB of archives.
After this operation, 30.7 MB of additional disk space will be used.
…
…
…
…
Get:19 http://in.archive.ubuntu.com/ubuntu xenial/main amd64 python-setuptools all 20.7.0-1 [169 kB]
Get:20 http://in.archive.ubuntu.com/ubuntu xenial/universe amd64 sshpass amd64 1.05-1 [10.5 kB]
Fetched 6,145 kB in 8s (761 kB/s)
Selecting previously unselected package libyaml-0-2:amd64.
(Reading database ... 91811 files and directories currently installed.)
Preparing to unpack .../libyaml-0-2_0.1.6-3_amd64.deb ...
Unpacking libyaml-0-2:amd64 (0.1.6-3) ...
Selecting previously unselected package libpython2.7-minimal:amd64.
Preparing to unpack .../libpython2.7-minimal_2.7.12-1~16.04_amd64.deb ...
Unpacking libpython2.7-minimal:amd64 (2.7.12-1~16.04) ...
Selecting previously unselected package python2.7-minimal.
Preparing to unpack .../python2.7-minimal_2.7.12-1~16.04_amd64.deb ...
Selecting previously unselected package python-setuptools.
Preparing to unpack .../python-setuptools_20.7.0-1_all.deb ...
Unpacking python-setuptools (20.7.0-1) ...
Setting up python-httplib2 (0.9.1+dfsg-1) ...
Setting up python-pkg-resources (20.7.0-1) ...
Setting up python-setuptools (20.7.0-1) ...
Setting up sshpass (1.05-1) ...
Setting up ansible (2.1.1.0-1ppa~xenial) ...
Processing triggers for libc-bin (2.23-0ubuntu3) ...

Ansible主机配置

我们需要从“主机”文件中跟踪所有服务器和客户端,我们需要创建“主机”文件,以便开始与其他客户端或服务器计算机的通信。

$ sudo nano /etc/ansible/hosts

当我们打开配置文件时,我们将看到所有带注释的行,并且文件中的任何配置都无法正常工作,我们需要添加以下演示计算机。

添加用于在组中添加主机或客户端的常规语法。

[group_name]
Alias anisible_ssh_host=your_ansible_server_ip_address

演示配置文件

[Ansible_server]
Client1 ansible_ssh_host=192.168.0.10
Client2 ansible_ssh_host=192.168.0.11

我们需要进行设置,以便将SSH键复制到所有客户端计算机,以便无需任何密码即可对它们进行授权。

在我们的场景中,我们使用两台客户端计算机,并且所有客户端计算机都可以使用SSH键进行访问,而不会提示输入密码。

在当前配置下,如果我们尝试使用Ansible连接到主机,则命令将失败,因为SSh键已与root用户连接,我们将看到以下错误

Client1 | UNREACHABLE! => {
   "changed": false,
   "msg": "无法通过ssh连接到主机。",
   "unreachable": true
}

我们将创建一个文件,该文件告诉服务器将使用客户端计算机的root用户进行连接。

$ sudo mkdir /etc/ansible/group_vars
$ sudo vi /etc/ansible/group_vars/servers
---
Ansible_ssh_user: root

我们必须在YAML文件的开头放置“ —”。

如果要在某个位置指定所有服务器,我们需要在/ etc / ansible / group_vars / all中提供这些详细信息。

执行简单的Ansible命令

为了测试我们的配置,我们运行以下命令,它将对配置文件中的所有客户端执行ping操作。

$ ansible –m ping all
Client1 | SUCCESS => {
   "changed": false,
   "ping": "pong"
   }
   Client2 | SUCCESS => {
      "changed": false,
      "ping": "pong"
   }

我们还可以通过以下示例ping通各个客户。

如果我们要对整个群组执行ping操作,我们将使用以下命令

$ ansible –m ping servers

如果我们要ping单个客户端或计算机,我们将使用以下命令

$ ansible –m ping clien1

我们可以使用shell模块从Anisble到客户端运行终端命令。

$ ansible –m shell –a ‘df –h’ client1
Client1 | SUCCESS | rc=0 >>
df -h
Filesystem Size Used Avail Use% Mounted on
udev 973M 0 973M 0% /dev
tmpfs 199M 5.9M 193M 3% /run
/dev/mapper/ubuntu16--vg-root 18G 1.7G 15G 11% /
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 472M 101M 347M 23% /boot
tmpfs 100K 0 100K 0% /run/lxcfs/controllers
tmpfs 199M 0 199M 0% /run/user/1000

在上面的文章中,我们学习了如何安装和配置ansible,配置客户端,与客户端或服务器进行通信以及运行简单的命令和任务,以便我们可以测试配置并远程执行简单的任务。我们将在其他文章中介绍Playbook。