summaryrefslogtreecommitdiffstats
path: root/ansible_collections/cisco/intersight/playbooks/os_install.yml
blob: c503235051c420c648830206ad94f6959bafef85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
---
#
# The hosts group used is provided by the group variable or defaulted to 'Intersight_Servers'.
# You can specify a specific host (or host group) on the command line:
#   ansible-playbook ... -e group=<your host group>
#   e.g., ansible-playbook server_profiles.yml -e group=TME_Demo
#
- name: Install OS
  hosts: "{{ group | default('Intersight_Servers') }}"
  connection: local
  gather_facts: false
  vars:
    # Create an anchor for api_info that can be used throughout the file
    api_info: &api_info
      # if api_key vars are omitted, INTERSIGHT_API_KEY_ID, INTERSIGHT_API_PRIVATE_KEY,
      # and INTERSIGHT_API_URI environment variables used for API key data
      api_private_key: "{{ api_private_key | default(omit) }}"
      api_key_id: "{{ api_key_id | default(omit) }}"
      api_uri: "{{ api_uri | default(omit) }}"
      validate_certs: "{{ validate_certs | default(omit) }}"
    # OS and SCU Versions
    os_version: ESXi 7.0 U3
    os_config: ESXi7.0ConfigFile
    scu_version: 6.2.3b
    org_name: default
    #
    # Example using vault:
    # 1. Place the vault password into a plain text file (this is the password for vault access - do not check this into any repos!)
    #    $ cat vault_password_file
    #    ...
    # 2. Encrypt a string (e.g., 'notagoodpassword').  You will later decrypt using your vault password file
    #    $ ansible-vault encrypt_string --vault-id tme@vault_password_file 'notagoodpassword' --name 'vault_password'
    #    (response is the encrypting string)
    # 3. Place the vault variable in your playbook (example below):
    # 4. Run the playbook and supply the vault password file (used to decrypt the vaulted password in the playbook)
    #    $ ansible-playbook -i inventory --vault-id tme@vault_password_file os_install.yml
    #
    vault_password: !vault |
          $ANSIBLE_VAULT;1.2;AES256;tme
          36656264656638646566313633353832396138616264313032303433656636643638363864653936
          6532646363303435633965383432633630306566323838640a363566376234303366313064306162
          39326331373231643333616335393232353633393834653161633032383539383537656336666639
          3635306535366233660a356235393664653538386136626439646137626531663135363636326131
          3538
  tasks:
    # Get the Organization Moid
    - name: "Get Organization Moid"
      cisco.intersight.intersight_rest_api:
        <<: *api_info
        resource_path: /organization/Organizations
        query_params:
          $filter: "Name eq '{{ org_name }}'"
      register: org_resp
      delegate_to: localhost
    # Get the OS File Moid
    - name: "Get OS File Moid"
      cisco.intersight.intersight_rest_api:
        <<: *api_info
        resource_path: /softwarerepository/OperatingSystemFiles
        query_params:
          $filter: "Version eq '{{ os_version }}' and PermissionResources.Moid eq '{{ org_resp.api_response.Moid }}'"
      register: os_resp
      delegate_to: localhost
    # Get the SCU File Moid
    - name: "Get SCU File Moid"
      cisco.intersight.intersight_rest_api:
        <<: *api_info
        resource_path: /firmware/ServerConfigurationUtilityDistributables
        query_params:
          $filter: "Version eq '{{ scu_version }}' and PermissionResources.Moid eq '{{ org_resp.api_response.Moid }}'"
      register: scu_resp
      delegate_to: localhost
    # Get the OS Config File Moid
    - name: "Get OS Config File Moid"
      cisco.intersight.intersight_rest_api:
        <<: *api_info
        resource_path: /os/ConfigurationFiles
        query_params:
          $filter: "Name eq '{{ os_config }}'"
      register: os_config_resp
      delegate_to: localhost
    # Install OS
    - name: Install OS
      cisco.intersight.intersight_rest_api:
        <<: *api_info
        resource_path: /bulk/Requests
        update_method: post
        api_body: {
          "Verb": "POST",
          "Uri": "/v1/os/Installs",
          "Requests": [
            {
              "ObjectType": "bulk.RestSubRequest",
              "Body": {
                "InstallMethod": "vMedia",
                "Image": {
                  "Moid": "{{ os_resp.api_response.Moid }}",
                  "ObjectType": "softwarerepository.OperatingSystemFile"
                },
                "OsduImage": {
                  "ObjectType": "firmware.ServerConfigurationUtilityDistributable",
                  "Moid": "{{ scu_resp.api_response.Moid }}"
                },
                "OverrideSecureBoot": true,
                "Organization": {
                  "Moid": "{{ org_resp.api_response.Moid }}"
                },
                "Answers": {
                  "Hostname": "localhost",
                  "IpConfigType": "static",
                  "IpConfiguration": {
                    "IpV4Config": {
                      "Gateway": "172.22.248.1",
                      "IpAddress": "172.22.248.230",
                      "Netmask": "255.255.252.0"
                    },
                    "ObjectType": "os.Ipv4Configuration"
                  },
                  "IsRootPasswordCrypted": false,
                  "Nameserver": "170.70.168.183",
                  "RootPassword": "{{ vault_password }}",
                  "Source": "Template"
                },
                "ConfigurationFile": {
                  "Moid": "{{ os_config_resp.api_response.Moid }}",
                  "ObjectType": "os.ConfigurationFile"
                },
                "AdditionalParameters": null,
                "InstallTarget": {
                  "Id": "0",
                  "Name": "DevNet-RAID1",
                  "ObjectType": "os.VirtualDrive",
                  "StorageControllerSlotId": "1"
                },
                "Server": {
                  "ObjectType": "compute.{{ object_type }}",
                  "Moid": "{{ server_moid }}"
                }
              }
            }
          ],
          "Organization": {
            "Moid": "{{ org_resp.api_response.Moid }}"
          }
        }
      delegate_to: localhost
      register: install_resp