puppetlabs / puppetlabs-pecdm

Puppet Bolt driven fusion of puppetlabs/peadm and Terraform.
Apache License 2.0
14 stars 19 forks source link

WIP: return inventory #86

Closed cdenneen closed 1 year ago

cdenneen commented 1 year ago

@ody can we get this merged so can do things like this:

$primary = peadm::get_targets(getvar('inventory.server.0.name'), 1)

@reidmv (this was what I was missing).

ody commented 1 year ago

@cdenneen It looks like you are working off an old version, semi-recently the provision plan was broken in two subplans. If you pull the latest main branch and switch to pecdm::subplans::provision, that subplan will return an inventory. Your custom plan that'll add your additional configuration steps should be based on pecdm::provision, effectively you'll build a plan which runs pecdm::subplans::provision then do your additional work like DNS setup then run pecdm::subplans::deploy to install PE, then after that any additional custom classification work.

cdenneen commented 1 year ago

@ody it seems like my custom code was using peadm::get_targets would that still be the case?

 $primary = peadm::get_targets(getvar('inventory.server.0.name'), 1)
plan ca::provision(
  Optional[TargetSpec] $targets = undef
) {

  $inventory = run_plan(pecdm::provision, {
    'stage'                => false,
    'replica'              => true,
    'version'              => '2021.6.0',
    'architecture'         => 'large',
    'compiler_count'       => 1,
    'subnet'               => [
      'subnet-A', 'subnet-B',
      'subnet-C'
    ],
    'cloud_region'         => 'us-east-1',
    'ssh_user'             => 'ec2-user',
    'ssh_ip_mode'          => 'private',
    'lb_ip_mode'           => 'private',
    'provider'             => 'aws',
    'firewall_allow'       => [ '10.200.0.0/16' ],
    'dns_alt_names'        => ['puppet','puppet2021_us-east-1','puppet2021_us-east-1.route53domain.com',
                              'puppet2021_us-east-1-primary','puppet2021_us-east-1-replica'],
    'extra_peadm_params'   => {
      'r10k_remote'           => 'git@gitlab.corp.com:core/pe_infra_control.git',
      'r10k_private_key_file' => '/Users/cdenneen/.ssh/code-manager_2022-05-17',
      'deploy_environment'    => 'main',
      'compiler_pool_address' => 'puppet'
    },
    'extra_terraform_vars' => {
      'tags' => { 'stack' => '2021-use1-1' }
    }
  })

  $primary = peadm::get_targets(getvar('inventory.server.0.name'), 1)

  run_task('node_manager::update_classes', $primary, environment => "main" )

  apply($primary) {
    class { 'peadm::setup::node_manager_yaml':
      primary_host => $primary.peadm::certname(),
    }
    node_group { 'Application 1':
      rule => ['=', ['trusted', 'extensions', 'pp_role'], 'Application 1'],
    }
    node_group { 'Application 2':
      rule => ['=', ['trusted', 'extensions', 'pp_role'], 'Application 2'],
    }
    node_group { 'Custom Puppet':
      parent               => 'All Environments',
      classes              => {'role::all_in_one' => {}},
      environment          => 'main',
      override_environment => 'true',
      rule                 => ['and', ['~', ['trusted', 'extensions', '1.3.6.1.4.1.34380.1.1.9812'], 'puppet/server']]
    }
  }
}

So you are suggesting changing: run_plan(pecdm::provision to run_plan(pecdm::subplans::provision.. then run my subsequent tasks for creating DNS. Then theoretically duplicate the block and use run_plan(pecdm::subplans::deploy?

cdenneen commented 1 year ago

@ody Still having error, I might not be using the subplans correctly:

# This plan does more stuff
plan ca::provision(
  Optional[TargetSpec] $targets = undef
) {

  $inventory = run_plan(pecdm::subplans::provision, {
    'replica'              => true,
    'architecture'         => 'large',
    'compiler_count'       => 1,
    'subnet'               => [
      'subnet-A', 'subnet-B',
      'subnet-C'
    ],
    'cloud_region'         => 'us-east-1',
    'ssh_user'             => 'ec2-user',
    'ssh_ip_mode'          => 'private',
    'lb_ip_mode'           => 'private',
    'provider'             => 'aws',
    'firewall_allow'       => [ '10.200.0.0/16' ],
    'extra_terraform_vars' => {
      'tags' => { 'stack' => '2021-use1-1' }
    }
  })

  run_plan(pecdm::subplans::deploy, {
    inventory              => $inventory['pe_inventory'],
    'version'              => '2021.6.0',
    'dns_alt_names'        => ['puppet2021_us-east-1','puppet2021_us-east-1.route53domain.com',
                              'puppet2021_us-east-1-primary','puppet2021_us-east-1-replica',
                              'puppet_us-east-1.route53domain.com'],
    'extra_peadm_params'   => {
      'r10k_remote'           => 'git@gitlab.corp.com:core/pe_infra_control.git',
      'r10k_private_key_file' => '/Users/cdenneen/.ssh/code-manager_2022-05-17',
      'deploy_environment'    => 'main',
      'compiler_pool_address' => 'puppet_us-east-1.route53domain.com'
    },
  })

  $primary = peadm::get_targets(getvar('inventory.pe_inventory.server.0.name'), 1)

  run_task('node_manager::update_classes', $primary, environment => 'main')

  apply($primary) {
    class { 'peadm::setup::node_manager_yaml':
      primary_host => $primary.peadm::certname(),
    }
    node_group { 'Application 1':
      rule => ['=', ['trusted', 'extensions', 'pp_role'], 'Application 1'],
    }
    node_group { 'Application 2':
      rule => ['=', ['trusted', 'extensions', 'pp_role'], 'Application 2'],
    }
    node_group { 'AP Puppet':
      parent               => 'All Environments',
      classes              => {'role::all_in_one' => {}},
      environment          => 'main',
      override_environment => 'true',
      rule                 => ['and', ['~', ['trusted', 'extensions', '1.3.6.1.4.1.34380.1.1.9812'], 'puppet/server']]
    }
  }
}

run shows:

❯ /opt/puppetlabs/bin/bolt plan run ca::provision --trace
Starting: plan ca::provision
Starting: plan pecdm::subplans::provision
Finished: plan pecdm::subplans::provision in 0.43 sec
Finished: plan ca::provision in 0.44 sec
No name or uri for target: {"name"=>"", "uri"=>"10.224.11.177"} for group at ["peadm_nodes"]
cdenneen commented 1 year ago

The code shows for aws it should be using private_dns for name which I see in the terraform.tfstate Any idea why it's showing empty in the output?

ody commented 1 year ago

Closing PR as it is no longer compatible with merged changes which are meant to address use case