如何在Ubuntu Linux上安装和配置最新版本的Ansible

时间:2020-01-09 10:39:17  来源:igfitidea点击:

如何在Ubuntu Linux 16.04/18.04 LTS或17.10/18.10桌面控制计算机上安装Ansible?

说明:Ansible是一个简单易用的IT自动化工具。
可以使用Ansible部署应用程序和系统/VM /容器。

Ansible配置使用简单的英语编写,并且可以使用SSH在远程/本地服务器上工作。
远程服务器上不需要代理。

在此教程中,您将在Ubuntu Linux 16.04/18.04 LTS或19.04桌面系统上安装最新版本的Ansible,并了解如何将软件用于自动化目的的一些基础知识。

请注意,您可以使用官方Ubuntu仓库提供的sudo apt remove ansible命令删除旧版本。

如何在Ubuntu Linux上安装和配置最新版本的Ansible

您必须在系统上配置PPA才能安装最新版本的ansible。
要管理从各种PPA(个人软件包存档)安装软件的存储库。
它允许您上载由Launchpad构建和发布为apt存储库的Ubuntu源程序包。
执行以下apt-get命令或apt命令:

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install software-properties-common

接下来将ppa:ansible/ansible添加到您的系统中软件来源:

$ sudo apt-add-repository ppa:ansible/ansible

更新您的存储库:

$ sudo apt update

要安装最新版本的ansible,请执行:

$ sudo apt install ansible

找出Ansible版本

执行以下命令:

$ ansible --version

输出示例:

ansible 2.8.3
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/Hyman/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.15+ (default, Nov 27 2016, 23:36:35) [GCC 7.3.0]

创建您的主机文件

Ansible需要知道您的远程服务器名称或IP地址。
此信息存储在名为主机的文件中。
缺省值为/etc/ansible/hosts。
您可以编辑此文件或在$HOME目录中创建一个新文件:

$ sudo vi /etc/ansible/hosts

或者

$ vi $HOME/hosts

追加服务器的DNS或IP地址:

[webservers]
server1.theitroad.local
104.20.187.5
104.20.186.5

[devservers]
10.98.222.4
10.98.222.7
10.98.222.8

我有两个小组。
第一个名为webserver,另一个称为devservers。

设置SSH密钥

您必须在~/hosts文件中指定的计算机和远程服务器之间配置ssh密钥:

$ ssh-keygen -t rsa -b 4096 -C "My ansisble key"

使用scp或ssh-copy-id命令将您的公钥文件(例如$HOME/.ssh/id_rsa.pub)复制到远程服务器/主机上的帐户中:

$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ eval $(ssh-agent)
$ ssh-add

现在,ansible可以使用ssh命令与所有远程服务器通信。

将ping请求发送到所有服务器

只需执行以下命令:

$ ansible -i ~/hosts -m ping all

输出示例:

10.98.222.4 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}
10.98.222.7 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}
10.98.222.8 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}

找出所有主机的正常运行时间

$ ansible -i hosts -m shell -a 'uptime' all

输出示例:

do-de.public | SUCCESS | rc=0  
10:37:02 up 1 day,  8:39,  1 user,  load average: 0.95, 0.27, 0.12
 
do-blr-vpn | SUCCESS | rc=0 
16:07:11 up 1 day,  8:43,  1 user,  load average: 0.01, 0.01, 0.00
 
ln.gfs01 | SUCCESS | rc=0  
10:37:17 up 22 days,  5:30,  1 user,  load average: 0.18, 0.12, 0.05

其中:

  • -i~/hosts:指定库存主机路径。您可以设置shell变量并跳过-i选项。例如:export ANSIBLE_HOSTS =~/hosts
  • -m shell:要执行的模块名称,例如shell,apt,yum等。
  • -a'uptime':模块参数。例如,shell模块将接受Unix/Linux命令名称。 apt模块将接受使用apt-get/apt命令等更新远程设备的选项。
  • all:所有表示所有主机。您可以指定组名称,例如devservers(" ansible -i hosts -m shell -a'uptime" dbservers)或主机名。

使用apt模块更新所有Debian/Ubuntu服务器

运行以下命令:

$ ansible -i ~/hosts -m apt -a 'update_cache=yes upgrade=dist' dbservers

编写第一个playbook

您可以按照yml格式将所有模块组合到一个文本文件中,如下所示,即创建一个名为update.yml的文件:

--
- hosts: dbservers
  tasks:
          - name: Updating host using apt
            apt:
                    update_cache: yes
                    upgrade: dist

这是我的主机文件:

cat hosts

输出示例:

[all:vars]
# Username for ssh connection
ansible_user='Hyman'
# Run commands as root user?  
ansible_become='yes'
# How do I become root user? Use sudo. 
ansible_become_method='sudo'
# Password for sudo
ansible_become_pass='superSecretPassword' 
###################################################
# Password for sudo user i.e. ansible_user password
# See https://www.theitroad.local/faq/how-to-set-and-use-sudo-password-for-ansible-vault/
# Read it from an encrypted file
# ansible_become_pass='{{ my_sudo_password }}' 
###################################################
[dbservers]
10.98.222.4
10.98.222.7
10.98.222.8

现在,您可以按以下方式运行它:

$ ansible-playbook -i ~/hosts update.yml

您只需在Ubuntu Linux上安装和配置最新版本的Ansible,然后运行您的第一本剧本。

关于Python版本3的注释

Ansible需要在远程服务器上安装python。
您可以在hosts文件中使用以下语法指定python的远程版本:

ansible_python_interpreter='/usr/bin/env python3'

例如,这是我使用cat命令显示的示例主机文件:

cat hosts
[all:vars]
ansible_user='{{ my_user }}'
ansible_become=yes
ansible_become_method=sudo
ansible_become_pass='{{ my_user_pass }}'
ansible_python_interpreter='/usr/bin/env python3'
 
[bsdboxes]
192.168.1.30
192.168.1.31
192.168.1.32
192.168.1.33