diff --git a/README.md b/README.md index 00f349e..51a42d7 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,6 @@ packages, InfraHouse toolkit, Puppet apply wrapper, swap, accounts, and sudo. | `jumphost` | SSH bastion host | | `mta` | Mail transfer agent | | `openvpn_server` | OpenVPN server | -| `percona_server` | Percona MySQL server | | `teleport` | Teleport access proxy | | `terraformer` | Terraform runner | | `webserver` | Web server | diff --git a/debian/changelog b/debian/changelog index 0afbc1b..957ac04 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +puppet-code (0.1.0-1build308) noble; urgency=medium + + * commit event. see changes history in git log + + -- root Sun, 28 Jun 2026 14:54:07 +0000 + puppet-code (0.1.0-1build307) noble; urgency=medium * commit event. see changes history in git log diff --git a/environments/development/data/percona_server.yaml b/environments/development/data/percona_server.yaml deleted file mode 100644 index 410c544..0000000 --- a/environments/development/data/percona_server.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -classes: - - role::percona_server \ No newline at end of file diff --git a/environments/development/modules/profile/manifests/percona.pp b/environments/development/modules/profile/manifests/percona.pp deleted file mode 100644 index 76f7e0b..0000000 --- a/environments/development/modules/profile/manifests/percona.pp +++ /dev/null @@ -1,48 +0,0 @@ -# @summary: Installs Percona Server and related components -class profile::percona () { - - $server_version = pick_default($facts.dig('percona', 'server_version'), '') - - $percona_series = $server_version ? { - '' => '8.0', - 'latest' => '8.4', - /^8\.4\./ => '8.4', - default => '8.0', - } - - $repo_name = $percona_series ? { - '8.4' => 'ps-84-lts', - default => 'ps80', - } - - # Normalize version to full apt format - # Percona apt versions have a distro suffix, e.g. 8.4.7-7-1.noble - # Accept both short (8.4.7-7) and full (8.4.7-7-1.noble) forms - $codename = $facts['os']['distro']['codename'] - $server_ensure = $server_version ? { - '' => 'installed', - 'latest' => 'installed', - default => $server_version =~ /\.${codename}$/ ? { - true => $server_version, - default => "${server_version}-1.${codename}", - }, - } - - # XtraBackup package name differs between series - $xtrabackup_package = $percona_series ? { - '8.4' => 'percona-xtrabackup-84', - default => 'percona-xtrabackup-80', - } - - include 'profile::percona::repo' - include 'profile::percona::packages' - include 'profile::percona::config' - include 'profile::percona::service' - include 'profile::percona::bootstrap' - - # Orchestrator doesn't support MySQL 8.4 (SHOW MASTER/SLAVE STATUS removed) - if $percona_series == '8.0' { - include 'profile::percona::orchestrator' - } - -} diff --git a/environments/development/modules/profile/manifests/percona/bootstrap.pp b/environments/development/modules/profile/manifests/percona/bootstrap.pp deleted file mode 100644 index f0eeac6..0000000 --- a/environments/development/modules/profile/manifests/percona/bootstrap.pp +++ /dev/null @@ -1,33 +0,0 @@ -# @summary: Bootstraps Percona Server as master or configures as replica. -# Creates MySQL users on master (replicas get them via replication). -# Registers instances with NLB target groups. -class profile::percona::bootstrap () { - - $cluster_id = $facts['percona']['cluster_id'] - $dynamodb_table = $facts['percona']['dynamodb_table'] - $credentials_secret = $facts['percona']['credentials_secret'] - $vpc_cidr = $facts['percona']['vpc_cidr'] - $read_tg_arn = $facts['percona']['read_tg_arn'] - $write_tg_arn = $facts['percona']['write_tg_arn'] - - $bootstrap_cmd = @("CMD"/L) - ih-mysql bootstrap \ - --cluster-id ${cluster_id} \ - --dynamodb-table ${dynamodb_table} \ - --credentials-secret ${credentials_secret} \ - --vpc-cidr ${vpc_cidr} \ - --read-tg-arn ${read_tg_arn} \ - --write-tg-arn ${write_tg_arn} - |-CMD - - exec { 'percona-bootstrap': - path => '/usr/local/bin:/usr/bin:/bin', - command => $bootstrap_cmd, - creates => '/var/lib/mysql/.bootstrapped', - require => [ - Package['infrahouse-toolkit'], - Service['mysql'], - ], - } - -} \ No newline at end of file diff --git a/environments/development/modules/profile/manifests/percona/config.pp b/environments/development/modules/profile/manifests/percona/config.pp deleted file mode 100644 index a41bd87..0000000 --- a/environments/development/modules/profile/manifests/percona/config.pp +++ /dev/null @@ -1,60 +0,0 @@ -# @summary: Configures Percona Server my.cnf with GTID replication settings. -class profile::percona::config () { - - $percona_series = $profile::percona::percona_series - - # Generate unique server-id from IP address last two octets - $ip_parts = split($facts['networking']['ip'], '[.]') - $server_id = Integer($ip_parts[2]) * 256 + Integer($ip_parts[3]) - - # Auto-calculate buffer pool size (75% of RAM) - $total_memory_mb = $facts['memory']['system']['total_bytes'] / 1024 / 1024 - $auto_buffer_pool = "${Integer($total_memory_mb * 0.75)}M" - - # Key paths - can be used by other profiles (e.g., cloudwatch) - $log_error = pick( - $facts.dig('percona', 'log_error'), - lookup('profile::percona::log_error', undef, undef, undef), - '/var/log/mysql/error.log' - ) - - # Default MySQL configuration - $default_config = { - 'datadir' => '/var/lib/mysql', - 'innodb_buffer_pool_size' => $auto_buffer_pool, - 'innodb_flush_log_at_trx_commit' => '1', - 'innodb_log_file_size' => '256M', - 'log-error' => $log_error, - 'max_connections' => '500', - 'pid-file' => '/var/run/mysqld/mysqld.pid', - 'socket' => '/var/run/mysqld/mysqld.sock', - 'sync_binlog' => '1', - } - - # Get config from Hiera and facts - $hiera_config = lookup('profile::percona::mysql_config', Hash, 'hash', {}) - $facts_config = pick($facts.dig('percona', 'mysql_config'), {}) - - # Merge: defaults ← hiera ← facts (facts have highest priority) - $mysql_config = $default_config + $hiera_config + $facts_config - - # Ensure config directory exists before package install - file { '/etc/mysql': - ensure => directory, - } - - file { '/etc/mysql/mysql.conf.d': - ensure => directory, - require => File['/etc/mysql'], - } - - # Config must be in place BEFORE package installs so MySQL starts with correct settings - # NOTE: No notify - config changes require manual/controlled restart - # Do NOT auto-restart a master with active connections - file { '/etc/mysql/mysql.conf.d/mysqld.cnf': - ensure => file, - content => template('profile/percona/mysqld.cnf.erb'), - require => File['/etc/mysql/mysql.conf.d'], - } - -} \ No newline at end of file diff --git a/environments/development/modules/profile/manifests/percona/orchestrator.pp b/environments/development/modules/profile/manifests/percona/orchestrator.pp deleted file mode 100644 index ef87f3a..0000000 --- a/environments/development/modules/profile/manifests/percona/orchestrator.pp +++ /dev/null @@ -1,6 +0,0 @@ -# @summary Installs and configures Percona Orchestrator -class profile::percona::orchestrator () { - include profile::percona::orchestrator::install - include profile::percona::orchestrator::config - include profile::percona::orchestrator::service -} diff --git a/environments/development/modules/profile/manifests/percona/orchestrator/config.pp b/environments/development/modules/profile/manifests/percona/orchestrator/config.pp deleted file mode 100644 index 06ccc47..0000000 --- a/environments/development/modules/profile/manifests/percona/orchestrator/config.pp +++ /dev/null @@ -1,41 +0,0 @@ -# @summary Configures Percona Orchestrator with Raft clustering -class profile::percona::orchestrator::config () { - $orchestrator_password = aws_get_secret( - $facts['percona']['credentials_secret'], $facts['ec2_metadata']['placement']['region'] - )['orchestrator'] - $cluster_id = $facts['percona']['cluster_id'] - $dynamodb_table = $facts['percona']['dynamodb_table'] - $credentials_secret = $facts['percona']['credentials_secret'] - $vpc_cidr = $facts['percona']['vpc_cidr'] - $read_tg_arn = $facts['percona']['read_tg_arn'] - $write_tg_arn = $facts['percona']['write_tg_arn'] - $private_ip = $facts['networking']['ip'] - - # Discover Raft nodes by querying the ASG at compile time - $raft_nodes_raw = generate('/usr/local/bin/ih-ec2', 'list', "--cluster_id=${cluster_id}", '-c') - $raft_nodes = split(strip($raft_nodes_raw), ',').filter |$node| { $node != '' } - - file { '/var/lib/orchestrator': - ensure => directory, - } - - file { '/var/lib/orchestrator/raft': - ensure => directory, - require => File['/var/lib/orchestrator'], - } - - $networking_hostname = $facts['networking']['hostname'] - - file { '/etc/profile.d/orchestrator.sh': - ensure => file, - content => template('profile/percona/orchestrator-profile.sh.erb'), - } - - file { '/etc/orchestrator.conf.json': - ensure => file, - mode => '0600', - content => template('profile/percona/orchestrator.conf.json.erb'), - notify => Service['orchestrator'], - require => Package['orchestrator'], - } -} diff --git a/environments/development/modules/profile/manifests/percona/orchestrator/install.pp b/environments/development/modules/profile/manifests/percona/orchestrator/install.pp deleted file mode 100644 index bb09835..0000000 --- a/environments/development/modules/profile/manifests/percona/orchestrator/install.pp +++ /dev/null @@ -1,10 +0,0 @@ -# @summary Installs Percona Orchestrator package -class profile::percona::orchestrator::install () { - package { 'orchestrator': - ensure => 'installed', - } - - package { 'orchestrator-client': - ensure => 'installed', - } -} diff --git a/environments/development/modules/profile/manifests/percona/orchestrator/service.pp b/environments/development/modules/profile/manifests/percona/orchestrator/service.pp deleted file mode 100644 index 0f9c810..0000000 --- a/environments/development/modules/profile/manifests/percona/orchestrator/service.pp +++ /dev/null @@ -1,8 +0,0 @@ -# @summary Manages the Percona Orchestrator service -class profile::percona::orchestrator::service () { - service { 'orchestrator': - ensure => running, - enable => true, - require => [Package['orchestrator'], File['/etc/orchestrator.conf.json']], - } -} diff --git a/environments/development/modules/profile/manifests/percona/packages.pp b/environments/development/modules/profile/manifests/percona/packages.pp deleted file mode 100644 index fb0ac7b..0000000 --- a/environments/development/modules/profile/manifests/percona/packages.pp +++ /dev/null @@ -1,26 +0,0 @@ -# @summary: Installs Percona Server packages. -class profile::percona::packages () { - - $server_ensure = $profile::percona::server_ensure - $xtrabackup_package = $profile::percona::xtrabackup_package - - # Config must be in place before package install so MySQL starts correctly - package { 'percona-server-server': - ensure => $server_ensure, - require => [ - Class['profile::percona::repo'], - Class['profile::percona::config'], - ], - } - - package { 'percona-server-client': - ensure => $server_ensure, - require => Class['profile::percona::repo'], - } - - package { $xtrabackup_package: - ensure => 'installed', - require => Class['profile::percona::repo'], - } - -} diff --git a/environments/development/modules/profile/manifests/percona/repo.pp b/environments/development/modules/profile/manifests/percona/repo.pp deleted file mode 100644 index d8d4728..0000000 --- a/environments/development/modules/profile/manifests/percona/repo.pp +++ /dev/null @@ -1,56 +0,0 @@ -# @summary: Installs Percona repository using percona-release package. -class profile::percona::repo () { - $release_package_url = 'https://repo.percona.com/apt/percona-release_latest.generic_all.deb' - $release_package_path = '/var/tmp/percona-release_latest.generic_all.deb' - - $repo_name = $profile::percona::repo_name - $percona_series = $profile::percona::percona_series - - package { ['gnupg2', 'curl', 'lsb-release']: - ensure => 'installed', - } - - exec { 'download-percona-release': - path => '/usr/bin', - command => "curl -o ${release_package_path} ${release_package_url}", - creates => $release_package_path, - require => Package['curl'], - } - - exec { 'install-percona-release': - path => '/usr/bin:/usr/sbin:/sbin:/bin', - command => "dpkg -i ${release_package_path}", - unless => 'dpkg -l percona-release', - require => [ - Exec['download-percona-release'], - Package['gnupg2'], - Package['lsb-release'], - ], - } - - exec { 'percona-release-setup': - path => '/usr/bin:/usr/sbin:/sbin:/bin', - command => "percona-release setup ${repo_name} -y", - unless => "test -f /etc/apt/sources.list.d/percona-${repo_name}-release.list", - require => Exec['install-percona-release'], - notify => Exec['update-percona-repo'], - } - - # XtraBackup 8.4 lives in its own repo (pxb-84-lts), not in ps-84-lts - # XtraBackup 8.0 is included in ps80, so no extra repo needed - if $percona_series == '8.4' { - exec { 'enable-pxb-repo': - path => '/usr/bin:/usr/sbin:/sbin:/bin', - command => 'percona-release enable pxb-84-lts', - unless => 'test -f /etc/apt/sources.list.d/percona-pxb-84-lts-release.list', - require => Exec['install-percona-release'], - notify => Exec['update-percona-repo'], - } - } - - exec { 'update-percona-repo': - path => '/usr/bin', - command => 'apt-get update', - refreshonly => true, - } -} \ No newline at end of file diff --git a/environments/development/modules/profile/manifests/percona/service.pp b/environments/development/modules/profile/manifests/percona/service.pp deleted file mode 100644 index 38485eb..0000000 --- a/environments/development/modules/profile/manifests/percona/service.pp +++ /dev/null @@ -1,10 +0,0 @@ -# @summary: Manages Percona Server MySQL service. -class profile::percona::service () { - - service { 'mysql': - ensure => running, - enable => true, - require => Package['percona-server-server'], - } - -} \ No newline at end of file diff --git a/environments/development/modules/profile/templates/openvpn_server/README.erb b/environments/development/modules/profile/templates/openvpn_server/README.erb index e90ae2d..2c4c108 100644 --- a/environments/development/modules/profile/templates/openvpn_server/README.erb +++ b/environments/development/modules/profile/templates/openvpn_server/README.erb @@ -74,4 +74,4 @@ Related Documentation --------------------- Easy-RSA: https://github.com/OpenVPN/easy-rsa -OpenSSL 3.x issues: https://github.com/OpenVPN/easy-rsa/issues/692 \ No newline at end of file +OpenSSL 3.x issues: https://github.com/OpenVPN/easy-rsa/issues/692 diff --git a/environments/development/modules/profile/templates/percona/mysqld.cnf.erb b/environments/development/modules/profile/templates/percona/mysqld.cnf.erb deleted file mode 100644 index a4023ef..0000000 --- a/environments/development/modules/profile/templates/percona/mysqld.cnf.erb +++ /dev/null @@ -1,26 +0,0 @@ -# Percona Server <%= @percona_series %> configuration -# Managed by Puppet - DO NOT EDIT - -[mysqld] -# Unique server identifier -server-id = <%= @server_id %> - -# GTID configuration (required for replication) -gtid_mode = ON -enforce_gtid_consistency = ON - -# Binary logging (required for replication) -log_bin = mysql-bin -<% if @percona_series == '8.0' -%> -binlog_format = ROW -log_slave_updates = ON -<% end -%> - -# Replication settings -relay_log = relay-bin -relay_log_recovery = ON - -# Configurable settings (from facts/hiera/defaults) -<% @mysql_config.sort.each do |key, value| -%> -<%= key %> = <%= value %> -<% end -%> \ No newline at end of file diff --git a/environments/development/modules/profile/templates/percona/orchestrator-profile.sh.erb b/environments/development/modules/profile/templates/percona/orchestrator-profile.sh.erb deleted file mode 100644 index e2cb71f..0000000 --- a/environments/development/modules/profile/templates/percona/orchestrator-profile.sh.erb +++ /dev/null @@ -1 +0,0 @@ -export ORCHESTRATOR_INSTANCE="<%= @networking_hostname %>:3306" diff --git a/environments/development/modules/profile/templates/percona/orchestrator.conf.json.erb b/environments/development/modules/profile/templates/percona/orchestrator.conf.json.erb deleted file mode 100644 index e57e21e..0000000 --- a/environments/development/modules/profile/templates/percona/orchestrator.conf.json.erb +++ /dev/null @@ -1,26 +0,0 @@ -{ - "Debug": false, - "ListenAddress": ":3000", - "BackendDB": "sqlite", - "MySQLTopologyUser": "orchestrator", - "MySQLTopologyPassword": "<%= @orchestrator_password %>", - "MySQLTopologySSLSkipVerify": true, - "RaftEnabled": true, - "RaftDataDir": "/var/lib/orchestrator/raft", - "RaftBind": "<%= @private_ip %>:10008", - "RaftNodes": [ -<% @raft_nodes.each_with_index do |node, i| -%> - "<%= node %>:10008"<%= i < @raft_nodes.length - 1 ? ',' : '' %> -<% end -%> - ], - "SQLite3DataFile": "/var/lib/orchestrator/orchestrator.sqlite3", - "DetectClusterAliasQuery": "SELECT '<%= @cluster_id %>'", - "DiscoverySeeds": [ - "<%= @private_ip %>:3306" - ], - "UseSuperReadOnly": true, - "RecoverMasterClusterFilters": ["*"], - "PostFailoverProcesses": [ - "ih-mysql failover --cluster-id <%= @cluster_id %> --dynamodb-table <%= @dynamodb_table %> --credentials-secret <%= @credentials_secret %> --vpc-cidr <%= @vpc_cidr %> --read-tg-arn <%= @read_tg_arn %> --write-tg-arn <%= @write_tg_arn %> {failureType} {failedHost}:{failedPort} {successorHost}:{successorPort}" - ] -} diff --git a/modules/role/manifests/percona_server.pp b/modules/role/manifests/percona_server.pp deleted file mode 100644 index 3c16402..0000000 --- a/modules/role/manifests/percona_server.pp +++ /dev/null @@ -1,7 +0,0 @@ -# @summary: Puppet role for a Percona Server node -class role::percona_server () { - - include 'profile::base' - include 'profile::percona' - -} \ No newline at end of file