云服务器内容精选

  • 问题现象 部署Ansible应用替换json参数解析错误,未达到预期效果: 部署Ansible应用,使用template模块替换文本文件,当参数值为json或json数组格式时,替换后的参数解析后会在key值前加上"u"。示例如下: 输入参数为:{"key":"jsonkey","value":"jsonvalue"} 替换后的参数为:{u'value': u'jsonvalue', u'key': u'jsonkey'}
  • 认证与鉴权 在配置鉴权信息之前,您需要登录华为云控制台,获取您的Region、项目ID、Access Key和Secret Key信息。 您可以通过环境变量的方式配置鉴权信息。 export ANSIBLE_HWC_AC CES S_KEY="my-access-key"export ANSIBLE_HWC_SECRET_KEY="my-secret-key"export ANSIBLE_HWC_PROJECT_ID="my-project-id"export ANSIBLE_HWC_REGION="cn-north-4" 您也可以将鉴权信息与您将要创建的华为云资源的参数一起配置在playbook文件中。 access_key="my-access-key"secret_key="my-secret-key"project_id="my-project-id"region="cn-north-4" 将AK/SK以明文的形式存储在配置文件中,存在密钥泄露的安全隐患。推荐您使用环境变量的方式进行认证。
  • 安装Ansible华为云模块 执行以下命令安装Ansible华为云模块依赖包。 wget https://raw.githubusercontent.com/huaweicloud/huaweicloud-ansible-modules/master/requirements.txtsudo pip install -r requirements.txt 执行以下命令安装Ansible华为云模块。 ansible-galaxy collection install hwceco.hwcollection 执行以下命令升级华为云模块的版本(可选)。 ansible-galaxy collection install hwceco.hwcollection --force
  • 运行Playbook创建一台E CS 实例 完成以下操作,通过Playbook创建一台ECS实例: 创建一个名称为huaweicloud_create_ecs.yml的文件,然后通过VI 编辑器打开。 vi huaweicloud_create_ecs.yml 将以下完整的Playbook示例粘贴到huaweicloud_create_ecs.yml文件中。 - hosts: localhost collections: - hwceco.hwcollection tasks: - name: create a vpc hwc_network_vpc: cidr: "192.168.100.0/24" name: "ansible_network_vpc_test" register: vpc - name: create a subnet hwc_vpc_subnet: gateway_ip: "192.168.100.32" name: "ansible_network_subnet_test" dhcp_enable: true vpc_id: "{{ vpc.state.id }}" filters: - "name" cidr: "192.168.100.0/26" register: subnet - name: create a disk hwc_evs_disk: filters: - "name" availability_zone: "cn-north-1a" name: "ansible_evs_disk_test" volume_type: "SSD" size: 10 register: disk - name: create an instance hwc_ecs_instance: data_volumes: - volume_id: "{{ disk.state.id }}" name: "ansible_ecs_instance_test" availability_zone: "cn-north-1a" nics: - subnet_id: "{{ subnet.state.id }}" ip_address:"192.168.100.33" - subnet_id: "{{ subnet.state.id }}" ip_address: "192.168.100.34" server_tags: my_server: "my_server" image_id: "8da46d6d-6079-4e31-ad6d-a7167efff892" flavor_name: "s3.small.1" filters: - "name" vpc_id: "{{ vpc.state.id }}" root_volume: volume_type: "SSD" 保存并退出。 运行Ansible playbook来创建ECS实例。 ansible-playbook huaweicloud_create_ecs.yml
  • 创建磁盘(EVS) 在创建ECS实例时,您可以指定ECS实例的数据盘。 以下Ansible playbook展示了如何创建一个磁盘。 - name: create a disk hwc_evs_disk: filters: - "name" availability_zone: "cn-north-1a" name: "ansible_evs_disk_test" volume_type: "SSD" size: 10 register: disk
  • 创建子网(subnet) 在创建ECS实例时,您必须要指定ECS实例所属的子网。 以下Ansible playbook展示了如何创建一个子网。 - name: create a subnet hwc_vpc_subnet: gateway_ip: "192.168.100.32" name: "ansible_network_subnet_test" dhcp_enable: true vpc_id: "{{ vpc.state.id }}" filters: - "name" cidr: "192.168.100.0/26" register: subnet
  • 创建ECS实例 结合上面创建的VPC、subnet和磁盘,创建ECS实例。 以下Ansible playbook展示了如何创建一台ECS实例。 - name: create an instance hwc_ecs_instance: data_volumes: - volume_id: "{{ disk.state.id }}" name: "ansible_ecs_instance_test" availability_zone: "cn-north-1a" nics: - subnet_id: "{{ subnet.state.id }}" ip_address:"192.168.100.33" - subnet_id: "{{ subnet.state.id }}" ip_address: "192.168.100.34" server_tags: my_server: "my_server" image_id: "8da46d6d-6079-4e31-ad6d-a7167efff892" flavor_name: "s3.small.1" filters: - "name" vpc_id: "{{ vpc.state.id }}" root_volume: volume_type: "SSD"
  • 安装步骤 下载最新版本的华为云动态Inventory文件,并为其赋予可执行权限。 wget https://raw.githubusercontent.com/huaweicloud/huaweicloud-ansible-modules/master/contrib/inventory/hwc_ecs.pychmod +x hwc_ecs.py 下载获取与华为云动态Inventory配套的hwc_ecs.ini配置文件,并将其放到hwc_ecs.py文件所在的目录。 wget https://raw.githubusercontent.com/huaweicloud/huaweicloud-ansible-modules/master/contrib/inventory/hwc_ecs.ini 配置鉴权信息 您可以将鉴权信息配置在hwc_ecs.ini文件中。 access_key="my-access-key"secret_key="my-secret-key"project_id="my-project-id"region="cn-north-4" 您也可以通过环境变量的方式配置鉴权信息。 export ANSIBLE_HWC_ACCESS_KEY="my-access-key"export ANSIBLE_HWC_SECRET_KEY="my-secret-key"export ANSIBLE_HWC_PROJECT_ID="my-project-id"export ANSIBLE_HWC_REGION="cn-north-4" 执行Inventory文件验证配置。 ./hwc_ecs.py --list
  • 将华为云动态Inventory配置为默认Inventory 除了在执行Ansible命令时以-i 参数显示地指定华为云的Inventory文件,还可将动态Inventory配置为默认的Inventory。在安装完Ansible之后,Ansible Inventory默认为/etc/ansible/hosts。 完成以下操作,将华为云动态Inventory配置为默认Inventory: 下载最新版本的华为云动态Inventory文件,并为其赋予可执行权限,然后用其替换默认Inventory。 wget https://raw.githubusercontent.com/huaweicloud/huaweicloud-ansible-modules/master/contrib/inventory/hwc_ecs.pychmod +x hwc_ecs.pysudo cp hwc_ecs.py /etc/ansible/hosts 下载华为云动态Inventory的配置文件,并将其移动到默认Inventory所在的目录/etc/ansible。 wget https://raw.githubusercontent.com/huaweicloud/huaweicloud-ansible-modules/master/contrib/inventory/hwc_ecs.inisudo cp hwc_ecs.ini /etc/ansible 配置鉴权信息 您可以将鉴权信息配置在hwc_ecs.ini文件中。 access_key="my-access-key"secret_key="my-secret-key"project_id="my-project-id"region="cn-north-4" 您也可以通过环境变量的方式配置鉴权信息。 export ANSIBLE_HWC_ACCESS_KEY="my-access-key"export ANSIBLE_HWC_SECRET_KEY="my-secret-key"export ANSIBLE_HWC_PROJECT_ID="my-project-id"export ANSIBLE_HWC_REGION="cn-north-4" 执行以下命令进行验证。 ansible huaweicloud -m ping
  • 华为云动态Inventory 以下是华为云动态Inventory获取到的一部分的主机信息。 { "_meta": { "hostvars": { "ecs_ansible_test_0001": { "ansible_ssh_host": "45.9.xx.xx", "id": "d9bdd7ef-dfa2-4ab2-abae-1cb25788813f", "name": "ecs-ansible-test-0001", ... }, "ecs_ansible_test_0002": { "ansible_ssh_host": "37.18.xx.xx", "id": "c1936f99-469b-4d96-9e20-89fa816b310c", "name": "ecs-ansible-test-0002", ... } } }, "c1936f99-469b-4d96-9e20-89fa816b310c": [ "ecs_ansible_test_0002" ], "d9bdd7ef-dfa2-4ab2-abae-1cb25788813f": [ "ecs_ansible_test_0001" ], "huaweicloud": [ "ecs_ansible_test_0001", "ecs_ansible_test_0002" ], "image_id_cf9a291d_a62e_4df6_a7c5_0f6d2f16f351": [ "ecs_ansible_test_0001", "ecs_ansible_test_0002" ], "cn-north-4": [ "ecs_ansible_test_0001", "ecs_ansible_test_0002" ], "cn-north-4a": [ "ecs_ansible_test_0001", "ecs_ansible_test_0002" ], "security_group_id_2ac34ff2_a923_465c_8591_f618f5c250bf": [ "ecs_ansible_test_0001", "ecs_ansible_test_0002" ], "vpc_id_e98a5194_b270_4cad_b233_99486744f3ac": [ "ecs_ansible_test_0001", "ecs_ansible_test_0002" ] }