サーチ…


前書き

OpenStackは、クラウドコンピューティングのためのオープンソースのソフトウェアプラットフォームです。 Linuxインスタンスは、グラフィカルなWebインターフェイスを使用して手作業で起動/停止することができます。

不可能な設定は難しいかもしれませんが、一度正しく設定しておくと、テストや継続的インテグレーション環境には本当に簡単で強力です。

パラメーター

パラメーターコメント
hosts:localhost OpenStackコマンドはローカルホストから起動されます。
gather_facts:False 私たちはlocalhostに関する情報を収集する必要はありません
auth_url: https ://openstack-identity.mycompany.com/v2.0 V2.0のURLを使用する
状態:現在インスタンスを作成/削除するには 'present' / 'absent'
validate_certs:False httpsが自己署名証明書を使用する場合に便利です
ネットワーク: "{{NetworkName}}" (オプション)
auto_ip:はい (オプション)

備考

あなたの有能なバージョンをチェックしてください

適切なソフトウェアのバージョンがインストールされていることを確認してください:

  • 必然的に> = 2.0
  • Python> = 2.6
  • Pythonのシェードモジュール
$ansible --version
ansible 2.2.0.0

$python --version
Python 2.7.5

パイロットオープンスタックに使われたPythonコンポーネントを 'shade'にインストールしてください。

$pip install shade

注:会社のプロキシを使用する場合は、正しいpip synthaxを知ることは常に有用です

$pip install --proxy proxy_ip:proxy_port shade

OpenStack GUIから情報を収集してAnsibleを設定する


私たちのオープンスタンドテナントは既に設定されています:

  • 仮想LANはインスタンスにプライベートIPを与えます
  • 仮想ルータはパブリックIPをプライベートIPにマップする
  • セキュリティキーが生成されました
  • sshとport 80のデフォルトのファイアウォール設定があります
  • 私たちはOpenStackウェブインターフェースのおかげでインスタンスを立ち上げることができます

このWebインターフェイスから必要な情報をすべて収集しましょう。

認証情報はopenstack.rcファイルにあります。このファイルは[アクセスとセキュリティ/ APIアクセス]のOpenStack Webインターフェイスを使用してダウンロードできます。

$cat openstack.rc
#!/bin/bash
 
# To use an OpenStack cloud you need to authenticate against the Identity
# service named keystone, which returns a **Token** and **Service Catalog**.
# The catalog contains the endpoints for all services the user/tenant has
# access to - such as Compute, Image Service, Identity, Object Storage, Block
# Storage, and Networking (code-named nova, glance, keystone, swift,
# cinder, and neutron).
#
# *NOTE*: Using the 2.0 *Identity API* does not necessarily mean any other
# OpenStack API is version 2.0. For example, your cloud provider may implement
# Image API v1.1, Block Storage API v2, and Compute API v2.0. OS_AUTH_URL is
# only for the Identity API served through keystone.
export OS_AUTH_URL=https://openstack-identity.mycompany.com/v3

# With the addition of Keystone we have standardized on the term **tenant**
# as the entity that owns the resources.
export OS_TENANT_ID=1ac99fef77ee40148d7d5ba3e070caae
export OS_TENANT_NAME="TrainingIC"
export OS_PROJECT_NAME="TrainingIC"

# In addition to the owning entity (tenant), OpenStack stores the entity
# performing the action as the **user**.
export OS_USERNAME="UserTrainingIC"

# With Keystone you pass the keystone password.
echo "Please enter your OpenStack Password: "
read -sr OS_PASSWORD_INPUT
export OS_PASSWORD=$OS_PASSWORD_INPUT

# If your configuration has multiple regions, we set that information here.
# OS_REGION_NAME is optional and only valid in certain environments.
export OS_REGION_NAME="fr"
# Don't leave a blank variable, unset it if it was empty
if [ -z "$OS_REGION_NAME" ]; then unset OS_REGION_NAME; fi 

OS_AUTH_URL、OS_TENANT_NAME、OS_USERNAMEを取得します。

認証APIバージョン:OS_AUTH_URL

認証APIのバージョンに注意してください。デフォルトではv3が有効になっていますが、v2.0が必要です。私たちはURLを取得し、V3の代わりにV2.0を設定しますhttps : //openstack-identity.mycompany.com/v2.0

VM情報

OpenStack Webインターフェイスを使用してインスタンスを作成し、イメージ、フレーバー、キー、ネットワーク、セキュリティグループの名前を取得します。

必要なすべての情報を含む./group_vars/allファイルを作成します。

$vi ./group_vars/all
# Authentication
AuthUserName: UserTrainingIC
AuthPassword: PasswordTrainingIC
TenantName: TrainingIC

# VM infos
ImageName: CentOS-7-x86_64-GenericCloud-1607
FlavorName: m1.1cpu.1gb
InfraKey: KeyTrainingIC
NetworkName: NetPrivateTrainingIC
SecurityGroup: default

インスタンスを作成するための無意味なプレイブックを書く

モジュール 'Cloud' [ http://docs.ansible.com/ansible/os_server_module.html]から 'os_server'コマンドを使用しましょう。変数は./group_vars/allで定義されています。

$vi launch_compute.yml
- name: launch a compute instance
  hosts: localhost
  gather_facts: False
  tasks:
  - name: Create and launch the VM
    os_server:
      auth:
        auth_url: https://openstack-identity.mycompany.com/v2.0
        username: "{{ AuthUserName }}"
        password: "{{ AuthPassword }}"
        project_name: "{{ TenantName }}"
      state: present
      validate_certs: False
      name: "MyOwnPersonalInstance"
      image: "{{ ImageName }}"
      key_name: "{{ InfraKey }}"
      timeout: 200
      flavor:   "{{ FlavorName }}"
      security_groups: "{{ SecurityGroup }}"
      network: "{{ NetworkName }}"
      auto_ip: yes
$ ansible-playbook  -s launch_compute.yml
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [launch a compute instance] ***********************************************
TASK [Create and launch the VM] ************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0

新しいインスタンスに関する情報を収集する

モジュール 'Cloud' [ http://docs.ansible.com/ansible/os_server_module.html]の 'os_server_facts'コマンドを使用してください。変数は./group_vars/allで定義され、インスタンス名はserver: "MyOwnPersonalInstance"にあります。

$vi get_compute_info.yml
- name: Get and print instance IP
  hosts: localhost
  gather_facts: False
  tasks:
  - name: Get VM infos
    os_server_facts:
      auth:
        auth_url: https://openstack-identity.mygroup/v2.0
        username: "{{ AuthUserName }}"
        password: "{{ AuthPassword }}"
        project_name: "{{ TenantName }}"
      validate_certs: False
      server: "MyOwnPersonalInstance"

  - name: Dump all
    debug:
      var: openstack_servers
$ansible-playbook  -s get_compute_info.yml
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [Get and print instance IP] ***********************************************
TASK [Get VM IP] ***************************************************************
ok: [localhost]
TASK [Affichage] ***************************************************************
ok: [localhost] => {
    "openstack_servers": [
        {
            "OS-DCF:diskConfig": "MANUAL",
            "OS-EXT-AZ:availability_zone": "fr",
            "OS-EXT-STS:power_state": 1,
            "OS-EXT-STS:task_state": null,
[...]
            "volumes": []
        }
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0

これは非常に冗長です。たくさんの情報が表示されます。通常、SSH経由で新しいインスタンスにアクセスするには、IPアドレスだけが必要です。

新しいインスタンスのパブリックIPを取得する

すべての情報を印刷する代わりに、名前が "MyOwnPersonalInstance"の最初のインスタンスのIPアドレスのみを表示します。それは通常、私たちに必要なすべてです。

$vi get_compute_ip.yml
- name: Get and print instance IP
  hosts: localhost
  gather_facts: False
  tasks:
  - name: Get VM infos
    os_server_facts:
      auth:
        auth_url: https://openstack-identity.mycompany.com/v2.0
        username: "{{ AuthUserName }}"
        password: "{{ AuthPassword }}"
        project_name: "{{ TenantName }}"
      validate_certs: False
      server: "MyOwnPersonalInstance"

  - name: Dump IP
    debug:
      var: openstack_servers[0].interface_ip

インスタンスを削除する

インスタンスを削除するには、すべての認証情報を含むos_serverコマンドを再利用し、単に 'state:present'を 'state:absent'に置き換えます。

$vi stop_compute.yml
- name: launch a compute instance
  hosts: localhost
  gather_facts: False
  tasks:
  - name: Create and launch the VM
    os_server:
      auth:
        auth_url: https://openstack-identity.mygroup/v2.0
        username: "{{ AuthUserName }}"
        password: "{{ AuthPassword }}"
        project_name: "{{ ProjectName }}"
      state: absent
      validate_certs: False
      name: "{{ TPUser }}"
      timeout: 200


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow