实践Ansible Oneview!! – 使用Ansible创建裸金属即服务-

今天是圣诞前夜呢。听说今年圣诞老人将使用Ansible自动化部署来送礼物,我期待着呢。我们家已经按照Santa_Inventory.ini文件中的19131行进行了登记。oO(那是什么东西呢?)

嗯。今年好像是Ansible广泛应用的一年呢。现在所有的系统配置都可以使用Ansible,而应用的部署可以用k8s,感觉如此方便。CNCF万岁!

在这个时候,轮到我写了,本来想猛烈地写的,但是被圣诞节写作马拉松活动追赶着,稍等一下…因为太长了,我会以敏捷的方式进行公开更新。请在有空的时候阅读。

【广告1】《GitLab实践指南》
将于2018年2月1日上市。如有兴趣,请到书店查阅。

【广告.2】Ansible实践指南
Kindle版现在半价!只需1,728日元!(截止日期:2017/12/27)
※活动已结束。感谢您的购买!

这篇文章的摘要。

这次我想要介绍一下我们多次在外部演讲中提到的Ansible Tower & HPE Synergy的设置方法。(只有我才在意吗…
如果想要知道HPE Synergy是什么,请看以下内容。
Red Hat Forum 2017: 实践Ansible Tower!! 企业级基础设施即代码的现状。

P00000263.JPG

基本上這是一個關於從Ansible Tower觸發硬體API,實現金屬裸機即服務的故事。有些人聽到說這個可能會覺得”啊,這是硬體的介紹嗎?”,但更確切地說,我們將主要介紹有關操作Ansible的第三方模組的知識和技巧。因此,請享受金屬裸機即服務的世界吧。

2. 关于构成

本次的構成如下。

    • Synergy with Image Streamer x1

 

    Ansible Tower on VMware x1

在Synergy服务器上安装Ansible Tower,并通过外部命令对OneView API进行操作以部署操作系统。当然,我们将使用一个称为”oneview-ansible”的认证模块,在Playbook中调用API。

P00000264.JPG

2.1 设置的步骤

这次我们将按照以下流程进行设置。

    1. Ansible Tower的安装设置

 

    1. Oneview Ansible模块的安装设置

 

    1. HPE Synergy的安装设置

 

    Ansible Tower的设置和部署

2.2版本的构成

这次我们使用了以下版本进行设置。请在此处小心安装。由于Ansible和Python的版本不同可能会导致无法正常运行,请根据需要进行相应调整。

対象プロダクトバージョンAnsible TowerサーバーRHEL7.4
Python2.7.14
oneview-anible4.0.0
Ansible2.4.1
Ansible Tower3.2.1HPE SynergyOneView3.10

关于 oneview-ansible 模块的内容。

以下是oneview-ansible模块的上游版本的发布位置:
■ oneview-ansible模块
https://github.com/HewlettPackard/oneview-ansible

请注意,从Ansible的2.4版本开始,一些oneview-ansible模块已被纳入到Ansible软件包标准的远程管理模块中,可立即使用。目前已与Ansible标准兼容的Oneview模块如下:

Oneviewモジュール内容oneview_ethernet_networkManage OneView Ethernet Network resourcesoneview_ethernet_network_factsRetrieve the facts about one or more of the OneView Ethernet Networksoneview_fc_networkManage OneView Fibre Channel Network resources.oneview_fc_network_factsRetrieve the facts about one or more of the OneView Fibre Channel Networksoneview_fcoe_networkManage OneView FCoE Network resourcesoneview_fcoe_network_factsRetrieve the facts about one or more of the OneView FCoE Networksoneview_network_setManage HPE OneView Network Set resourcesoneview_network_set_factsRetrieve facts about the OneView Network Setsoneview_san_managerManage OneView SAN Manager resources

3. Ansible Tower的安装步骤

首先,让我们安装Ansible Tower吧。这次我们将在RHEL虚拟机中安装Tower。官方网站有详细的文档,只要按照官方网站的指导进行操作,应该就能成功。但为了在遗忘时便于查阅,我会记录下在RHEL上的具体步骤。

3.1 RHEL(RedHat企业版Linux)的初始设置

首先是 RHEL 的初始设置。这方面因环境而异,所以请根据需要进行适当的配置。这是我个人的设定备忘录。

3.1.1 基本操作系统设置

IPv6是非常重要的,是吧?是的。

$ sudo vi /etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

$ sudo sysctl -p /etc/sysctl.d/disable_ipv6.conf

我认为大多数企业会使用代理,所以我会进行代理设置。

$ sudo vi /etc/environment
http_proxy="http://proxy.ansible.example.com:8080"
https_proxy="http://proxy.ansible.example.com:8080"
ftp_proxy="http://proxy.ansible.example.com:8080"
no_proxy="192.168.*,10.*,*.local,*.net"

$ sudo vi /etc/yum.conf
(追加)
proxy=http://proxy.ansible.example.com:8080

$ sudo vi /etc/rhsm/rhsm.conf
(追加)
# an http proxy server to use
proxy_hostname = proxy.ansible.example.com
# port for http proxy server
proxy_port = 8080

根据环境进行必要的操作系统设置。

$ sudo hostnamectl set-hostname --static ansible-tower01

$ sudo visudo
(追加)
Defaults    timestamp_timeout = 300

3.1.2 订阅的注册

使用RHEL时,请务必订阅。这一点非常重要。

$ sudo subscription-manager register \
--username \<username\> \
--password \<password\> \
--autosubscribe

## 登録解除はこちら
$ sudo subscription-manager unregister

3.2 安装RHEL Ansible Tower

那么,我们立即开始安装 Ansible Tower。

3.2.1 Tower的前提条件:

请先阅读官方文件,因为它是构成的前提条件。
http://docs.ansible.com/ansible-tower/latest/html/quickinstall/prepare.html#prerequisites-and-requirements

以下是支持的操作系统。

    • Red Hat Enterprise Linux 7.2 or later 64-bit

 

    • CentOS 7.2 or later 64-bit

 

    • Ubuntu 14.04 LTS 64-bit

 

    Ubuntu 16.04 LTS 64-bit

3.2.2 Yum的存储库注册

使用Yum来安装Tower。因此,事先注册并更新所需的存储库。

$ sudo subscription-manager repos --list-enabled |grep extra
$ sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
$ sudo subscription-manager repos --list-enabled |grep extra
$ sudo yum -y install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo yum -y update

3.2.3 安装Ansible。

在安装 Tower 之前,请先安装 Ansible。可以选择单独安装 Ansible,并使用 virtualenv 或 pyenv 进行安装,但是在 Tower 中,我们将使用已在操作系统中安装的 Ansible,请使用 Yum 进行安装。另外,请确保在 Ansible 执行用户的目录下仅配置了 “ansible.cfg” 文件。

$ sudo yum -y install ansible
$ ansible --version
ansible 2.4.1.0
  config file = $HOME/.ansible.cfg
$ vi $HOME/.ansible.cfg

Config的内容就像下面这样

[defaults]
forks = 15
retry_files_enabled = false
log_path = $HOME/.ansible/ansible.log
host_key_checking = false

3.2.4 安装 Tower

终于到达可以安装Tower的地步了,所以我们要安装Tower。这次我们使用的是3.2.1版本的Tower,但请随时进行更新。

$ mkdir -v ~/src && cd ~/src
$ curl -O https://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz
$ tar zxvf ./ansible-tower-setup-latest.tar.gz
$ cd ./ansible-tower-setup-3.2.1/
$ vi ./inventry

只需要进行 Tower 的安装,设置清单即可。以下是在本地主机安装时需要更改的参数。

    • admin_password (Towerの管理者パスワード)

 

    • pg_password (PostgreSQLの管理者パスワード)

 

    rabbitmq_password (RabbitMQの管理者パスワード)
[tower]
localhost ansible_connection=local

[database]

[all:vars]
admin_password='password'

pg_host=''
pg_port=''

pg_database='awx'
pg_username='awx'
pg_password='password'

rabbitmq_port=5672
rabbitmq_vhost=tower
rabbitmq_username=tower
rabbitmq_password='password'
rabbitmq_cookie=cookiemonster

# Needs to be true for fqdns and ip addresses
rabbitmq_use_long_name=false

安装Tower非常简单。只需要运行名为Ansible的命令的一系列脚本。

$ sudo ./serup.sh

完成安装脚本后,我们在浏览器中访问Ansible Tower服务器,并用之前设置的“admin_password”登陆尝试。

P00000265.JPG

看,太棒了。Ansible Tower已经安装好了。在首次登录时会询问是否订阅许可,记得选择订阅。
如果没有订阅,也可以使用试用版。有关Tower许可的详细信息,请点击这里。
http://docs.ansible.com/ansible-tower/3.1.4/html_ja/installandreference/updates_support.html

这个安装步骤人人都能做到,接下来才是正题。

4. Oneview Ansible模块的安装配置

这个地方可能是个意想不到的难点。首先,Ansible Tower假设使用包含在操作系统软件包中的Ansible,因此会使用系统中已安装的Python库等。但是,如果使用第三方模块,可能会出现指定Python版本或所需库的情况。本次使用的”oneview-ansible”也是其中之一,以下是其必备条件。

    • Ansible >= 2.1

 

    • Python >= 2.7.9

 

    HPE OneView Python SDK (Install HPE OneView Python SDK)

然而,在RHEL7.4中安装Ansible时,出现了这种情况。是的,很遗憾。

    • Ansible = 2.4

 

    Python = 2.7.5

因此,我們將從 Tower 上進行設定,以便能夠使用 oneview-ansible 模塊。

4.1 安装Python(2.7.14)

首先,让我们安装Python 2.7.14。通常情况下,可以使用pyenv等工具来方便地进行安装,但由于使用Ansible Tower,我们默默地从源代码进行编译安装。

4.1.1 在安装之前先安装库。

在编译Python时,如果忘记了这个,会变得很麻烦。每次执行Ansible时,会被指责没有那个库或者没有这个库,所以要事先安装好。

$ sudo yum -y install zlib-devel openssl-devel libselinux-python

4.1.2 Python的编译

这次我们将编译并将运行环境部署到“/usr/local/bin/python”。而且,在Ansible中使用的Python将被设置为使用这个最新版本。

$ cd ~/src
$ curl -O https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz
$ tar xvf ./Python-2.7.14.tar.xz
$ cd ./Python-2.7.14/
$ ./configure --enable-optimizations
$ make
$ make test
$ sudo make install
$ /usr/local/bin/python --version
Python 2.7.14

4.2 HPE OneView Python SDK的安装设置

然后,安装OneView所需的Python SDK,并设置用于OneView连接的凭据信息。

安装4.2.1 SDK

可以通过pip或从源代码安装SDK,但考虑到维护性,推荐使用pip安装。

$ cd ~/src
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo /usr/local/bin/python ./get-pip.py
$ pip install dnspython  ##必要なパッケージを事前にインストール

## pipからインストール
$ pip install hpOneView

## ソースからインストール
$ cd ~/src
$ git clone https://github.com/HewlettPackard/python-hpOneView.git
$ cd ./python-hpOneView/
$ sudo /usr/local/bin/pip install .

4.2.2 设置凭证

在这个时候,我们需要设置连接到Oneview的信息(凭证信息)。当在Playbook中使用Oneview专用模块时,始终需要指定这个文件的路径。

$ sudo mkdir -v /usr/local/etc/oneview
$ sudo vi /usr/local/etc/oneview/oneview_config.json

请参考此处关于Credential的写法。特别要注意正确设置OneView版本信息的要求。

OneView APIバージョン設定2.0 API version2003.0 API version3003.10 API version500
{
  "ip": "<Synergy OneView IP Address>",
  "image_streamer_ip": "<Synergy ImageStreamer IP Address>",
  "credentials": {
    "userName": "Administrator",
    "authLoginDomain": "",
    "password": "password"
  },
  "api_version": 500
}

4.3 部署 oneview-ansible 模块

一旦我们成功将SDK加载到Python中之后,接下来我们要展开第三方的模块库。一般来说,第三方的模块库需要放置在当前执行Ansible命令的目录下的名为”library”的文件夹中,或者放置在”/usr/share/ansible”目录下。这样,在执行Ansible命令时就会自动加载并可以使用这些模块库。

如果想要更改模块库的路径,也可以通过下面的环境变量进行切换。

export ANSIBLE_LIBRARY=/srv/modules/custom_modules:/srv/modules/vendor_modules

那么,让我们实际部署模块库。在这里要注意的是,如果在Ansible Tower的项目中将库放置在library文件夹下,可能就无法清楚地知道到底加载了哪个库,所以建议将其配置在Ansible Tower上的”/usr/share/ansible”目录下。

$ sudo mkdir -v /usr/share/ansible
$ cd /usr/share/ansible
$ sudo git clone https://github.com/HewlettPackard/oneview-ansible.git

4.4 进行 Ansible OneView 连接测试

非常抱歉让您久等了。终于,一直期待着的x 3!
终于,Ansible Oneview 可以使用了,所以首先让我们尝试通过 ansible-playbook 命令连接,而不是通过 Ansible Tower。本次要使用的Playbook 是简单地获取服务器信息(Server Profile Template:IS-RHEL7.3-SY480Gen9-Template-Ansible)。
需要注意的是,请指定之前编译的新版本Python作为Ansible Python Interpreter。这将使 OneView Python SDK 被加载并可以执行相应模块。

- name: Test OneView Connection
  hosts: localhost
  connection: local
  gather_facts: false

  vars:
    ansible_python_interpreter: "/usr/local/bin/python"
    oneview_config: "/usr/local/etc/oneview/oneview_config.json"

  tasks:
    - name: Gather facts about the Server Profile Template
      oneview_server_profile_template_facts:
        config: "{{ oneview_config }}"
        name: "IS-RHEL7.3-SY480Gen9-Template-Ansible"
      register: server_profile_template_results

    - name: Debug facts about the Server Profile Template
      debug:
        var: server_profile_template_results

然后,这些方法的实施如下。

$ mkdir -v ~/test && cd ~/test
$ vi ./test.yaml ##Playbookを配置

## もしoneview ansibleライブラリを、/usr/share/ansible以外の場所においた場合
$ ln -s /usr/local/lib/oneview-ansible/library library
$ ls -la
total 4
drwxrwxr-x. 2 shkitayama shkitayama  38 Dec  5 15:27 .
drwx------. 7 shkitayama shkitayama 148 Dec  5 15:10 ..
lrwxrwxrwx. 1 shkitayama shkitayama  38 Dec  5 15:25 library -> /usr/local/lib/oneview-ansible/library
-rw-rw-r--. 1 shkitayama shkitayama 627 Dec  5 15:21 test.yaml

## 実施
$ ansible-playbook ./test.yaml

让我们祈祷成功。

5. 安装Ansible Tower

终于要开始进行 Tower 的设置了。在此之前,让我们部署 Ansible Tower 将要加载的 Playbook。

$ sudo 创建目录 /var/lib/awx/projects/oneview
$ sudo 创建符号链接 /usr/local/lib/oneview-ansible/library 到 /var/lib/awx/projects/oneview/library
$ sudo 复制文件 ~/test/test.yaml 到 /var/lib/awx/projects/oneview/ (覆盖已存在的文件)
$ sudo 设置 /var/lib/awx/projects/oneview 目录的所有者为 awx 组的成员 awx

[設定] > [用戶] > [建立用戶]
Ansible 用戶
[設定] > [組織] > [HPE]
惠普企業

[创建项目
OneView 项目
[项目]>[OneView 项目]>[权限]
Ansible 权限]

创建库存 创建库存的过程

“OneView” 的权限

创建模板
AnsibleOneview演示模板
[配置]>[认证信息]>[编辑认证信息]
oneview

广告
将在 10 秒后关闭
bannerAds