diff --git a/library/cloud/gce_pd b/library/cloud/gce_pd index e5ea6cc4ad8..98e8e8d15e8 100644 --- a/library/cloud/gce_pd +++ b/library/cloud/gce_pd @@ -62,6 +62,12 @@ options: required: false default: 10 aliases: [] + image: + description: + - the source image to use for the disk + required: false + default: null + aliases: [] state: description: - desired state of the persistent disk @@ -132,6 +138,7 @@ def main(): mode = dict(default='READ_ONLY', choices=['READ_WRITE', 'READ_ONLY']), name = dict(required=True), size_gb = dict(default=10), + image = dict(), state = dict(default='present'), zone = dict(default='us-central1-b'), service_account_email = dict(), @@ -147,6 +154,7 @@ def main(): mode = module.params.get('mode') name = module.params.get('name') size_gb = module.params.get('size_gb') + image = module.params.get('image') state = module.params.get('state') zone = module.params.get('zone') @@ -204,8 +212,11 @@ def main(): instance_name, zone), changed=False) if not disk: + lc_image = None + if image is not None: + lc_image = gce.ex_get_image(image) try: - disk = gce.create_volume(size_gb, name, location=zone) + disk = gce.create_volume(size_gb, name, location=zone, image=lc_image) except ResourceExistsError: pass except QuotaExceededError: @@ -214,6 +225,7 @@ def main(): except Exception, e: module.fail_json(msg=unexpected_error_msg(e), changed=False) json_output['size_gb'] = size_gb + json_output['image'] = image changed = True if inst and not is_attached: try: diff --git a/test/integration/roles/test_gce_pd/tasks/main.yml b/test/integration/roles/test_gce_pd/tasks/main.yml index e7c7f15fbe6..1a756e1c48a 100644 --- a/test/integration/roles/test_gce_pd/tasks/main.yml +++ b/test/integration/roles/test_gce_pd/tasks/main.yml @@ -124,3 +124,40 @@ - 'result.changed' - 'result.name == "{{ instance_name }}"' - 'result.state == "absent"' + +# ============================================================ +- name: test image given (state=present) + gce_pd: + name: "{{ instance_name }}" + image: debian-7 + service_account_email: "{{ service_account_email }}" + pem_file: "{{ pem_file }}" + project_id: "{{ project_id }}" + state: present + register: result + +- name: assert image given (state=present) + assert: + that: + - 'result.changed' + - 'result.name == "{{ instance_name }}"' + - 'result.image == "debian-7"' + - 'result.state == "present"' + +# ============================================================ +- name: test image given (state=absent) + gce_pd: + name: "{{ instance_name }}" + image: debian-7 + service_account_email: "{{ service_account_email }}" + pem_file: "{{ pem_file }}" + project_id: "{{ project_id }}" + state: absent + register: result + +- name: assert image given (state=absent) + assert: + that: + - 'result.changed' + - 'result.name == "{{ instance_name }}"' + - 'result.state == "absent"'