实践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!! 企业级基础设施即代码的现状。
基本上這是一個關於從Ansible Tower觸發硬體API,實現金屬裸機即服務的故事。有些人聽到說這個可能會覺得”啊,這是硬體的介紹嗎?”,但更確切地說,我們將主要介紹有關操作Ansible的第三方模組的知識和技巧。因此,請享受金屬裸機即服務的世界吧。
2. 关于构成
本次的構成如下。
-
- Synergy with Image Streamer x1
- Ansible Tower on VMware x1
在Synergy服务器上安装Ansible Tower,并通过外部命令对OneView API进行操作以部署操作系统。当然,我们将使用一个称为”oneview-ansible”的认证模块,在Playbook中调用API。
2.1 设置的步骤
这次我们将按照以下流程进行设置。
-
- Ansible Tower的安装设置
-
- Oneview Ansible模块的安装设置
-
- HPE Synergy的安装设置
- Ansible Tower的设置和部署
2.2版本的构成
这次我们使用了以下版本进行设置。请在此处小心安装。由于Ansible和Python的版本不同可能会导致无法正常运行,请根据需要进行相应调整。
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模块如下:
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”登陆尝试。
看,太棒了。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版本信息的要求。
{
"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